1/*
2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
4 * Copyright (C) 2008 Apple Inc. All rights reserved.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB.  If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 */
21
22#ifndef SVGAnimateElement_h
23#define SVGAnimateElement_h
24
25#if ENABLE(SVG) && ENABLE(SVG_ANIMATION)
26
27#include "Color.h"
28#include "SVGAnimationElement.h"
29#include "SVGPathByteStream.h"
30#include "SVGPointList.h"
31#include <wtf/OwnPtr.h>
32
33namespace WebCore {
34
35class SVGPathSegList;
36
37class SVGAnimateElement : public SVGAnimationElement {
38public:
39    static PassRefPtr<SVGAnimateElement> create(const QualifiedName&, Document*);
40
41    virtual ~SVGAnimateElement();
42
43protected:
44    SVGAnimateElement(const QualifiedName&, Document*);
45
46    virtual void resetToBaseValue(const String&);
47    virtual bool calculateFromAndToValues(const String& fromString, const String& toString);
48    virtual bool calculateFromAndByValues(const String& fromString, const String& byString);
49    virtual void calculateAnimatedValue(float percentage, unsigned repeat, SVGSMILElement* resultElement);
50    virtual void applyResultsToTarget();
51    virtual float calculateDistance(const String& fromString, const String& toString);
52
53private:
54    // If we have 'currentColor' or 'inherit' as animation value, we need to grab the value during the animation
55    // since the value can be animated itself.
56    enum AnimatedPropertyValueType {
57        RegularPropertyValue,
58        CurrentColorValue,
59        InheritValue
60    };
61
62    virtual bool hasValidAttributeType() const;
63    AnimatedAttributeType determineAnimatedAttributeType(SVGElement*) const;
64    AnimatedAttributeType m_animatedAttributeType;
65
66    AnimatedPropertyValueType m_fromPropertyValueType;
67    AnimatedPropertyValueType m_toPropertyValueType;
68    double m_fromNumber;
69    double m_toNumber;
70    double m_animatedNumber;
71    String m_numberUnit;
72    Color m_fromColor;
73    Color m_toColor;
74    Color m_animatedColor;
75    String m_fromString;
76    String m_toString;
77    String m_animatedString;
78    OwnPtr<SVGPathByteStream> m_fromPath;
79    OwnPtr<SVGPathByteStream> m_toPath;
80    OwnPtr<SVGPathByteStream> m_animatedPath;
81    SVGPathByteStream* m_animatedPathPointer;
82    SVGPointList m_fromPoints;
83    SVGPointList m_toPoints;
84    SVGPointList m_animatedPoints;
85};
86
87} // namespace WebCore
88
89#endif // ENABLE(SVG)
90#endif // SVGAnimateElement_h
91
92// vim:ts=4:noet
93