OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/CSSLengthListInterpolationType.h" | 5 #include "core/animation/CSSLengthListInterpolationType.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include "core/animation/LengthInterpolationFunctions.h" | 8 #include "core/animation/LengthInterpolationFunctions.h" |
9 #include "core/animation/LengthListPropertyFunctions.h" | 9 #include "core/animation/LengthListPropertyFunctions.h" |
10 #include "core/animation/ListInterpolationFunctions.h" | 10 #include "core/animation/ListInterpolationFunctions.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 return LengthInterpolationFunctions::MaybeConvertCSSValue( | 117 return LengthInterpolationFunctions::MaybeConvertCSSValue( |
118 list.Item(index)); | 118 list.Item(index)); |
119 }); | 119 }); |
120 } | 120 } |
121 | 121 |
122 PairwiseInterpolationValue CSSLengthListInterpolationType::MaybeMergeSingles( | 122 PairwiseInterpolationValue CSSLengthListInterpolationType::MaybeMergeSingles( |
123 InterpolationValue&& start, | 123 InterpolationValue&& start, |
124 InterpolationValue&& end) const { | 124 InterpolationValue&& end) const { |
125 return ListInterpolationFunctions::MaybeMergeSingles( | 125 return ListInterpolationFunctions::MaybeMergeSingles( |
126 std::move(start), std::move(end), | 126 std::move(start), std::move(end), |
| 127 ListInterpolationFunctions::LengthMatchingStrategy::kLowestCommonMultiple, |
127 LengthInterpolationFunctions::MergeSingles); | 128 LengthInterpolationFunctions::MergeSingles); |
128 } | 129 } |
129 | 130 |
130 InterpolationValue | 131 InterpolationValue |
131 CSSLengthListInterpolationType::MaybeConvertStandardPropertyUnderlyingValue( | 132 CSSLengthListInterpolationType::MaybeConvertStandardPropertyUnderlyingValue( |
132 const ComputedStyle& style) const { | 133 const ComputedStyle& style) const { |
133 Vector<Length> underlying_length_list; | 134 Vector<Length> underlying_length_list; |
134 if (!LengthListPropertyFunctions::GetLengthList(CssProperty(), style, | 135 if (!LengthListPropertyFunctions::GetLengthList(CssProperty(), style, |
135 underlying_length_list)) | 136 underlying_length_list)) |
136 return nullptr; | 137 return nullptr; |
137 return MaybeConvertLengthList(underlying_length_list, style.EffectiveZoom()); | 138 return MaybeConvertLengthList(underlying_length_list, style.EffectiveZoom()); |
138 } | 139 } |
139 | 140 |
140 void CSSLengthListInterpolationType::Composite( | 141 void CSSLengthListInterpolationType::Composite( |
141 UnderlyingValueOwner& underlying_value_owner, | 142 UnderlyingValueOwner& underlying_value_owner, |
142 double underlying_fraction, | 143 double underlying_fraction, |
143 const InterpolationValue& value, | 144 const InterpolationValue& value, |
144 double interpolation_fraction) const { | 145 double interpolation_fraction) const { |
145 ListInterpolationFunctions::Composite( | 146 ListInterpolationFunctions::Composite( |
146 underlying_value_owner, underlying_fraction, *this, value, | 147 underlying_value_owner, underlying_fraction, *this, value, |
| 148 ListInterpolationFunctions::LengthMatchingStrategy::kLowestCommonMultiple, |
147 LengthInterpolationFunctions::NonInterpolableValuesAreCompatible, | 149 LengthInterpolationFunctions::NonInterpolableValuesAreCompatible, |
148 LengthInterpolationFunctions::Composite); | 150 LengthInterpolationFunctions::Composite); |
149 } | 151 } |
150 | 152 |
151 void CSSLengthListInterpolationType::ApplyStandardPropertyValue( | 153 void CSSLengthListInterpolationType::ApplyStandardPropertyValue( |
152 const InterpolableValue& interpolable_value, | 154 const InterpolableValue& interpolable_value, |
153 const NonInterpolableValue* non_interpolable_value, | 155 const NonInterpolableValue* non_interpolable_value, |
154 StyleResolverState& state) const { | 156 StyleResolverState& state) const { |
155 const InterpolableList& interpolable_list = | 157 const InterpolableList& interpolable_list = |
156 ToInterpolableList(interpolable_value); | 158 ToInterpolableList(interpolable_value); |
157 const size_t length = interpolable_list.length(); | 159 const size_t length = interpolable_list.length(); |
158 DCHECK_GT(length, 0U); | 160 DCHECK_GT(length, 0U); |
159 const NonInterpolableList& non_interpolable_list = | 161 const NonInterpolableList& non_interpolable_list = |
160 ToNonInterpolableList(*non_interpolable_value); | 162 ToNonInterpolableList(*non_interpolable_value); |
161 DCHECK_EQ(non_interpolable_list.length(), length); | 163 DCHECK_EQ(non_interpolable_list.length(), length); |
162 Vector<Length> result(length); | 164 Vector<Length> result(length); |
163 for (size_t i = 0; i < length; i++) { | 165 for (size_t i = 0; i < length; i++) { |
164 result[i] = LengthInterpolationFunctions::CreateLength( | 166 result[i] = LengthInterpolationFunctions::CreateLength( |
165 *interpolable_list.Get(i), non_interpolable_list.Get(i), | 167 *interpolable_list.Get(i), non_interpolable_list.Get(i), |
166 state.CssToLengthConversionData(), value_range_); | 168 state.CssToLengthConversionData(), value_range_); |
167 } | 169 } |
168 LengthListPropertyFunctions::SetLengthList(CssProperty(), *state.Style(), | 170 LengthListPropertyFunctions::SetLengthList(CssProperty(), *state.Style(), |
169 std::move(result)); | 171 std::move(result)); |
170 } | 172 } |
171 | 173 |
172 } // namespace blink | 174 } // namespace blink |
OLD | NEW |