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