| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 InterpolableValue_h | 5 #ifndef InterpolableValue_h |
| 6 #define InterpolableValue_h | 6 #define InterpolableValue_h |
| 7 | 7 |
| 8 #include "core/animation/animatable/AnimatableValue.h" | 8 #include "core/animation/animatable/AnimatableValue.h" |
| 9 #include "platform/heap/Handle.h" | 9 #include "platform/heap/Handle.h" |
| 10 #include "wtf/OwnPtr.h" | 10 #include "wtf/OwnPtr.h" |
| 11 #include "wtf/PassOwnPtr.h" | 11 #include "wtf/PassOwnPtr.h" |
| 12 #include "wtf/Vector.h" | 12 #include "wtf/Vector.h" |
| 13 | 13 |
| 14 namespace blink { | 14 namespace blink { |
| 15 | 15 |
| 16 class InterpolableValue : public NoBaseWillBeGarbageCollected<InterpolableValue>
{ | 16 class InterpolableValue : public NoBaseWillBeGarbageCollected<InterpolableValue>
{ |
| 17 DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(InterpolableValue); | 17 DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(InterpolableValue); |
| 18 public: | 18 public: |
| 19 virtual bool isNumber() const { return false; } | 19 virtual bool isNumber() const { return false; } |
| 20 virtual bool isBool() const { return false; } | 20 virtual bool isBool() const { return false; } |
| 21 virtual bool isList() const { return false; } | 21 virtual bool isList() const { return false; } |
| 22 virtual bool isAnimatableValue() const { return false; } | 22 virtual bool isAnimatableValue() const { return false; } |
| 23 | 23 |
| 24 virtual PassOwnPtrWillBeRawPtr<InterpolableValue> clone() const = 0; | 24 virtual PassOwnPtrWillBeRawPtr<InterpolableValue> clone() const = 0; |
| 25 | 25 |
| 26 virtual void trace(Visitor*) { } | 26 DEFINE_INLINE_VIRTUAL_TRACE() { } |
| 27 | 27 |
| 28 private: | 28 private: |
| 29 virtual void interpolate(const InterpolableValue& to, const double progress,
InterpolableValue& result) const = 0; | 29 virtual void interpolate(const InterpolableValue& to, const double progress,
InterpolableValue& result) const = 0; |
| 30 virtual void add(const InterpolableValue& rhs, InterpolableValue& result) co
nst = 0; | 30 virtual void add(const InterpolableValue& rhs, InterpolableValue& result) co
nst = 0; |
| 31 virtual void multiply(double scalar, InterpolableValue& result) const = 0; | 31 virtual void multiply(double scalar, InterpolableValue& result) const = 0; |
| 32 | 32 |
| 33 friend class Interpolation; | 33 friend class Interpolation; |
| 34 | 34 |
| 35 // Keep interpolate private, but allow calls within the hierarchy without | 35 // Keep interpolate private, but allow calls within the hierarchy without |
| 36 // knowledge of type. | 36 // knowledge of type. |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 m_values[position] = value; | 109 m_values[position] = value; |
| 110 } | 110 } |
| 111 const InterpolableValue* get(size_t position) const | 111 const InterpolableValue* get(size_t position) const |
| 112 { | 112 { |
| 113 ASSERT(position < m_size); | 113 ASSERT(position < m_size); |
| 114 return m_values[position].get(); | 114 return m_values[position].get(); |
| 115 } | 115 } |
| 116 size_t length() const { return m_size; } | 116 size_t length() const { return m_size; } |
| 117 virtual PassOwnPtrWillBeRawPtr<InterpolableValue> clone() const override fin
al { return create(*this); } | 117 virtual PassOwnPtrWillBeRawPtr<InterpolableValue> clone() const override fin
al { return create(*this); } |
| 118 | 118 |
| 119 virtual void trace(Visitor*) override; | 119 DECLARE_VIRTUAL_TRACE(); |
| 120 | 120 |
| 121 private: | 121 private: |
| 122 virtual void interpolate(const InterpolableValue& to, const double progress,
InterpolableValue& result) const override final; | 122 virtual void interpolate(const InterpolableValue& to, const double progress,
InterpolableValue& result) const override final; |
| 123 virtual void add(const InterpolableValue& rhs, InterpolableValue& result) co
nst override final; | 123 virtual void add(const InterpolableValue& rhs, InterpolableValue& result) co
nst override final; |
| 124 virtual void multiply(double scalar, InterpolableValue& result) const overri
de final; | 124 virtual void multiply(double scalar, InterpolableValue& result) const overri
de final; |
| 125 explicit InterpolableList(size_t size) | 125 explicit InterpolableList(size_t size) |
| 126 : m_size(size) | 126 : m_size(size) |
| 127 , m_values(m_size) | 127 , m_values(m_size) |
| 128 { | 128 { |
| 129 } | 129 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 145 public: | 145 public: |
| 146 static PassOwnPtrWillBeRawPtr<InterpolableAnimatableValue> create(PassRefPtr
WillBeRawPtr<AnimatableValue> value) | 146 static PassOwnPtrWillBeRawPtr<InterpolableAnimatableValue> create(PassRefPtr
WillBeRawPtr<AnimatableValue> value) |
| 147 { | 147 { |
| 148 return adoptPtrWillBeNoop(new InterpolableAnimatableValue(value)); | 148 return adoptPtrWillBeNoop(new InterpolableAnimatableValue(value)); |
| 149 } | 149 } |
| 150 | 150 |
| 151 virtual bool isAnimatableValue() const override final { return true; } | 151 virtual bool isAnimatableValue() const override final { return true; } |
| 152 AnimatableValue* value() const { return m_value.get(); } | 152 AnimatableValue* value() const { return m_value.get(); } |
| 153 virtual PassOwnPtrWillBeRawPtr<InterpolableValue> clone() const override fin
al { return create(m_value); } | 153 virtual PassOwnPtrWillBeRawPtr<InterpolableValue> clone() const override fin
al { return create(m_value); } |
| 154 | 154 |
| 155 virtual void trace(Visitor*) override; | 155 DECLARE_VIRTUAL_TRACE(); |
| 156 | 156 |
| 157 private: | 157 private: |
| 158 virtual void interpolate(const InterpolableValue &to, const double progress,
InterpolableValue& result) const override final; | 158 virtual void interpolate(const InterpolableValue &to, const double progress,
InterpolableValue& result) const override final; |
| 159 virtual void add(const InterpolableValue& rhs, InterpolableValue& result) co
nst override final { ASSERT_NOT_REACHED(); } | 159 virtual void add(const InterpolableValue& rhs, InterpolableValue& result) co
nst override final { ASSERT_NOT_REACHED(); } |
| 160 virtual void multiply(double scalar, InterpolableValue& result) const overri
de final { ASSERT_NOT_REACHED(); } | 160 virtual void multiply(double scalar, InterpolableValue& result) const overri
de final { ASSERT_NOT_REACHED(); } |
| 161 RefPtrWillBeMember<AnimatableValue> m_value; | 161 RefPtrWillBeMember<AnimatableValue> m_value; |
| 162 | 162 |
| 163 InterpolableAnimatableValue(PassRefPtrWillBeRawPtr<AnimatableValue> value) | 163 InterpolableAnimatableValue(PassRefPtrWillBeRawPtr<AnimatableValue> value) |
| 164 : m_value(value) | 164 : m_value(value) |
| 165 { | 165 { |
| 166 } | 166 } |
| 167 }; | 167 }; |
| 168 | 168 |
| 169 DEFINE_TYPE_CASTS(InterpolableNumber, InterpolableValue, value, value->isNumber(
), value.isNumber()); | 169 DEFINE_TYPE_CASTS(InterpolableNumber, InterpolableValue, value, value->isNumber(
), value.isNumber()); |
| 170 DEFINE_TYPE_CASTS(InterpolableBool, InterpolableValue, value, value->isBool(), v
alue.isBool()); | 170 DEFINE_TYPE_CASTS(InterpolableBool, InterpolableValue, value, value->isBool(), v
alue.isBool()); |
| 171 DEFINE_TYPE_CASTS(InterpolableList, InterpolableValue, value, value->isList(), v
alue.isList()); | 171 DEFINE_TYPE_CASTS(InterpolableList, InterpolableValue, value, value->isList(), v
alue.isList()); |
| 172 DEFINE_TYPE_CASTS(InterpolableAnimatableValue, InterpolableValue, value, value->
isAnimatableValue(), value.isAnimatableValue()); | 172 DEFINE_TYPE_CASTS(InterpolableAnimatableValue, InterpolableValue, value, value->
isAnimatableValue(), value.isAnimatableValue()); |
| 173 | 173 |
| 174 } | 174 } |
| 175 | 175 |
| 176 #endif | 176 #endif |
| OLD | NEW |