Reviewed by Mitz.
[WebKit-https.git] / WebCore / ksvg2 / svg / SVGAnimationElement.h
1 /*
2     Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
3                   2004, 2005, 2006 Rob Buis <buis@kde.org>
4
5     This file is part of the KDE project
6
7     This library is free software; you can redistribute it and/or
8     modify it under the terms of the GNU Library General Public
9     License as published by the Free Software Foundation; either
10     version 2 of the License, or (at your option) any later version.
11
12     This library is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15     Library General Public License for more details.
16
17     You should have received a copy of the GNU Library General Public License
18     along with this library; see the file COPYING.LIB.  If not, write to
19     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20     Boston, MA 02111-1307, USA.
21 */
22
23 #ifndef SVGAnimationElement_H
24 #define SVGAnimationElement_H
25 #ifdef SVG_SUPPORT
26
27 #include "SVGExternalResourcesRequired.h"
28 #include "SVGStringList.h"
29 #include "SVGTests.h"
30
31 namespace WebCore {
32
33     enum EFillMode {
34         FILL_REMOVE = 0,
35         FILL_FREEZE
36     };
37
38     enum EAdditiveMode {
39         ADDITIVE_REPLACE = 0,
40         ADDITIVE_SUM
41     };
42
43     enum EAccumulateMode {
44         ACCUMULATE_NONE = 0,
45         ACCUMULATE_SUM
46     };
47
48     enum ECalcMode {
49         CALCMODE_DISCRETE = 0,
50         CALCMODE_LINEAR,
51         CALCMODE_PACED,
52         CALCMODE_SPLINE
53     };
54
55     enum ERestart {
56         RESTART_ALWAYS = 0,
57         RESTART_WHENNOTACTIVE,
58         RESTART_NEVER
59     };
60
61     enum EAttributeType {
62         ATTRIBUTETYPE_CSS = 0,
63         ATTRIBUTETYPE_XML,
64         ATTRIBUTETYPE_AUTO
65     };
66
67     // internal
68     enum EAnimationMode {
69         NO_ANIMATION = 0,
70         TO_ANIMATION,
71         BY_ANIMATION,
72         VALUES_ANIMATION,
73         FROM_TO_ANIMATION,
74         FROM_BY_ANIMATION
75     };
76
77     class SVGAnimationElement : public SVGElement,
78                                 public SVGTests,
79                                 public SVGExternalResourcesRequired
80     {
81     public:
82         SVGAnimationElement(const QualifiedName&, Document*);
83         virtual ~SVGAnimationElement();
84
85         // 'SVGAnimationElement' functions
86         SVGElement* targetElement() const;
87         
88         virtual bool isValid() const { return SVGTests::isValid(); }
89
90         double getEndTime() const;
91         double getStartTime() const;
92         double getCurrentTime() const;
93         double getSimpleDuration(ExceptionCode&) const;
94     
95         virtual void parseMappedAttribute(MappedAttribute* attr);
96         virtual bool rendererIsNeeded(RenderStyle*) { return false; }
97
98         virtual void closeRenderer();
99
100         // Helpers
101         virtual void handleTimerEvent(double timePercentage) = 0;
102
103         double parseClockValue(const String&) const;
104
105         String targetAttribute() const;
106         void setTargetAttribute(const String&);
107
108         static void setTargetAttribute(SVGElement* target, const String& name, const String& value, EAttributeType = ATTRIBUTETYPE_AUTO);
109
110         String attributeName() const;
111
112         bool connected() const;
113
114         bool isFrozen() const;
115         bool isAdditive() const;
116         bool isAccumulated() const;
117
118         EAnimationMode detectAnimationMode() const;
119
120         int calculateCurrentValueItem(double timePercentage);
121         double calculateRelativeTimePercentage(double timePercentage, int currentItem);
122
123         double repeations() const;
124         bool isIndefinite(double value) const;
125
126     protected:
127         mutable SVGElement* m_targetElement;
128
129         ANIMATED_PROPERTY_FORWARD_DECLARATIONS(SVGExternalResourcesRequired, bool, ExternalResourcesRequired, externalResourcesRequired)
130
131         bool m_connected : 1;
132         
133         double m_currentTime;
134         double m_simpleDuration;
135
136         // Shared animation properties
137         unsigned m_fill : 1; // EFillMode m_fill
138         unsigned m_restart : 2; // ERestart
139         unsigned m_calcMode : 2; // ECalcMode
140         unsigned m_additive : 1; // EAdditiveMode
141         unsigned m_accumulate : 1; // EAccumulateMode
142         unsigned m_attributeType : 2; // EAttributeType
143         
144         String m_to;
145         String m_by;
146         String m_from;
147         String m_href;
148         String m_repeatDur;
149         String m_attributeName;
150
151         double m_max;
152         double m_min;
153         double m_end;
154         double m_begin;
155
156         double m_repeations;
157         double m_repeatCount;
158
159         RefPtr<SVGStringList> m_values;
160         RefPtr<SVGStringList> m_keyTimes;
161         RefPtr<SVGStringList> m_keySplines;
162     };
163
164 } // namespace WebCore
165
166 #endif // SVG_SUPPORT
167 #endif // SVGAnimationElement_H
168
169 // vim:ts=4:noet