Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: third_party/WebKit/Source/core/svg/SVGAnimationElement.h

Issue 2384013002: Push animation value 'inherit' handling into SVGAnimateElement (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2008 Cameron McCormack <cam@mcc.id.au> 6 * Copyright (C) 2008 Cameron McCormack <cam@mcc.id.au>
7 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 7 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 10 matching lines...) Expand all
21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301, USA. 22 * Boston, MA 02110-1301, USA.
23 */ 23 */
24 24
25 #ifndef SVGAnimationElement_h 25 #ifndef SVGAnimationElement_h
26 #define SVGAnimationElement_h 26 #define SVGAnimationElement_h
27 27
28 #include "core/CoreExport.h" 28 #include "core/CoreExport.h"
29 #include "core/svg/animation/SVGSMILElement.h" 29 #include "core/svg/animation/SVGSMILElement.h"
30 #include "ui/gfx/geometry/cubic_bezier.h" 30 #include "ui/gfx/geometry/cubic_bezier.h"
31 #include "wtf/Functional.h"
32 #include "wtf/Vector.h" 31 #include "wtf/Vector.h"
33 32
34 namespace blink { 33 namespace blink {
35 34
36 class ExceptionState; 35 class ExceptionState;
37 36
38 enum AnimationMode { 37 enum AnimationMode {
39 NoAnimation, 38 NoAnimation,
40 FromToAnimation, 39 FromToAnimation,
41 FromByAnimation, 40 FromByAnimation,
42 ToAnimation, 41 ToAnimation,
43 ByAnimation, 42 ByAnimation,
44 ValuesAnimation, 43 ValuesAnimation,
45 PathAnimation // Used by AnimateMotion. 44 PathAnimation // Used by AnimateMotion.
46 }; 45 };
47 46
48 // If we have 'inherit' as animation value, we need to grab the value
49 // during the animation since the value can be animated itself.
50 enum AnimatedPropertyValueType { RegularPropertyValue, InheritValue };
51
52 enum CalcMode { 47 enum CalcMode {
53 CalcModeDiscrete, 48 CalcModeDiscrete,
54 CalcModeLinear, 49 CalcModeLinear,
55 CalcModePaced, 50 CalcModePaced,
56 CalcModeSpline 51 CalcModeSpline
57 }; 52 };
58 53
59 class CORE_EXPORT SVGAnimationElement : public SVGSMILElement { 54 class CORE_EXPORT SVGAnimationElement : public SVGSMILElement {
60 DEFINE_WRAPPERTYPEINFO(); 55 DEFINE_WRAPPERTYPEINFO();
61 56
(...skipping 23 matching lines...) Expand all
85 DontApplyAnimation, 80 DontApplyAnimation,
86 ApplyCSSAnimation, 81 ApplyCSSAnimation,
87 ApplyXMLAnimation, 82 ApplyXMLAnimation,
88 ApplyXMLandCSSAnimation 83 ApplyXMLandCSSAnimation
89 }; 84 };
90 85
91 ShouldApplyAnimationType shouldApplyAnimation( 86 ShouldApplyAnimationType shouldApplyAnimation(
92 SVGElement* targetElement, 87 SVGElement* targetElement,
93 const QualifiedName& attributeName); 88 const QualifiedName& attributeName);
94 89
95 AnimatedPropertyValueType fromPropertyValueType() const {
96 return m_fromPropertyValueType;
97 }
98 AnimatedPropertyValueType toPropertyValueType() const {
99 return m_toPropertyValueType;
100 }
101
102 template <typename AnimatedType, typename ParseTypeFromStringType>
103 void adjustForInheritance(ParseTypeFromStringType parseTypeFromString,
104 AnimatedPropertyValueType valueType,
105 AnimatedType& animatedType,
106 SVGElement* contextElement) {
107 if (valueType != InheritValue)
108 return;
109 // Replace 'inherit' by its computed property value.
110 String typeString;
111 adjustForInheritance(contextElement, attributeName(), typeString);
112 animatedType = parseTypeFromString(this, typeString);
113 }
114
115 template <typename AnimatedType> 90 template <typename AnimatedType>
116 void animateDiscreteType(float percentage, 91 void animateDiscreteType(float percentage,
117 const AnimatedType& fromType, 92 const AnimatedType& fromType,
118 const AnimatedType& toType, 93 const AnimatedType& toType,
119 AnimatedType& animatedType) { 94 AnimatedType& animatedType) {
120 if ((getAnimationMode() == FromToAnimation && percentage > 0.5) || 95 if ((getAnimationMode() == FromToAnimation && percentage > 0.5) ||
121 getAnimationMode() == ToAnimation || percentage == 1) { 96 getAnimationMode() == ToAnimation || percentage == 1) {
122 animatedType = AnimatedType(toType); 97 animatedType = AnimatedType(toType);
123 return; 98 return;
124 } 99 }
(...skipping 17 matching lines...) Expand all
142 117
143 if (isAdditive() && getAnimationMode() != ToAnimation) 118 if (isAdditive() && getAnimationMode() != ToAnimation)
144 animatedNumber += number; 119 animatedNumber += number;
145 else 120 else
146 animatedNumber = number; 121 animatedNumber = number;
147 } 122 }
148 123
149 protected: 124 protected:
150 SVGAnimationElement(const QualifiedName&, Document&); 125 SVGAnimationElement(const QualifiedName&, Document&);
151 126
152 void computeCSSPropertyValue(SVGElement*, CSSPropertyID, String& value);
153 void determinePropertyValueTypes(const String& from, const String& to);
154
155 void parseAttribute(const QualifiedName&, 127 void parseAttribute(const QualifiedName&,
156 const AtomicString&, 128 const AtomicString&,
157 const AtomicString&) override; 129 const AtomicString&) override;
158 void svgAttributeChanged(const QualifiedName&) override; 130 void svgAttributeChanged(const QualifiedName&) override;
159 131
160 enum AttributeType { AttributeTypeCSS, AttributeTypeXML, AttributeTypeAuto }; 132 enum AttributeType { AttributeTypeCSS, AttributeTypeXML, AttributeTypeAuto };
161 AttributeType getAttributeType() const { return m_attributeType; } 133 AttributeType getAttributeType() const { return m_attributeType; }
162 134
163 String toValue() const; 135 String toValue() const;
164 String byValue() const; 136 String byValue() const;
165 String fromValue() const; 137 String fromValue() const;
166 138
167 // from SVGSMILElement 139 // from SVGSMILElement
168 void startedActiveInterval() override; 140 void startedActiveInterval() override;
169 void updateAnimation(float percent, 141 void updateAnimation(float percent,
170 unsigned repeat, 142 unsigned repeat,
171 SVGSMILElement* resultElement) override; 143 SVGSMILElement* resultElement) override;
172 144
173 AnimatedPropertyValueType m_fromPropertyValueType;
174 AnimatedPropertyValueType m_toPropertyValueType;
175
176 void setTargetElement(SVGElement*) override; 145 void setTargetElement(SVGElement*) override;
177 void setAttributeName(const QualifiedName&) override; 146 void setAttributeName(const QualifiedName&) override;
178 147
179 bool hasInvalidCSSAttributeType() const { 148 bool hasInvalidCSSAttributeType() const {
180 return m_hasInvalidCSSAttributeType; 149 return m_hasInvalidCSSAttributeType;
181 } 150 }
182 151
183 virtual void updateAnimationMode(); 152 virtual void updateAnimationMode();
184 void setAnimationMode(AnimationMode animationMode) { 153 void setAnimationMode(AnimationMode animationMode) {
185 m_animationMode = animationMode; 154 m_animationMode = animationMode;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 void calculateKeyTimesForCalcModePaced(); 191 void calculateKeyTimesForCalcModePaced();
223 float calculatePercentFromKeyPoints(float percent) const; 192 float calculatePercentFromKeyPoints(float percent) const;
224 void currentValuesFromKeyPoints(float percent, 193 void currentValuesFromKeyPoints(float percent,
225 float& effectivePercent, 194 float& effectivePercent,
226 String& from, 195 String& from,
227 String& to) const; 196 String& to) const;
228 float calculatePercentForSpline(float percent, unsigned splineIndex) const; 197 float calculatePercentForSpline(float percent, unsigned splineIndex) const;
229 float calculatePercentForFromTo(float percent) const; 198 float calculatePercentForFromTo(float percent) const;
230 unsigned calculateKeyTimesIndex(float percent) const; 199 unsigned calculateKeyTimesIndex(float percent) const;
231 200
232 void adjustForInheritance(SVGElement* targetElement,
233 const QualifiedName& attributeName,
234 String&);
235
236 void setCalcMode(const AtomicString&); 201 void setCalcMode(const AtomicString&);
237 202
238 bool m_animationValid; 203 bool m_animationValid;
239 204
240 AttributeType m_attributeType; 205 AttributeType m_attributeType;
241 Vector<String> m_values; 206 Vector<String> m_values;
242 // FIXME: We should probably use doubles for this, but there's no point 207 // FIXME: We should probably use doubles for this, but there's no point
243 // making such a change unless all SVG logic for sampling animations is 208 // making such a change unless all SVG logic for sampling animations is
244 // changed to use doubles. 209 // changed to use doubles.
245 Vector<float> m_keyTimes; 210 Vector<float> m_keyTimes;
246 Vector<float> m_keyPoints; 211 Vector<float> m_keyPoints;
247 Vector<gfx::CubicBezier> m_keySplines; 212 Vector<gfx::CubicBezier> m_keySplines;
248 String m_lastValuesAnimationFrom; 213 String m_lastValuesAnimationFrom;
249 String m_lastValuesAnimationTo; 214 String m_lastValuesAnimationTo;
250 bool m_hasInvalidCSSAttributeType; 215 bool m_hasInvalidCSSAttributeType;
251 CalcMode m_calcMode; 216 CalcMode m_calcMode;
252 AnimationMode m_animationMode; 217 AnimationMode m_animationMode;
253 }; 218 };
254 219
255 } // namespace blink 220 } // namespace blink
256 221
257 #endif // SVGAnimationElement_h 222 #endif // SVGAnimationElement_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGAnimateElement.cpp ('k') | third_party/WebKit/Source/core/svg/SVGAnimationElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698