18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2008 Apple Inc. All rights reserved.
5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is free software; you can redistribute it and/or
7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modify it under the terms of the GNU Library General Public
8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * License as published by the Free Software Foundation; either
9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * version 2 of the License, or (at your option) any later version.
10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is distributed in the hope that it will be useful,
12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Library General Public License for more details.
15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * You should have received a copy of the GNU Library General Public License
17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
18dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Boston, MA 02110-1301, USA.
20dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch */
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef SVGAnimateElement_h
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define SVGAnimateElement_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) && ENABLE(SVG_ANIMATION)
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Color.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SVGAnimationElement.h"
29f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "SVGPathByteStream.h"
3028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "SVGPointList.h"
31f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/OwnPtr.h>
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
35f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGPathSegList;
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
37f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass SVGAnimateElement : public SVGAnimationElement {
38f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochpublic:
39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    static PassRefPtr<SVGAnimateElement> create(const QualifiedName&, Document*);
405ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual ~SVGAnimateElement();
425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochprotected:
44f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SVGAnimateElement(const QualifiedName&, Document*);
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void resetToBaseValue(const String&);
47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual bool calculateFromAndToValues(const String& fromString, const String& toString);
48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual bool calculateFromAndByValues(const String& fromString, const String& byString);
49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void calculateAnimatedValue(float percentage, unsigned repeat, SVGSMILElement* resultElement);
50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void applyResultsToTarget();
51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual float calculateDistance(const String& fromString, const String& toString);
52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochprivate:
5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // If we have 'currentColor' or 'inherit' as animation value, we need to grab the value during the animation
5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // since the value can be animated itself.
5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    enum AnimatedPropertyValueType {
5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        RegularPropertyValue,
5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        CurrentColorValue,
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        InheritValue
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    };
6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual bool hasValidAttributeType() const;
6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    AnimatedAttributeType determineAnimatedAttributeType(SVGElement*) const;
6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    AnimatedAttributeType m_animatedAttributeType;
65f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    AnimatedPropertyValueType m_fromPropertyValueType;
6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    AnimatedPropertyValueType m_toPropertyValueType;
68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    double m_fromNumber;
69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    double m_toNumber;
70f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    double m_animatedNumber;
71f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    String m_numberUnit;
72f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    Color m_fromColor;
73f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    Color m_toColor;
74f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    Color m_animatedColor;
75f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    String m_fromString;
76f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    String m_toString;
77f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    String m_animatedString;
78f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    OwnPtr<SVGPathByteStream> m_fromPath;
79f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    OwnPtr<SVGPathByteStream> m_toPath;
80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    OwnPtr<SVGPathByteStream> m_animatedPath;
81f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SVGPathByteStream* m_animatedPathPointer;
82f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SVGPointList m_fromPoints;
83f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SVGPointList m_toPoints;
84f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    SVGPointList m_animatedPoints;
85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch};
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG)
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // SVGAnimateElement_h
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// vim:ts=4:noet
93