15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Cameron McCormack <cam@mcc.id.au> 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) Research In Motion Limited 2011. All rights reserved. 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef SVGAnimationElement_h 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define SVGAnimationElement_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGAnimatedBoolean.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGExternalResourcesRequired.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/SVGTests.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/animation/SVGSMILElement.h" 321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/animation/UnitBezier.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum AnimationMode { 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NoAnimation, 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FromToAnimation, 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FromByAnimation, 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ToAnimation, 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ByAnimation, 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ValuesAnimation, 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PathAnimation // Used by AnimateMotion. 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// If we have 'currentColor' or 'inherit' as animation value, we need to grab 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// the value during the animation since the value can be animated itself. 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum AnimatedPropertyValueType { 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RegularPropertyValue, 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CurrentColorValue, 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InheritValue 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum CalcMode { 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CalcModeDiscrete, 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CalcModeLinear, 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CalcModePaced, 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CalcModeSpline 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ConditionEventListener; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TimeContainer; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGAnimatedType; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGAnimationElement : public SVGSMILElement, 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public SVGTests, 67591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch public SVGExternalResourcesRequired { 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // SVGAnimationElement 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float getStartTime() const; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float getCurrentTime() const; 7293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) float getSimpleDuration() const; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 74591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void beginElement(); 75591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void beginElementAt(float offset); 76591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void endElement(); 77591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch void endElementAt(float offset); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isTargetAttributeCSSProperty(SVGElement*, const QualifiedName&); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isAdditive() const; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isAccumulated() const; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AnimationMode animationMode() const { return m_animationMode; } 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CalcMode calcMode() const { return m_calcMode; } 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum ShouldApplyAnimation { 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DontApplyAnimation, 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplyCSSAnimation, 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ApplyXMLAnimation 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ShouldApplyAnimation shouldApplyAnimation(SVGElement* targetElement, const QualifiedName& attributeName); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AnimatedPropertyValueType fromPropertyValueType() const { return m_fromPropertyValueType; } 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AnimatedPropertyValueType toPropertyValueType() const { return m_toPropertyValueType; } 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template<typename AnimatedType> 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void adjustForInheritance(AnimatedType (*parseTypeFromString)(SVGAnimationElement*, const String&), 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AnimatedPropertyValueType valueType, AnimatedType& animatedType, SVGElement* contextElement) 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (valueType != InheritValue) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Replace 'inherit' by its computed property value. 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(parseTypeFromString); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String typeString; 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) adjustForInheritance(contextElement, attributeName(), typeString); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedType = (*parseTypeFromString)(this, typeString); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template<typename AnimatedType> 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool adjustFromToListValues(const AnimatedType& fromList, const AnimatedType& toList, AnimatedType& animatedList, float percentage, bool resizeAnimatedListIfNeeded = true) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If no 'to' value is given, nothing to animate. 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned toListSize = toList.size(); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!toListSize) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the 'from' value is given and it's length doesn't match the 'to' value list length, fallback to a discrete animation. 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned fromListSize = fromList.size(); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (fromListSize != toListSize && fromListSize) { 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (percentage < 0.5) { 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (animationMode() != ToAnimation) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedList = AnimatedType(fromList); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedList = AnimatedType(toList); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!fromListSize || fromListSize == toListSize); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resizeAnimatedListIfNeeded && animatedList.size() < toListSize) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedList.resize(toListSize); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) template<typename AnimatedType> 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void animateDiscreteType(float percentage, const AnimatedType& fromType, const AnimatedType& toType, AnimatedType& animatedType) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((animationMode() == FromToAnimation && percentage > 0.5) || animationMode() == ToAnimation || percentage == 1) { 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedType = AnimatedType(toType); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedType = AnimatedType(fromType); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void animateAdditiveNumber(float percentage, unsigned repeatCount, float fromNumber, float toNumber, float toAtEndOfDurationNumber, float& animatedNumber) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float number; 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (calcMode() == CalcModeDiscrete) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) number = percentage < 0.5 ? fromNumber : toNumber; 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) number = (toNumber - fromNumber) * percentage + fromNumber; 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isAccumulated() && repeatCount) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) number += toAtEndOfDurationNumber * repeatCount; 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isAdditive() && animationMode() != ToAnimation) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedNumber += number; 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) animatedNumber = number; 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 1658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) SVGAnimationElement(const QualifiedName&, Document&); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void computeCSSPropertyValue(SVGElement*, CSSPropertyID, String& value); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void determinePropertyValueTypes(const String& from, const String& to); 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isSupportedAttribute(const QualifiedName&); 171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE; 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void svgAttributeChanged(const QualifiedName&) OVERRIDE; 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum AttributeType { 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AttributeTypeCSS, 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AttributeTypeXML, 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AttributeTypeAuto 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AttributeType attributeType() const { return m_attributeType; } 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String toValue() const; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String byValue() const; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String fromValue() const; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String targetAttributeBaseValue(); 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // from SVGSMILElement 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void startedActiveInterval() OVERRIDE; 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void updateAnimation(float percent, unsigned repeat, SVGSMILElement* resultElement) OVERRIDE; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AnimatedPropertyValueType m_fromPropertyValueType; 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AnimatedPropertyValueType m_toPropertyValueType; 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void setTargetElement(SVGElement*) OVERRIDE; 195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void setAttributeName(const QualifiedName&) OVERRIDE; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasInvalidCSSAttributeType() const { return m_hasInvalidCSSAttributeType; } 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void updateAnimationMode(); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setAnimationMode(AnimationMode animationMode) { m_animationMode = animationMode; } 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setCalcMode(CalcMode calcMode) { m_calcMode = calcMode; } 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void animationAttributeChanged() OVERRIDE; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setAttributeType(const AtomicString&); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkInvalidCSSAttributeType(SVGElement*); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool calculateToAtEndOfDurationValue(const String& toAtEndOfDurationString) = 0; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool calculateFromAndToValues(const String& fromString, const String& toString) = 0; 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool calculateFromAndByValues(const String& fromString, const String& byString) = 0; 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void calculateAnimatedValue(float percent, unsigned repeatCount, SVGSMILElement* resultElement) = 0; 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual float calculateDistance(const String& /*fromString*/, const String& /*toString*/) { return -1.f; } 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void currentValuesForValuesAnimation(float percent, float& effectivePercent, String& from, String& to); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void calculateKeyTimesForCalcModePaced(); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float calculatePercentFromKeyPoints(float percent) const; 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void currentValuesFromKeyPoints(float percent, float& effectivePercent, String& from, String& to) const; 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float calculatePercentForSpline(float percent, unsigned splineIndex) const; 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float calculatePercentForFromTo(float percent) const; 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned calculateKeyTimesIndex(float percent) const; 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void applyAnimatedValue(ShouldApplyAnimation, SVGElement* targetElement, const QualifiedName& attributeName, SVGAnimatedType*); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void adjustForInheritance(SVGElement* targetElement, const QualifiedName& attributeName, String&); 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGAnimationElement) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DECLARE_ANIMATED_BOOLEAN(ExternalResourcesRequired, externalResourcesRequired) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) END_DECLARE_ANIMATED_PROPERTIES 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // SVGTests 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void synchronizeRequiredFeatures() { SVGTests::synchronizeRequiredFeatures(this); } 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void synchronizeRequiredExtensions() { SVGTests::synchronizeRequiredExtensions(this); } 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void synchronizeSystemLanguage() { SVGTests::synchronizeSystemLanguage(this); } 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setCalcMode(const AtomicString&); 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_animationValid; 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AttributeType m_attributeType; 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> m_values; 240e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) // FIXME: We should probably use doubles for this, but there's no point 241e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) // making such a change unless all SVG logic for sampling animations is 242e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) // changed to use doubles. 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<float> m_keyTimes; 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<float> m_keyPoints; 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<UnitBezier> m_keySplines; 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_lastValuesAnimationFrom; 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String m_lastValuesAnimationTo; 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_hasInvalidCSSAttributeType; 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CalcMode m_calcMode; 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) AnimationMode m_animationMode; 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // SVGAnimationElement_h 256