• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
4  * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5  * Copyright (C) 2008 Apple Inc. All rights reserved.
6  * Copyright (C) 2008 Cameron McCormack <cam@mcc.id.au>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  */
23 
24 #ifndef SVGAnimationElement_h
25 #define SVGAnimationElement_h
26 
27 #if ENABLE(SVG_ANIMATION)
28 #include "ElementTimeControl.h"
29 #include "Path.h"
30 #include "SMILTime.h"
31 #include "SVGAnimatedBoolean.h"
32 #include "SVGExternalResourcesRequired.h"
33 #include "SVGSMILElement.h"
34 #include "SVGStringList.h"
35 #include "SVGTests.h"
36 #include "UnitBezier.h"
37 
38 namespace WebCore {
39 
40 class ConditionEventListener;
41 class TimeContainer;
42 
43 class SVGAnimationElement : public SVGSMILElement,
44                             public SVGTests,
45                             public SVGExternalResourcesRequired,
46                             public ElementTimeControl {
47 public:
48     // SVGAnimationElement
49     float getStartTime() const;
50     float getCurrentTime() const;
51     float getSimpleDuration(ExceptionCode&) const;
52 
53     // ElementTimeControl
54     virtual void beginElement();
55     virtual void beginElementAt(float offset);
56     virtual void endElement();
57     virtual void endElementAt(float offset);
58 
59     static bool isTargetAttributeCSSProperty(SVGElement*, const QualifiedName&);
60 
61 protected:
62     SVGAnimationElement(const QualifiedName&, Document*);
63 
64     virtual void parseMappedAttribute(Attribute*);
65 
66     enum CalcMode { CalcModeDiscrete, CalcModeLinear, CalcModePaced, CalcModeSpline };
67     CalcMode calcMode() const;
68 
69     enum AttributeType { AttributeTypeCSS, AttributeTypeXML, AttributeTypeAuto };
70     AttributeType attributeType() const;
71 
72     String toValue() const;
73     String byValue() const;
74     String fromValue() const;
75 
76     enum AnimationMode { NoAnimation, ToAnimation, ByAnimation, ValuesAnimation, FromToAnimation, FromByAnimation, PathAnimation };
77     AnimationMode animationMode() const;
78 
79     String targetAttributeBaseValue() const;
80     void setTargetAttributeAnimatedValue(const String&);
81 
82     bool isAdditive() const;
83     bool isAccumulated() const;
84 
85     // from SVGSMILElement
86     virtual void startedActiveInterval();
87     virtual void updateAnimation(float percent, unsigned repeat, SVGSMILElement* resultElement);
88     virtual void endedActiveInterval();
89 
90 private:
91     virtual void attributeChanged(Attribute*, bool preserveDecls);
92     virtual void synchronizeProperty(const QualifiedName&);
93 
94     virtual bool calculateFromAndToValues(const String& fromString, const String& toString) = 0;
95     virtual bool calculateFromAndByValues(const String& fromString, const String& byString) = 0;
96     virtual void calculateAnimatedValue(float percentage, unsigned repeat, SVGSMILElement* resultElement) = 0;
calculateDistance(const String &,const String &)97     virtual float calculateDistance(const String& /*fromString*/, const String& /*toString*/) { return -1.f; }
animationPath()98     virtual Path animationPath() const { return Path(); }
99 
100     void currentValuesForValuesAnimation(float percent, float& effectivePercent, String& from, String& to) const;
101     void calculateKeyTimesForCalcModePaced();
102     float calculatePercentFromKeyPoints(float percent) const;
103     void currentValuesFromKeyPoints(float percent, float& effectivePercent, String& from, String& to) const;
104     float calculatePercentForSpline(float percent, unsigned splineIndex) const;
105     unsigned calculateKeyTimesIndex(float percent) const;
106 
107     // Animated property declarations
108 
109     // SVGExternalResourcesRequired
110     DECLARE_ANIMATED_BOOLEAN(ExternalResourcesRequired, externalResourcesRequired)
111 
112     bool m_animationValid;
113 
114     Vector<String> m_values;
115     Vector<float> m_keyTimes;
116     Vector<float> m_keyPoints;
117     Vector<UnitBezier> m_keySplines;
118     String m_lastValuesAnimationFrom;
119     String m_lastValuesAnimationTo;
120 };
121 
122 } // namespace WebCore
123 
124 #endif // ENABLE(SVG)
125 #endif // SVGAnimationElement_h
126