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/CSSScaleInterpolationType.h" | 5 #include "core/animation/CSSScaleInterpolationType.h" |
6 | 6 |
7 #include "core/css/CSSPrimitiveValue.h" | 7 #include "core/css/CSSPrimitiveValue.h" |
8 #include "core/css/CSSValueList.h" | 8 #include "core/css/CSSValueList.h" |
9 #include "core/css/resolver/StyleResolverState.h" | 9 #include "core/css/resolver/StyleResolverState.h" |
10 #include "wtf/PtrUtil.h" | 10 #include "wtf/PtrUtil.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 if (array[i] != other.array[i]) | 48 if (array[i] != other.array[i]) |
49 return false; | 49 return false; |
50 } | 50 } |
51 return isNone == other.isNone; | 51 return isNone == other.isNone; |
52 } | 52 } |
53 | 53 |
54 double array[3]; | 54 double array[3]; |
55 bool isNone; | 55 bool isNone; |
56 }; | 56 }; |
57 | 57 |
58 std::unique_ptr<InterpolableValue> createIdentityInterpolableValue() { | 58 std::unique_ptr<InterpolableValue> createScaleIdentity() { |
59 std::unique_ptr<InterpolableList> list = InterpolableList::create(3); | 59 std::unique_ptr<InterpolableList> list = InterpolableList::create(3); |
60 for (size_t i = 0; i < 3; i++) | 60 for (size_t i = 0; i < 3; i++) |
61 list->set(i, InterpolableNumber::create(1)); | 61 list->set(i, InterpolableNumber::create(1)); |
62 return std::move(list); | 62 return std::move(list); |
63 } | 63 } |
64 | 64 |
65 class InheritedScaleChecker : public InterpolationType::ConversionChecker { | 65 class InheritedScaleChecker : public InterpolationType::ConversionChecker { |
66 public: | 66 public: |
67 static std::unique_ptr<InheritedScaleChecker> create(const Scale& scale) { | 67 static std::unique_ptr<InheritedScaleChecker> create(const Scale& scale) { |
68 return WTF::wrapUnique(new InheritedScaleChecker(scale)); | 68 return WTF::wrapUnique(new InheritedScaleChecker(scale)); |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 toCSSScaleNonInterpolableValue(*value.nonInterpolableValue).setIsAdditive(); | 186 toCSSScaleNonInterpolableValue(*value.nonInterpolableValue).setIsAdditive(); |
187 } | 187 } |
188 | 188 |
189 PairwiseInterpolationValue CSSScaleInterpolationType::maybeMergeSingles( | 189 PairwiseInterpolationValue CSSScaleInterpolationType::maybeMergeSingles( |
190 InterpolationValue&& start, | 190 InterpolationValue&& start, |
191 InterpolationValue&& end) const { | 191 InterpolationValue&& end) const { |
192 size_t startListLength = | 192 size_t startListLength = |
193 toInterpolableList(*start.interpolableValue).length(); | 193 toInterpolableList(*start.interpolableValue).length(); |
194 size_t endListLength = toInterpolableList(*end.interpolableValue).length(); | 194 size_t endListLength = toInterpolableList(*end.interpolableValue).length(); |
195 if (startListLength < endListLength) | 195 if (startListLength < endListLength) |
196 start.interpolableValue = createIdentityInterpolableValue(); | 196 start.interpolableValue = createScaleIdentity(); |
197 else if (endListLength < startListLength) | 197 else if (endListLength < startListLength) |
198 end.interpolableValue = createIdentityInterpolableValue(); | 198 end.interpolableValue = createScaleIdentity(); |
199 | 199 |
200 return PairwiseInterpolationValue( | 200 return PairwiseInterpolationValue( |
201 std::move(start.interpolableValue), std::move(end.interpolableValue), | 201 std::move(start.interpolableValue), std::move(end.interpolableValue), |
202 CSSScaleNonInterpolableValue::merge( | 202 CSSScaleNonInterpolableValue::merge( |
203 toCSSScaleNonInterpolableValue(*start.nonInterpolableValue), | 203 toCSSScaleNonInterpolableValue(*start.nonInterpolableValue), |
204 toCSSScaleNonInterpolableValue(*end.nonInterpolableValue))); | 204 toCSSScaleNonInterpolableValue(*end.nonInterpolableValue))); |
205 } | 205 } |
206 | 206 |
207 InterpolationValue | 207 InterpolationValue |
208 CSSScaleInterpolationType::maybeConvertStandardPropertyUnderlyingValue( | 208 CSSScaleInterpolationType::maybeConvertStandardPropertyUnderlyingValue( |
209 const ComputedStyle& style) const { | 209 const ComputedStyle& style) const { |
210 return Scale(style.scale()).createInterpolationValue(); | 210 return Scale(style.scale()).createInterpolationValue(); |
211 } | 211 } |
212 | 212 |
213 void CSSScaleInterpolationType::composite( | 213 void CSSScaleInterpolationType::composite( |
214 UnderlyingValueOwner& underlyingValueOwner, | 214 UnderlyingValueOwner& underlyingValueOwner, |
215 double underlyingFraction, | 215 double underlyingFraction, |
216 const InterpolationValue& value, | 216 const InterpolationValue& value, |
217 double interpolationFraction) const { | 217 double interpolationFraction) const { |
218 if (toInterpolableList(*underlyingValueOwner.mutableValue().interpolableValue) | 218 if (toInterpolableList(*underlyingValueOwner.mutableValue().interpolableValue) |
219 .length() == 0) { | 219 .length() == 0) { |
220 underlyingValueOwner.mutableValue().interpolableValue = | 220 underlyingValueOwner.mutableValue().interpolableValue = |
221 createIdentityInterpolableValue(); | 221 createScaleIdentity(); |
222 } | 222 } |
223 | 223 |
224 const CSSScaleNonInterpolableValue& metadata = | 224 const CSSScaleNonInterpolableValue& metadata = |
225 toCSSScaleNonInterpolableValue(*value.nonInterpolableValue); | 225 toCSSScaleNonInterpolableValue(*value.nonInterpolableValue); |
226 DCHECK(metadata.isStartAdditive() || metadata.isEndAdditive()); | 226 DCHECK(metadata.isStartAdditive() || metadata.isEndAdditive()); |
227 | 227 |
228 InterpolableList& underlyingList = toInterpolableList( | 228 InterpolableList& underlyingList = toInterpolableList( |
229 *underlyingValueOwner.mutableValue().interpolableValue); | 229 *underlyingValueOwner.mutableValue().interpolableValue); |
230 for (size_t i = 0; i < 3; i++) { | 230 for (size_t i = 0; i < 3; i++) { |
231 InterpolableNumber& underlying = | 231 InterpolableNumber& underlying = |
(...skipping 15 matching lines...) Expand all Loading... |
247 if (scale.isNone) { | 247 if (scale.isNone) { |
248 state.style()->setScale(nullptr); | 248 state.style()->setScale(nullptr); |
249 return; | 249 return; |
250 } | 250 } |
251 state.style()->setScale(ScaleTransformOperation::create( | 251 state.style()->setScale(ScaleTransformOperation::create( |
252 scale.array[0], scale.array[1], scale.array[2], | 252 scale.array[0], scale.array[1], scale.array[2], |
253 TransformOperation::Scale3D)); | 253 TransformOperation::Scale3D)); |
254 } | 254 } |
255 | 255 |
256 } // namespace blink | 256 } // namespace blink |
OLD | NEW |