| 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 #ifndef InterpolationType_h | 5 #ifndef InterpolationType_h |
| 6 #define InterpolationType_h | 6 #define InterpolationType_h |
| 7 | 7 |
| 8 #include "core/animation/InterpolationValue.h" | 8 #include "core/animation/InterpolationValue.h" |
| 9 #include "core/animation/Keyframe.h" | 9 #include "core/animation/Keyframe.h" |
| 10 #include "core/animation/PairwiseInterpolationValue.h" | 10 #include "core/animation/PairwiseInterpolationValue.h" |
| 11 #include "core/animation/PrimitiveInterpolation.h" | 11 #include "core/animation/PrimitiveInterpolation.h" |
| 12 #include "core/animation/PropertyHandle.h" | 12 #include "core/animation/PropertyHandle.h" |
| 13 #include "core/animation/UnderlyingValueOwner.h" | 13 #include "core/animation/UnderlyingValueOwner.h" |
| 14 #include "platform/heap/Handle.h" | 14 #include "platform/heap/Handle.h" |
| 15 #include "wtf/Allocator.h" | 15 #include "wtf/Allocator.h" |
| 16 #include <memory> | 16 #include <memory> |
| 17 | 17 |
| 18 namespace blink { | 18 namespace blink { |
| 19 | 19 |
| 20 class InterpolationEnvironment; | 20 class InterpolationEnvironment; |
| 21 | 21 |
| 22 // Subclasses of InterpolationType implement the logic for a specific value type
of a specific PropertyHandle to: | 22 // Subclasses of InterpolationType implement the logic for a specific value type |
| 23 // - Convert PropertySpecificKeyframe values to (Pairwise)?InterpolationValues:
maybeConvertPairwise() and maybeConvertSingle() | 23 // of a specific PropertyHandle to: |
| 24 // - Convert the target Element's property value to an InterpolationValue: maybe
ConvertUnderlyingValue() | 24 // - Convert PropertySpecificKeyframe values to (Pairwise)?InterpolationValues: |
| 25 // maybeConvertPairwise() and maybeConvertSingle() |
| 26 // - Convert the target Element's property value to an InterpolationValue: |
| 27 // maybeConvertUnderlyingValue() |
| 25 // - Apply an InterpolationValue to a target Element's property: apply(). | 28 // - Apply an InterpolationValue to a target Element's property: apply(). |
| 26 class InterpolationType { | 29 class InterpolationType { |
| 27 USING_FAST_MALLOC(InterpolationType); | 30 USING_FAST_MALLOC(InterpolationType); |
| 28 WTF_MAKE_NONCOPYABLE(InterpolationType); | 31 WTF_MAKE_NONCOPYABLE(InterpolationType); |
| 29 | 32 |
| 30 public: | 33 public: |
| 31 virtual ~InterpolationType() { NOTREACHED(); } | 34 virtual ~InterpolationType() { NOTREACHED(); } |
| 32 | 35 |
| 33 PropertyHandle getProperty() const { return m_property; } | 36 PropertyHandle getProperty() const { return m_property; } |
| 34 | 37 |
| 35 // ConversionCheckers are returned from calls to maybeConvertPairwise() and ma
ybeConvertSingle() to enable the caller to check | 38 // ConversionCheckers are returned from calls to maybeConvertPairwise() and |
| 36 // whether the result is still valid given changes in the InterpolationEnviron
ment and underlying InterpolationValue. | 39 // maybeConvertSingle() to enable the caller to check whether the result is |
| 40 // still valid given changes in the InterpolationEnvironment and underlying |
| 41 // InterpolationValue. |
| 37 class ConversionChecker { | 42 class ConversionChecker { |
| 38 USING_FAST_MALLOC(ConversionChecker); | 43 USING_FAST_MALLOC(ConversionChecker); |
| 39 WTF_MAKE_NONCOPYABLE(ConversionChecker); | 44 WTF_MAKE_NONCOPYABLE(ConversionChecker); |
| 40 | 45 |
| 41 public: | 46 public: |
| 42 virtual ~ConversionChecker() {} | 47 virtual ~ConversionChecker() {} |
| 43 void setType(const InterpolationType& type) { m_type = &type; } | 48 void setType(const InterpolationType& type) { m_type = &type; } |
| 44 const InterpolationType& type() const { return *m_type; } | 49 const InterpolationType& type() const { return *m_type; } |
| 45 virtual bool isValid(const InterpolationEnvironment&, | 50 virtual bool isValid(const InterpolationEnvironment&, |
| 46 const InterpolationValue& underlying) const = 0; | 51 const InterpolationValue& underlying) const = 0; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 DCHECK(!underlyingValueOwner.value().nonInterpolableValue); | 89 DCHECK(!underlyingValueOwner.value().nonInterpolableValue); |
| 85 DCHECK(!value.nonInterpolableValue); | 90 DCHECK(!value.nonInterpolableValue); |
| 86 underlyingValueOwner.mutableValue().interpolableValue->scaleAndAdd( | 91 underlyingValueOwner.mutableValue().interpolableValue->scaleAndAdd( |
| 87 underlyingFraction, *value.interpolableValue); | 92 underlyingFraction, *value.interpolableValue); |
| 88 } | 93 } |
| 89 | 94 |
| 90 virtual void apply(const InterpolableValue&, | 95 virtual void apply(const InterpolableValue&, |
| 91 const NonInterpolableValue*, | 96 const NonInterpolableValue*, |
| 92 InterpolationEnvironment&) const = 0; | 97 InterpolationEnvironment&) const = 0; |
| 93 | 98 |
| 94 // Implement reference equality checking via pointer equality checking as thes
e are singletons. | 99 // Implement reference equality checking via pointer equality checking as |
| 100 // these are singletons. |
| 95 bool operator==(const InterpolationType& other) const { | 101 bool operator==(const InterpolationType& other) const { |
| 96 return this == &other; | 102 return this == &other; |
| 97 } | 103 } |
| 98 bool operator!=(const InterpolationType& other) const { | 104 bool operator!=(const InterpolationType& other) const { |
| 99 return this != &other; | 105 return this != &other; |
| 100 } | 106 } |
| 101 | 107 |
| 102 protected: | 108 protected: |
| 103 InterpolationType(PropertyHandle property) : m_property(property) {} | 109 InterpolationType(PropertyHandle property) : m_property(property) {} |
| 104 | 110 |
| 105 virtual PairwiseInterpolationValue maybeMergeSingles( | 111 virtual PairwiseInterpolationValue maybeMergeSingles( |
| 106 InterpolationValue&& start, | 112 InterpolationValue&& start, |
| 107 InterpolationValue&& end) const { | 113 InterpolationValue&& end) const { |
| 108 DCHECK(!start.nonInterpolableValue); | 114 DCHECK(!start.nonInterpolableValue); |
| 109 DCHECK(!end.nonInterpolableValue); | 115 DCHECK(!end.nonInterpolableValue); |
| 110 return PairwiseInterpolationValue(std::move(start.interpolableValue), | 116 return PairwiseInterpolationValue(std::move(start.interpolableValue), |
| 111 std::move(end.interpolableValue), | 117 std::move(end.interpolableValue), |
| 112 nullptr); | 118 nullptr); |
| 113 } | 119 } |
| 114 | 120 |
| 115 const PropertyHandle m_property; | 121 const PropertyHandle m_property; |
| 116 }; | 122 }; |
| 117 | 123 |
| 118 } // namespace blink | 124 } // namespace blink |
| 119 | 125 |
| 120 #endif // InterpolationType_h | 126 #endif // InterpolationType_h |
| OLD | NEW |