OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 G* * Redistributions in binary form must reproduce the above | 10 G* * Redistributions in binary form must reproduce the above |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 Property* currentValue() | 119 Property* currentValue() |
120 { | 120 { |
121 return m_currentValue ? m_currentValue.get() : m_baseValue.get(); | 121 return m_currentValue ? m_currentValue.get() : m_baseValue.get(); |
122 } | 122 } |
123 | 123 |
124 const Property* currentValue() const | 124 const Property* currentValue() const |
125 { | 125 { |
126 return const_cast<SVGAnimatedPropertyCommon*>(this)->currentValue(); | 126 return const_cast<SVGAnimatedPropertyCommon*>(this)->currentValue(); |
127 } | 127 } |
128 | 128 |
129 virtual SVGPropertyBase* currentValueBase() override | 129 SVGPropertyBase* currentValueBase() override |
130 { | 130 { |
131 return currentValue(); | 131 return currentValue(); |
132 } | 132 } |
133 | 133 |
134 virtual bool isAnimating() const override | 134 bool isAnimating() const override |
135 { | 135 { |
136 return m_currentValue; | 136 return m_currentValue; |
137 } | 137 } |
138 | 138 |
139 void setBaseValueAsString(const String& value, SVGParsingError& parseError)
override | 139 void setBaseValueAsString(const String& value, SVGParsingError& parseError)
override |
140 { | 140 { |
141 TrackExceptionState es; | 141 TrackExceptionState es; |
142 | 142 |
143 m_baseValue->setValueAsString(value, es); | 143 m_baseValue->setValueAsString(value, es); |
144 | 144 |
145 if (es.hadException()) | 145 if (es.hadException()) |
146 parseError = ParsingAttributeFailedError; | 146 parseError = ParsingAttributeFailedError; |
147 } | 147 } |
148 | 148 |
149 virtual PassRefPtrWillBeRawPtr<SVGPropertyBase> createAnimatedValue() overri
de | 149 PassRefPtrWillBeRawPtr<SVGPropertyBase> createAnimatedValue() override |
150 { | 150 { |
151 return m_baseValue->clone(); | 151 return m_baseValue->clone(); |
152 } | 152 } |
153 | 153 |
154 virtual void setAnimatedValue(PassRefPtrWillBeRawPtr<SVGPropertyBase> passVa
lue) override | 154 void setAnimatedValue(PassRefPtrWillBeRawPtr<SVGPropertyBase> passValue) ove
rride |
155 { | 155 { |
156 RefPtrWillBeRawPtr<SVGPropertyBase> value = passValue; | 156 RefPtrWillBeRawPtr<SVGPropertyBase> value = passValue; |
157 ASSERT(value->type() == Property::classType()); | 157 ASSERT(value->type() == Property::classType()); |
158 m_currentValue = static_pointer_cast<Property>(value.release()); | 158 m_currentValue = static_pointer_cast<Property>(value.release()); |
159 } | 159 } |
160 | 160 |
161 virtual void animationEnded() override | 161 void animationEnded() override |
162 { | 162 { |
163 m_currentValue.clear(); | 163 m_currentValue.clear(); |
164 | 164 |
165 SVGAnimatedPropertyBase::animationEnded(); | 165 SVGAnimatedPropertyBase::animationEnded(); |
166 } | 166 } |
167 | 167 |
168 DEFINE_INLINE_VIRTUAL_TRACE() | 168 DEFINE_INLINE_VIRTUAL_TRACE() |
169 { | 169 { |
170 visitor->trace(m_baseValue); | 170 visitor->trace(m_baseValue); |
171 visitor->trace(m_currentValue); | 171 visitor->trace(m_currentValue); |
(...skipping 11 matching lines...) Expand all Loading... |
183 RefPtrWillBeMember<Property> m_baseValue; | 183 RefPtrWillBeMember<Property> m_baseValue; |
184 RefPtrWillBeMember<Property> m_currentValue; | 184 RefPtrWillBeMember<Property> m_currentValue; |
185 }; | 185 }; |
186 | 186 |
187 // Implementation of SVGAnimatedProperty which uses primitive types. | 187 // Implementation of SVGAnimatedProperty which uses primitive types. |
188 // This is for classes which return primitive type for its "animVal". | 188 // This is for classes which return primitive type for its "animVal". |
189 // Examples are SVGAnimatedBoolean, SVGAnimatedNumber, etc. | 189 // Examples are SVGAnimatedBoolean, SVGAnimatedNumber, etc. |
190 template <typename Property, typename TearOffType = typename Property::TearOffTy
pe, typename PrimitiveType = typename Property::PrimitiveType> | 190 template <typename Property, typename TearOffType = typename Property::TearOffTy
pe, typename PrimitiveType = typename Property::PrimitiveType> |
191 class SVGAnimatedProperty : public SVGAnimatedPropertyCommon<Property> { | 191 class SVGAnimatedProperty : public SVGAnimatedPropertyCommon<Property> { |
192 public: | 192 public: |
193 virtual bool needsSynchronizeAttribute() override | 193 bool needsSynchronizeAttribute() override |
194 { | 194 { |
195 // DOM attribute synchronization is only needed if tear-off is being tou
ched from javascript or the property is being animated. | 195 // DOM attribute synchronization is only needed if tear-off is being tou
ched from javascript or the property is being animated. |
196 // This prevents unnecessary attribute creation on target element. | 196 // This prevents unnecessary attribute creation on target element. |
197 return m_baseValueUpdated || this->isAnimating(); | 197 return m_baseValueUpdated || this->isAnimating(); |
198 } | 198 } |
199 | 199 |
200 virtual void synchronizeAttribute() override | 200 void synchronizeAttribute() override |
201 { | 201 { |
202 SVGAnimatedPropertyBase::synchronizeAttribute(); | 202 SVGAnimatedPropertyBase::synchronizeAttribute(); |
203 m_baseValueUpdated = false; | 203 m_baseValueUpdated = false; |
204 } | 204 } |
205 | 205 |
206 // SVGAnimated* DOM Spec implementations: | 206 // SVGAnimated* DOM Spec implementations: |
207 | 207 |
208 // baseVal()/setBaseVal()/animVal() are only to be used from SVG DOM impleme
ntation. | 208 // baseVal()/setBaseVal()/animVal() are only to be used from SVG DOM impleme
ntation. |
209 // Use currentValue() from C++ code. | 209 // Use currentValue() from C++ code. |
210 PrimitiveType baseVal() | 210 PrimitiveType baseVal() |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 // This is for classes which return special type for its "animVal". | 247 // This is for classes which return special type for its "animVal". |
248 // Examples are SVGAnimatedLength, SVGAnimatedRect, SVGAnimated*List, etc. | 248 // Examples are SVGAnimatedLength, SVGAnimatedRect, SVGAnimated*List, etc. |
249 template <typename Property, typename TearOffType> | 249 template <typename Property, typename TearOffType> |
250 class SVGAnimatedProperty<Property, TearOffType, void> : public SVGAnimatedPrope
rtyCommon<Property> { | 250 class SVGAnimatedProperty<Property, TearOffType, void> : public SVGAnimatedPrope
rtyCommon<Property> { |
251 public: | 251 public: |
252 static PassRefPtrWillBeRawPtr<SVGAnimatedProperty<Property>> create(SVGEleme
nt* contextElement, const QualifiedName& attributeName, PassRefPtrWillBeRawPtr<P
roperty> initialValue) | 252 static PassRefPtrWillBeRawPtr<SVGAnimatedProperty<Property>> create(SVGEleme
nt* contextElement, const QualifiedName& attributeName, PassRefPtrWillBeRawPtr<P
roperty> initialValue) |
253 { | 253 { |
254 return adoptRefWillBeNoop(new SVGAnimatedProperty<Property>(contextEleme
nt, attributeName, initialValue)); | 254 return adoptRefWillBeNoop(new SVGAnimatedProperty<Property>(contextEleme
nt, attributeName, initialValue)); |
255 } | 255 } |
256 | 256 |
257 virtual void setAnimatedValue(PassRefPtrWillBeRawPtr<SVGPropertyBase> value)
override | 257 void setAnimatedValue(PassRefPtrWillBeRawPtr<SVGPropertyBase> value) overrid
e |
258 { | 258 { |
259 SVGAnimatedPropertyCommon<Property>::setAnimatedValue(value); | 259 SVGAnimatedPropertyCommon<Property>::setAnimatedValue(value); |
260 updateAnimValTearOffIfNeeded(); | 260 updateAnimValTearOffIfNeeded(); |
261 } | 261 } |
262 | 262 |
263 virtual void animationEnded() override | 263 void animationEnded() override |
264 { | 264 { |
265 SVGAnimatedPropertyCommon<Property>::animationEnded(); | 265 SVGAnimatedPropertyCommon<Property>::animationEnded(); |
266 updateAnimValTearOffIfNeeded(); | 266 updateAnimValTearOffIfNeeded(); |
267 } | 267 } |
268 | 268 |
269 virtual bool needsSynchronizeAttribute() override | 269 bool needsSynchronizeAttribute() override |
270 { | 270 { |
271 // DOM attribute synchronization is only needed if tear-off is being tou
ched from javascript or the property is being animated. | 271 // DOM attribute synchronization is only needed if tear-off is being tou
ched from javascript or the property is being animated. |
272 // This prevents unnecessary attribute creation on target element. | 272 // This prevents unnecessary attribute creation on target element. |
273 return m_baseValTearOff || this->isAnimating(); | 273 return m_baseValTearOff || this->isAnimating(); |
274 } | 274 } |
275 | 275 |
276 // SVGAnimated* DOM Spec implementations: | 276 // SVGAnimated* DOM Spec implementations: |
277 | 277 |
278 // baseVal()/animVal() are only to be used from SVG DOM implementation. | 278 // baseVal()/animVal() are only to be used from SVG DOM implementation. |
279 // Use currentValue() from C++ code. | 279 // Use currentValue() from C++ code. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 // When animated: | 321 // When animated: |
322 // m_animValTearOff targets m_currentValue. | 322 // m_animValTearOff targets m_currentValue. |
323 // m_baseValTearOff targets m_baseValue. | 323 // m_baseValTearOff targets m_baseValue. |
324 RefPtrWillBeMember<TearOffType> m_baseValTearOff; | 324 RefPtrWillBeMember<TearOffType> m_baseValTearOff; |
325 RefPtrWillBeMember<TearOffType> m_animValTearOff; | 325 RefPtrWillBeMember<TearOffType> m_animValTearOff; |
326 }; | 326 }; |
327 | 327 |
328 } // namespace blink | 328 } // namespace blink |
329 | 329 |
330 #endif // SVGAnimatedProperty_h | 330 #endif // SVGAnimatedProperty_h |
OLD | NEW |