Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1364)

Unified Diff: Source/core/svg/properties/NewSVGAnimatedProperty.h

Issue 112003003: [SVG] SVGLength{,List} migration to new SVG property impl. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebaselined Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/svg/properties/NewSVGAnimatedProperty.h
diff --git a/Source/core/svg/properties/NewSVGAnimatedProperty.h b/Source/core/svg/properties/NewSVGAnimatedProperty.h
index 5010d2a27ec21276780aa8e97cbaf4d63dc645a2..6f80988b54c82638432d418e6667d966723e3ba9 100644
--- a/Source/core/svg/properties/NewSVGAnimatedProperty.h
+++ b/Source/core/svg/properties/NewSVGAnimatedProperty.h
@@ -47,14 +47,17 @@ class NewSVGAnimatedPropertyBase : public RefCounted<NewSVGAnimatedPropertyBase>
public:
virtual ~NewSVGAnimatedPropertyBase();
+ virtual NewSVGPropertyBase* baseValueBase() = 0;
virtual NewSVGPropertyBase* currentValueBase() = 0;
virtual void animationStarted() = 0;
- virtual void resetToBaseVal() = 0;
+ virtual PassRefPtr<NewSVGPropertyBase> createAnimatedValue() = 0;
+ virtual void setAnimatedValue(PassRefPtr<NewSVGPropertyBase>) = 0;
virtual void animationEnded() = 0;
virtual void animValWillChange() = 0;
virtual void animValDidChange() = 0;
+ virtual bool needsSynchronizeAttribute() = 0;
void synchronizeAttribute();
SVGElement* contextElement()
@@ -68,11 +71,7 @@ public:
}
protected:
- NewSVGAnimatedPropertyBase(SVGElement* contextElement, const QualifiedName& attributeName)
- : m_contextElement(contextElement)
- , m_attributeName(attributeName)
- {
- }
+ NewSVGAnimatedPropertyBase(SVGElement* contextElement, const QualifiedName& attributeName);
private:
// This reference is kept alive from V8 wrapper
@@ -113,6 +112,11 @@ public:
return m_baseValue.get();
}
+ virtual NewSVGPropertyBase* baseValueBase()
+ {
+ return baseValue();
+ }
+
Property* currentValue()
{
return m_currentValue ? m_currentValue.get() : m_baseValue.get();
@@ -135,36 +139,41 @@ public:
bool isAnimating() const
{
- // |m_currentValue| only exists while animation is active,
- // so this can be used to check if this property is being animated.
- return m_currentValue;
+ return m_isAnimating;
}
virtual void animationStarted()
{
ASSERT(!isAnimating());
- m_currentValue = m_baseValue->clone();
+ m_isAnimating = true;
+ }
- if (m_animValTearOff)
- m_animValTearOff->setTarget(m_currentValue);
+ virtual PassRefPtr<NewSVGPropertyBase> createAnimatedValue()
+ {
+ return m_baseValue->clone();
}
- virtual void animationEnded()
+ virtual void setAnimatedValue(PassRefPtr<NewSVGPropertyBase> value)
{
ASSERT(isAnimating());
- m_currentValue.clear();
+
+ // FIXME: add type check
+ m_currentValue = static_pointer_cast<Property>(value);
if (m_animValTearOff)
- m_animValTearOff->setTarget(m_baseValue);
+ m_animValTearOff->setTarget(m_currentValue);
}
- virtual void resetToBaseVal()
+ virtual void animationEnded()
{
ASSERT(isAnimating());
- m_currentValue = m_baseValue->clone();
+ m_isAnimating = false;
+
+ ASSERT(m_currentValue);
+ m_currentValue.clear();
if (m_animValTearOff)
- m_animValTearOff->setTarget(m_currentValue);
+ m_animValTearOff->setTarget(m_baseValue);
}
virtual void animValWillChange()
@@ -177,6 +186,13 @@ public:
ASSERT(isAnimating());
}
+ virtual bool needsSynchronizeAttribute()
+ {
+ // DOM attribute synchronization is only needed if tear-off is being touched from javascript or the property is being animated.
+ // This prevents unnecessary attribute creation on target element.
+ return m_baseValTearOff || isAnimating();
+ }
+
// SVGAnimated* DOM Spec implementations:
// baseVal()/animVal() are only to be used from SVG DOM implementation.
@@ -200,12 +216,15 @@ public:
protected:
NewSVGAnimatedProperty(SVGElement* contextElement, const QualifiedName& attributeName, PassRefPtr<Property> initialValue)
: NewSVGAnimatedPropertyBase(contextElement, attributeName)
+ , m_isReadOnly(false)
+ , m_isAnimating(false)
, m_baseValue(initialValue)
{
}
private:
bool m_isReadOnly;
+ bool m_isAnimating;
// When still (not animated):
// Both m_animValTearOff and m_baseValTearOff target m_baseValue.

Powered by Google App Engine
This is Rietveld 408576698