| 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 | 153 |
| 154 // Implementation of SVGAnimatedProperty which uses primitive types. | 154 // Implementation of SVGAnimatedProperty which uses primitive types. |
| 155 // This is for classes which return primitive type for its "animVal". | 155 // This is for classes which return primitive type for its "animVal". |
| 156 // Examples are SVGAnimatedBoolean, SVGAnimatedNumber, etc. | 156 // Examples are SVGAnimatedBoolean, SVGAnimatedNumber, etc. |
| 157 template <typename Property, | 157 template <typename Property, |
| 158 typename TearOffType = typename Property::TearOffType, | 158 typename TearOffType = typename Property::TearOffType, |
| 159 typename PrimitiveType = typename Property::PrimitiveType> | 159 typename PrimitiveType = typename Property::PrimitiveType> |
| 160 class SVGAnimatedProperty : public SVGAnimatedPropertyCommon<Property> { | 160 class SVGAnimatedProperty : public SVGAnimatedPropertyCommon<Property> { |
| 161 public: | 161 public: |
| 162 bool needsSynchronizeAttribute() override { | 162 bool needsSynchronizeAttribute() override { |
| 163 // DOM attribute synchronization is only needed if tear-off is being touched
from javascript or the property is being animated. | 163 // DOM attribute synchronization is only needed if tear-off is being touched |
| 164 // This prevents unnecessary attribute creation on target element. | 164 // from javascript or the property is being animated. This prevents |
| 165 // unnecessary attribute creation on target element. |
| 165 return m_baseValueUpdated || this->isAnimating(); | 166 return m_baseValueUpdated || this->isAnimating(); |
| 166 } | 167 } |
| 167 | 168 |
| 168 void synchronizeAttribute() override { | 169 void synchronizeAttribute() override { |
| 169 SVGAnimatedPropertyBase::synchronizeAttribute(); | 170 SVGAnimatedPropertyBase::synchronizeAttribute(); |
| 170 m_baseValueUpdated = false; | 171 m_baseValueUpdated = false; |
| 171 } | 172 } |
| 172 | 173 |
| 173 // SVGAnimated* DOM Spec implementations: | 174 // SVGAnimated* DOM Spec implementations: |
| 174 | 175 |
| 175 // baseVal()/setBaseVal()/animVal() are only to be used from SVG DOM implement
ation. | 176 // baseVal()/setBaseVal()/animVal() are only to be used from SVG DOM |
| 176 // Use currentValue() from C++ code. | 177 // implementation. Use currentValue() from C++ code. |
| 177 PrimitiveType baseVal() { return this->baseValue()->value(); } | 178 PrimitiveType baseVal() { return this->baseValue()->value(); } |
| 178 | 179 |
| 179 void setBaseVal(PrimitiveType value, ExceptionState& exceptionState) { | 180 void setBaseVal(PrimitiveType value, ExceptionState& exceptionState) { |
| 180 if (this->isReadOnly()) { | 181 if (this->isReadOnly()) { |
| 181 exceptionState.throwDOMException(NoModificationAllowedError, | 182 exceptionState.throwDOMException(NoModificationAllowedError, |
| 182 "The attribute is read-only."); | 183 "The attribute is read-only."); |
| 183 return; | 184 return; |
| 184 } | 185 } |
| 185 | 186 |
| 186 this->baseValue()->setValue(value); | 187 this->baseValue()->setValue(value); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 SVGAnimatedPropertyCommon<Property>::setAnimatedValue(value); | 229 SVGAnimatedPropertyCommon<Property>::setAnimatedValue(value); |
| 229 updateAnimValTearOffIfNeeded(); | 230 updateAnimValTearOffIfNeeded(); |
| 230 } | 231 } |
| 231 | 232 |
| 232 void animationEnded() override { | 233 void animationEnded() override { |
| 233 SVGAnimatedPropertyCommon<Property>::animationEnded(); | 234 SVGAnimatedPropertyCommon<Property>::animationEnded(); |
| 234 updateAnimValTearOffIfNeeded(); | 235 updateAnimValTearOffIfNeeded(); |
| 235 } | 236 } |
| 236 | 237 |
| 237 bool needsSynchronizeAttribute() override { | 238 bool needsSynchronizeAttribute() override { |
| 238 // DOM attribute synchronization is only needed if tear-off is being touched
from javascript or the property is being animated. | 239 // DOM attribute synchronization is only needed if tear-off is being touched |
| 239 // This prevents unnecessary attribute creation on target element. | 240 // from javascript or the property is being animated. This prevents |
| 241 // unnecessary attribute creation on target element. |
| 240 return m_baseValTearOff || this->isAnimating(); | 242 return m_baseValTearOff || this->isAnimating(); |
| 241 } | 243 } |
| 242 | 244 |
| 243 // SVGAnimated* DOM Spec implementations: | 245 // SVGAnimated* DOM Spec implementations: |
| 244 | 246 |
| 245 // baseVal()/animVal() are only to be used from SVG DOM implementation. | 247 // baseVal()/animVal() are only to be used from SVG DOM implementation. |
| 246 // Use currentValue() from C++ code. | 248 // Use currentValue() from C++ code. |
| 247 virtual TearOffType* baseVal() { | 249 virtual TearOffType* baseVal() { |
| 248 if (!m_baseValTearOff) { | 250 if (!m_baseValTearOff) { |
| 249 m_baseValTearOff = | 251 m_baseValTearOff = |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 public: | 305 public: |
| 304 static SVGAnimatedProperty<Property>* create( | 306 static SVGAnimatedProperty<Property>* create( |
| 305 SVGElement* contextElement, | 307 SVGElement* contextElement, |
| 306 const QualifiedName& attributeName, | 308 const QualifiedName& attributeName, |
| 307 Property* initialValue) { | 309 Property* initialValue) { |
| 308 return new SVGAnimatedProperty<Property>(contextElement, attributeName, | 310 return new SVGAnimatedProperty<Property>(contextElement, attributeName, |
| 309 initialValue); | 311 initialValue); |
| 310 } | 312 } |
| 311 | 313 |
| 312 bool needsSynchronizeAttribute() override { | 314 bool needsSynchronizeAttribute() override { |
| 313 // DOM attribute synchronization is only needed if the property is being ani
mated. | 315 // DOM attribute synchronization is only needed if the property is being |
| 316 // animated. |
| 314 return this->isAnimating(); | 317 return this->isAnimating(); |
| 315 } | 318 } |
| 316 | 319 |
| 317 protected: | 320 protected: |
| 318 SVGAnimatedProperty(SVGElement* contextElement, | 321 SVGAnimatedProperty(SVGElement* contextElement, |
| 319 const QualifiedName& attributeName, | 322 const QualifiedName& attributeName, |
| 320 Property* initialValue) | 323 Property* initialValue) |
| 321 : SVGAnimatedPropertyCommon<Property>(contextElement, | 324 : SVGAnimatedPropertyCommon<Property>(contextElement, |
| 322 attributeName, | 325 attributeName, |
| 323 initialValue) {} | 326 initialValue) {} |
| 324 }; | 327 }; |
| 325 | 328 |
| 326 } // namespace blink | 329 } // namespace blink |
| 327 | 330 |
| 328 #endif // SVGAnimatedProperty_h | 331 #endif // SVGAnimatedProperty_h |
| OLD | NEW |