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 |