OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/animation/CSSSizeListInterpolationType.h" | 5 #include "core/animation/CSSSizeListInterpolationType.h" |
6 | 6 |
7 #include "core/animation/ListInterpolationFunctions.h" | 7 #include "core/animation/ListInterpolationFunctions.h" |
8 #include "core/animation/SizeInterpolationFunctions.h" | 8 #include "core/animation/SizeInterpolationFunctions.h" |
9 #include "core/animation/SizeListPropertyFunctions.h" | 9 #include "core/animation/SizeListPropertyFunctions.h" |
10 #include "core/css/CSSValueList.h" | 10 #include "core/css/CSSValueList.h" |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 const StyleResolverState*, | 143 const StyleResolverState*, |
144 ConversionCheckers&) const { | 144 ConversionCheckers&) const { |
145 return MaybeConvertCSSSizeList(value); | 145 return MaybeConvertCSSSizeList(value); |
146 } | 146 } |
147 | 147 |
148 PairwiseInterpolationValue CSSSizeListInterpolationType::MaybeMergeSingles( | 148 PairwiseInterpolationValue CSSSizeListInterpolationType::MaybeMergeSingles( |
149 InterpolationValue&& start, | 149 InterpolationValue&& start, |
150 InterpolationValue&& end) const { | 150 InterpolationValue&& end) const { |
151 return ListInterpolationFunctions::MaybeMergeSingles( | 151 return ListInterpolationFunctions::MaybeMergeSingles( |
152 std::move(start), std::move(end), | 152 std::move(start), std::move(end), |
| 153 ListInterpolationFunctions::LengthMatchingStrategy::kLowestCommonMultiple, |
153 SizeInterpolationFunctions::MaybeMergeSingles); | 154 SizeInterpolationFunctions::MaybeMergeSingles); |
154 } | 155 } |
155 | 156 |
156 InterpolationValue | 157 InterpolationValue |
157 CSSSizeListInterpolationType::MaybeConvertStandardPropertyUnderlyingValue( | 158 CSSSizeListInterpolationType::MaybeConvertStandardPropertyUnderlyingValue( |
158 const ComputedStyle& style) const { | 159 const ComputedStyle& style) const { |
159 return ConvertSizeList( | 160 return ConvertSizeList( |
160 SizeListPropertyFunctions::GetSizeList(CssProperty(), style), | 161 SizeListPropertyFunctions::GetSizeList(CssProperty(), style), |
161 style.EffectiveZoom()); | 162 style.EffectiveZoom()); |
162 } | 163 } |
163 | 164 |
164 void CSSSizeListInterpolationType::Composite( | 165 void CSSSizeListInterpolationType::Composite( |
165 UnderlyingValueOwner& underlying_value_owner, | 166 UnderlyingValueOwner& underlying_value_owner, |
166 double underlying_fraction, | 167 double underlying_fraction, |
167 const InterpolationValue& value, | 168 const InterpolationValue& value, |
168 double interpolation_fraction) const { | 169 double interpolation_fraction) const { |
169 ListInterpolationFunctions::Composite( | 170 ListInterpolationFunctions::Composite( |
170 underlying_value_owner, underlying_fraction, *this, value, | 171 underlying_value_owner, underlying_fraction, *this, value, |
| 172 ListInterpolationFunctions::LengthMatchingStrategy::kLowestCommonMultiple, |
| 173 |
171 SizeInterpolationFunctions::NonInterpolableValuesAreCompatible, | 174 SizeInterpolationFunctions::NonInterpolableValuesAreCompatible, |
172 SizeInterpolationFunctions::Composite); | 175 SizeInterpolationFunctions::Composite); |
173 } | 176 } |
174 | 177 |
175 void CSSSizeListInterpolationType::ApplyStandardPropertyValue( | 178 void CSSSizeListInterpolationType::ApplyStandardPropertyValue( |
176 const InterpolableValue& interpolable_value, | 179 const InterpolableValue& interpolable_value, |
177 const NonInterpolableValue* non_interpolable_value, | 180 const NonInterpolableValue* non_interpolable_value, |
178 StyleResolverState& state) const { | 181 StyleResolverState& state) const { |
179 const auto& interpolable_list = ToInterpolableList(interpolable_value); | 182 const auto& interpolable_list = ToInterpolableList(interpolable_value); |
180 const auto& non_interpolable_list = | 183 const auto& non_interpolable_list = |
181 ToNonInterpolableList(*non_interpolable_value); | 184 ToNonInterpolableList(*non_interpolable_value); |
182 size_t length = interpolable_list.length(); | 185 size_t length = interpolable_list.length(); |
183 DCHECK_EQ(length, non_interpolable_list.length()); | 186 DCHECK_EQ(length, non_interpolable_list.length()); |
184 DCHECK_EQ(length % 2, 0ul); | 187 DCHECK_EQ(length % 2, 0ul); |
185 size_t size_list_length = length / 2; | 188 size_t size_list_length = length / 2; |
186 SizeList size_list(size_list_length); | 189 SizeList size_list(size_list_length); |
187 for (size_t i = 0; i < size_list_length; i++) { | 190 for (size_t i = 0; i < size_list_length; i++) { |
188 size_list[i] = SizeInterpolationFunctions::CreateFillSize( | 191 size_list[i] = SizeInterpolationFunctions::CreateFillSize( |
189 *interpolable_list.Get(i * 2), non_interpolable_list.Get(i * 2), | 192 *interpolable_list.Get(i * 2), non_interpolable_list.Get(i * 2), |
190 *interpolable_list.Get(i * 2 + 1), non_interpolable_list.Get(i * 2 + 1), | 193 *interpolable_list.Get(i * 2 + 1), non_interpolable_list.Get(i * 2 + 1), |
191 state.CssToLengthConversionData()); | 194 state.CssToLengthConversionData()); |
192 } | 195 } |
193 SizeListPropertyFunctions::SetSizeList(CssProperty(), *state.Style(), | 196 SizeListPropertyFunctions::SetSizeList(CssProperty(), *state.Style(), |
194 size_list); | 197 size_list); |
195 } | 198 } |
196 | 199 |
197 } // namespace blink | 200 } // namespace blink |
OLD | NEW |