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

Side by Side Diff: third_party/WebKit/Source/core/animation/StringKeyframe.cpp

Issue 1414413002: SVG Web Animations: Add SVGInterpolationType pipeline (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@_svgAttributeReference
Patch Set: Move assert to not wrong location Created 5 years, 1 month 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/animation/StringKeyframe.h" 6 #include "core/animation/StringKeyframe.h"
7 7
8 #include "core/XLinkNames.h"
8 #include "core/animation/AngleSVGInterpolation.h" 9 #include "core/animation/AngleSVGInterpolation.h"
9 #include "core/animation/CSSColorInterpolationType.h" 10 #include "core/animation/CSSColorInterpolationType.h"
10 #include "core/animation/CSSImageInterpolationType.h" 11 #include "core/animation/CSSImageInterpolationType.h"
11 #include "core/animation/CSSImageListInterpolationType.h" 12 #include "core/animation/CSSImageListInterpolationType.h"
12 #include "core/animation/CSSLengthInterpolationType.h" 13 #include "core/animation/CSSLengthInterpolationType.h"
13 #include "core/animation/CSSNumberInterpolationType.h" 14 #include "core/animation/CSSNumberInterpolationType.h"
14 #include "core/animation/CSSPaintInterpolationType.h" 15 #include "core/animation/CSSPaintInterpolationType.h"
15 #include "core/animation/CSSShadowListInterpolationType.h" 16 #include "core/animation/CSSShadowListInterpolationType.h"
16 #include "core/animation/CSSValueInterpolationType.h" 17 #include "core/animation/CSSValueInterpolationType.h"
17 #include "core/animation/CompositorAnimations.h" 18 #include "core/animation/CompositorAnimations.h"
(...skipping 13 matching lines...) Expand all
31 #include "core/animation/LengthSVGInterpolation.h" 32 #include "core/animation/LengthSVGInterpolation.h"
32 #include "core/animation/LengthStyleInterpolation.h" 33 #include "core/animation/LengthStyleInterpolation.h"
33 #include "core/animation/ListSVGInterpolation.h" 34 #include "core/animation/ListSVGInterpolation.h"
34 #include "core/animation/ListStyleInterpolation.h" 35 #include "core/animation/ListStyleInterpolation.h"
35 #include "core/animation/NumberOptionalNumberSVGInterpolation.h" 36 #include "core/animation/NumberOptionalNumberSVGInterpolation.h"
36 #include "core/animation/NumberSVGInterpolation.h" 37 #include "core/animation/NumberSVGInterpolation.h"
37 #include "core/animation/PathSVGInterpolation.h" 38 #include "core/animation/PathSVGInterpolation.h"
38 #include "core/animation/PointSVGInterpolation.h" 39 #include "core/animation/PointSVGInterpolation.h"
39 #include "core/animation/RectSVGInterpolation.h" 40 #include "core/animation/RectSVGInterpolation.h"
40 #include "core/animation/SVGStrokeDasharrayStyleInterpolation.h" 41 #include "core/animation/SVGStrokeDasharrayStyleInterpolation.h"
42 #include "core/animation/SVGValueInterpolationType.h"
41 #include "core/animation/TransformSVGInterpolation.h" 43 #include "core/animation/TransformSVGInterpolation.h"
42 #include "core/animation/VisibilityStyleInterpolation.h" 44 #include "core/animation/VisibilityStyleInterpolation.h"
43 #include "core/animation/css/CSSAnimations.h" 45 #include "core/animation/css/CSSAnimations.h"
44 #include "core/css/CSSPropertyMetadata.h" 46 #include "core/css/CSSPropertyMetadata.h"
45 #include "core/css/resolver/StyleResolver.h" 47 #include "core/css/resolver/StyleResolver.h"
46 #include "core/style/ComputedStyle.h" 48 #include "core/style/ComputedStyle.h"
47 #include "core/svg/SVGElement.h" 49 #include "core/svg/SVGElement.h"
48 #include "platform/RuntimeEnabledFeatures.h" 50 #include "platform/RuntimeEnabledFeatures.h"
49 51
50 namespace blink { 52 namespace blink {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 if (!baseStyle && (!m_value || DeferredLegacyStyleInterpolation::interpolati onRequiresStyleResolve(*m_value))) 125 if (!baseStyle && (!m_value || DeferredLegacyStyleInterpolation::interpolati onRequiresStyleResolve(*m_value)))
124 return false; 126 return false;
125 if (!element.document().frame()) 127 if (!element.document().frame())
126 return false; 128 return false;
127 m_animatableValueCache = StyleResolver::createAnimatableValueSnapshot(elemen t, baseStyle, property, m_value.get()); 129 m_animatableValueCache = StyleResolver::createAnimatableValueSnapshot(elemen t, baseStyle, property, m_value.get());
128 return true; 130 return true;
129 } 131 }
130 132
131 namespace { 133 namespace {
132 134
133 const Vector<const InterpolationType*>* applicableTypesForProperty(CSSPropertyID property) 135 // TODO(alancutter): Move this into its own file.
136 const Vector<const InterpolationType*>* applicableTypesForProperty(PropertyHandl e property)
134 { 137 {
135 using ApplicableTypesMap = HashMap<CSSPropertyID, const Vector<const Interpo lationType*>*>; 138 // TODO(alancutter): Initialise this entire HashMap once instead of initiali sing each property individually.
139 using ApplicableTypesMap = HashMap<PropertyHandle, const Vector<const Interp olationType*>*>;
136 DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ()); 140 DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ());
137 auto entry = applicableTypesMap.find(property); 141 auto entry = applicableTypesMap.find(property);
138 if (entry != applicableTypesMap.end()) 142 if (entry != applicableTypesMap.end())
139 return entry->value; 143 return entry->value;
140 144
145 bool fallbackToLegacy = false;
141 auto applicableTypes = new Vector<const InterpolationType*>(); 146 auto applicableTypes = new Vector<const InterpolationType*>();
142 switch (property) { 147
143 case CSSPropertyBaselineShift: 148 if (property.isCSSProperty()) {
144 case CSSPropertyBorderBottomWidth: 149 CSSPropertyID cssProperty = property.cssProperty();
145 case CSSPropertyBorderLeftWidth: 150 switch (cssProperty) {
146 case CSSPropertyBorderRightWidth: 151 case CSSPropertyBaselineShift:
147 case CSSPropertyBorderTopWidth: 152 case CSSPropertyBorderBottomWidth:
148 case CSSPropertyBottom: 153 case CSSPropertyBorderLeftWidth:
149 case CSSPropertyCx: 154 case CSSPropertyBorderRightWidth:
150 case CSSPropertyCy: 155 case CSSPropertyBorderTopWidth:
151 case CSSPropertyFlexBasis: 156 case CSSPropertyBottom:
152 case CSSPropertyHeight: 157 case CSSPropertyCx:
153 case CSSPropertyLeft: 158 case CSSPropertyCy:
154 case CSSPropertyLetterSpacing: 159 case CSSPropertyFlexBasis:
155 case CSSPropertyMarginBottom: 160 case CSSPropertyHeight:
156 case CSSPropertyMarginLeft: 161 case CSSPropertyLeft:
157 case CSSPropertyMarginRight: 162 case CSSPropertyLetterSpacing:
158 case CSSPropertyMarginTop: 163 case CSSPropertyMarginBottom:
159 case CSSPropertyMaxHeight: 164 case CSSPropertyMarginLeft:
160 case CSSPropertyMaxWidth: 165 case CSSPropertyMarginRight:
161 case CSSPropertyMinHeight: 166 case CSSPropertyMarginTop:
162 case CSSPropertyMinWidth: 167 case CSSPropertyMaxHeight:
163 case CSSPropertyMotionOffset: 168 case CSSPropertyMaxWidth:
164 case CSSPropertyOutlineOffset: 169 case CSSPropertyMinHeight:
165 case CSSPropertyOutlineWidth: 170 case CSSPropertyMinWidth:
166 case CSSPropertyPaddingBottom: 171 case CSSPropertyMotionOffset:
167 case CSSPropertyPaddingLeft: 172 case CSSPropertyOutlineOffset:
168 case CSSPropertyPaddingRight: 173 case CSSPropertyOutlineWidth:
169 case CSSPropertyPaddingTop: 174 case CSSPropertyPaddingBottom:
170 case CSSPropertyPerspective: 175 case CSSPropertyPaddingLeft:
171 case CSSPropertyR: 176 case CSSPropertyPaddingRight:
172 case CSSPropertyRight: 177 case CSSPropertyPaddingTop:
173 case CSSPropertyRx: 178 case CSSPropertyPerspective:
174 case CSSPropertyRy: 179 case CSSPropertyR:
175 case CSSPropertyShapeMargin: 180 case CSSPropertyRight:
176 case CSSPropertyStrokeDashoffset: 181 case CSSPropertyRx:
177 case CSSPropertyStrokeWidth: 182 case CSSPropertyRy:
178 case CSSPropertyTop: 183 case CSSPropertyShapeMargin:
179 case CSSPropertyVerticalAlign: 184 case CSSPropertyStrokeDashoffset:
180 case CSSPropertyWebkitBorderHorizontalSpacing: 185 case CSSPropertyStrokeWidth:
181 case CSSPropertyWebkitBorderVerticalSpacing: 186 case CSSPropertyTop:
182 case CSSPropertyWebkitColumnGap: 187 case CSSPropertyVerticalAlign:
183 case CSSPropertyWebkitColumnRuleWidth: 188 case CSSPropertyWebkitBorderHorizontalSpacing:
184 case CSSPropertyWebkitColumnWidth: 189 case CSSPropertyWebkitBorderVerticalSpacing:
185 case CSSPropertyWebkitPerspectiveOriginX: 190 case CSSPropertyWebkitColumnGap:
186 case CSSPropertyWebkitPerspectiveOriginY: 191 case CSSPropertyWebkitColumnRuleWidth:
187 case CSSPropertyWebkitTransformOriginX: 192 case CSSPropertyWebkitColumnWidth:
188 case CSSPropertyWebkitTransformOriginY: 193 case CSSPropertyWebkitPerspectiveOriginX:
189 case CSSPropertyWebkitTransformOriginZ: 194 case CSSPropertyWebkitPerspectiveOriginY:
190 case CSSPropertyWidth: 195 case CSSPropertyWebkitTransformOriginX:
191 case CSSPropertyWordSpacing: 196 case CSSPropertyWebkitTransformOriginY:
192 case CSSPropertyX: 197 case CSSPropertyWebkitTransformOriginZ:
193 case CSSPropertyY: 198 case CSSPropertyWidth:
194 applicableTypes->append(new CSSLengthInterpolationType(property)); 199 case CSSPropertyWordSpacing:
195 break; 200 case CSSPropertyX:
196 case CSSPropertyFlexGrow: 201 case CSSPropertyY:
197 case CSSPropertyFlexShrink: 202 applicableTypes->append(new CSSLengthInterpolationType(cssProperty)) ;
198 case CSSPropertyFillOpacity: 203 break;
199 case CSSPropertyFloodOpacity: 204 case CSSPropertyFlexGrow:
200 case CSSPropertyFontSizeAdjust: 205 case CSSPropertyFlexShrink:
201 case CSSPropertyOpacity: 206 case CSSPropertyFillOpacity:
202 case CSSPropertyOrphans: 207 case CSSPropertyFloodOpacity:
203 case CSSPropertyShapeImageThreshold: 208 case CSSPropertyFontSizeAdjust:
204 case CSSPropertyStopOpacity: 209 case CSSPropertyOpacity:
205 case CSSPropertyStrokeMiterlimit: 210 case CSSPropertyOrphans:
206 case CSSPropertyStrokeOpacity: 211 case CSSPropertyShapeImageThreshold:
207 case CSSPropertyWebkitColumnCount: 212 case CSSPropertyStopOpacity:
208 case CSSPropertyWidows: 213 case CSSPropertyStrokeMiterlimit:
209 case CSSPropertyZIndex: 214 case CSSPropertyStrokeOpacity:
210 applicableTypes->append(new CSSNumberInterpolationType(property)); 215 case CSSPropertyWebkitColumnCount:
211 break; 216 case CSSPropertyWidows:
212 case CSSPropertyLineHeight: 217 case CSSPropertyZIndex:
213 applicableTypes->append(new CSSLengthInterpolationType(property)); 218 applicableTypes->append(new CSSNumberInterpolationType(cssProperty)) ;
214 applicableTypes->append(new CSSNumberInterpolationType(property)); 219 break;
215 break; 220 case CSSPropertyLineHeight:
216 case CSSPropertyBackgroundColor: 221 applicableTypes->append(new CSSLengthInterpolationType(cssProperty)) ;
217 case CSSPropertyBorderBottomColor: 222 applicableTypes->append(new CSSNumberInterpolationType(cssProperty)) ;
218 case CSSPropertyBorderLeftColor: 223 break;
219 case CSSPropertyBorderRightColor: 224 case CSSPropertyBackgroundColor:
220 case CSSPropertyBorderTopColor: 225 case CSSPropertyBorderBottomColor:
221 case CSSPropertyColor: 226 case CSSPropertyBorderLeftColor:
222 case CSSPropertyFloodColor: 227 case CSSPropertyBorderRightColor:
223 case CSSPropertyLightingColor: 228 case CSSPropertyBorderTopColor:
224 case CSSPropertyOutlineColor: 229 case CSSPropertyColor:
225 case CSSPropertyStopColor: 230 case CSSPropertyFloodColor:
226 case CSSPropertyTextDecorationColor: 231 case CSSPropertyLightingColor:
227 case CSSPropertyWebkitColumnRuleColor: 232 case CSSPropertyOutlineColor:
228 case CSSPropertyWebkitTextStrokeColor: 233 case CSSPropertyStopColor:
229 applicableTypes->append(new CSSColorInterpolationType(property)); 234 case CSSPropertyTextDecorationColor:
230 break; 235 case CSSPropertyWebkitColumnRuleColor:
231 case CSSPropertyFill: 236 case CSSPropertyWebkitTextStrokeColor:
232 case CSSPropertyStroke: 237 applicableTypes->append(new CSSColorInterpolationType(cssProperty));
233 applicableTypes->append(new CSSPaintInterpolationType(property)); 238 break;
234 break; 239 case CSSPropertyFill:
235 case CSSPropertyBoxShadow: 240 case CSSPropertyStroke:
236 case CSSPropertyTextShadow: 241 applicableTypes->append(new CSSPaintInterpolationType(cssProperty));
237 applicableTypes->append(new CSSShadowListInterpolationType(property)); 242 break;
238 break; 243 case CSSPropertyBoxShadow:
239 case CSSPropertyBorderImageSource: 244 case CSSPropertyTextShadow:
240 case CSSPropertyListStyleImage: 245 applicableTypes->append(new CSSShadowListInterpolationType(cssProper ty));
241 case CSSPropertyWebkitMaskBoxImageSource: 246 break;
242 applicableTypes->append(new CSSImageInterpolationType(property)); 247 case CSSPropertyBorderImageSource:
243 break; 248 case CSSPropertyListStyleImage:
244 case CSSPropertyBackgroundImage: 249 case CSSPropertyWebkitMaskBoxImageSource:
245 case CSSPropertyWebkitMaskImage: 250 applicableTypes->append(new CSSImageInterpolationType(cssProperty));
246 applicableTypes->append(new CSSImageListInterpolationType(property)); 251 break;
247 break; 252 case CSSPropertyBackgroundImage:
248 default: 253 case CSSPropertyWebkitMaskImage:
249 // TODO(alancutter): Support all interpolable CSS properties here so we can stop falling back to the old StyleInterpolation implementation. 254 applicableTypes->append(new CSSImageListInterpolationType(cssPropert y));
250 if (CSSPropertyMetadata::isInterpolableProperty(property)) { 255 break;
251 delete applicableTypes; 256 default:
252 applicableTypesMap.add(property, nullptr); 257 // TODO(alancutter): Support all interpolable CSS properties here so we can stop falling back to the old StyleInterpolation implementation.
253 return nullptr; 258 if (CSSPropertyMetadata::isInterpolableProperty(cssProperty))
259 fallbackToLegacy = true;
260 break;
254 } 261 }
255 break; 262 applicableTypes->append(new CSSValueInterpolationType(cssProperty));
263 } else {
264 const QualifiedName& attribute = property.svgAttribute();
265 if (attribute == HTMLNames::classAttr
266 || attribute == SVGNames::clipPathUnitsAttr
267 || attribute == SVGNames::edgeModeAttr
268 || attribute == SVGNames::filterUnitsAttr
269 || attribute == SVGNames::gradientUnitsAttr
270 || attribute == SVGNames::inAttr
271 || attribute == SVGNames::in2Attr
272 || attribute == SVGNames::lengthAdjustAttr
273 || attribute == SVGNames::markerUnitsAttr
274 || attribute == SVGNames::maskContentUnitsAttr
275 || attribute == SVGNames::maskUnitsAttr
276 || attribute == SVGNames::methodAttr
277 || attribute == SVGNames::modeAttr
278 || attribute == SVGNames::operatorAttr
279 || attribute == SVGNames::patternContentUnitsAttr
280 || attribute == SVGNames::patternUnitsAttr
281 || attribute == SVGNames::preserveAlphaAttr
282 || attribute == SVGNames::preserveAspectRatioAttr
283 || attribute == SVGNames::primitiveUnitsAttr
284 || attribute == SVGNames::resultAttr
285 || attribute == SVGNames::spacingAttr
286 || attribute == SVGNames::spreadMethodAttr
287 || attribute == SVGNames::stitchTilesAttr
288 || attribute == SVGNames::targetAttr
289 || attribute == SVGNames::typeAttr
290 || attribute == SVGNames::xChannelSelectorAttr
291 || attribute == SVGNames::yChannelSelectorAttr
292 || attribute == XLinkNames::hrefAttr) {
293 applicableTypes->append(new SVGValueInterpolationType(attribute));
294 } else {
295 fallbackToLegacy = true;
296 }
256 } 297 }
257 applicableTypes->append(new CSSValueInterpolationType(property)); 298
299 if (fallbackToLegacy) {
300 delete applicableTypes;
301 applicableTypesMap.add(property, nullptr);
302 return nullptr;
303 }
304
258 applicableTypesMap.add(property, applicableTypes); 305 applicableTypesMap.add(property, applicableTypes);
259 return applicableTypes; 306 return applicableTypes;
260 } 307 }
261 308
262 } // namespace 309 } // namespace
263 310
264 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::createLeg acyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe & end, Element* element, const ComputedStyle* baseStyle) const 311 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::createLeg acyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe & end, Element* element, const ComputedStyle* baseStyle) const
265 { 312 {
266 CSSValue& fromCSSValue = *m_value.get(); 313 CSSValue& fromCSSValue = *m_value.get();
267 CSSValue& toCSSValue = *toCSSPropertySpecificKeyframe(end).value(); 314 CSSValue& toCSSValue = *toCSSPropertySpecificKeyframe(end).value();
268 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(from CSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve (toCSSValue)) { 315 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(from CSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve (toCSSValue)) {
269 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation . 316 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation .
270 return DeferredLegacyStyleInterpolation::create(&fromCSSValue, &toCSSVal ue, property); 317 return DeferredLegacyStyleInterpolation::create(&fromCSSValue, &toCSSVal ue, property);
271 } 318 }
272 319
273 // FIXME: Remove the use of AnimatableValues and Elements here. 320 // FIXME: Remove the use of AnimatableValues and Elements here.
274 ASSERT(element); 321 ASSERT(element);
275 populateAnimatableValue(property, *element, baseStyle, false); 322 populateAnimatableValue(property, *element, baseStyle, false);
276 end.populateAnimatableValue(property, *element, baseStyle, false); 323 end.populateAnimatableValue(property, *element, baseStyle, false);
277 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata bleValue(), property); 324 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata bleValue(), property);
278 } 325 }
279 326
280 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCrea teInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyfram e& end, Element* element, const ComputedStyle* baseStyle) const 327 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCrea teInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyfram e& end, Element* element, const ComputedStyle* baseStyle) const
281 { 328 {
282 CSSPropertyID property = propertyHandle.cssProperty(); 329 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor Property(propertyHandle);
283 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor Property(property);
284 if (applicableTypes) 330 if (applicableTypes)
285 return InvalidatableInterpolation::create(*applicableTypes, *this, end); 331 return InvalidatableInterpolation::create(*applicableTypes, *this, end);
286 332
287 // TODO(alancutter): Remove the remainder of this function. 333 // TODO(alancutter): Remove the remainder of this function.
288 334
289 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter. 335 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter.
336 CSSPropertyID property = propertyHandle.cssProperty();
290 CSSValue* fromCSSValue = m_value.get(); 337 CSSValue* fromCSSValue = m_value.get();
291 CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value(); 338 CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value();
292 InterpolationRange range = RangeAll; 339 InterpolationRange range = RangeAll;
293 340
294 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect. 341 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect.
295 bool forceDefaultInterpolation = false; 342 bool forceDefaultInterpolation = false;
296 343
297 // FIXME: Remove this check once neutral keyframes are implemented in String Keyframes. 344 // FIXME: Remove this check once neutral keyframes are implemented in String Keyframes.
298 if (!fromCSSValue || !toCSSValue) 345 if (!fromCSSValue || !toCSSValue)
299 return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSValue , property); 346 return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSValue , property);
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 if (interpolation) 567 if (interpolation)
521 return interpolation.release(); 568 return interpolation.release();
522 569
523 return DefaultSVGInterpolation::create(fromValue, toValue, attribute); 570 return DefaultSVGInterpolation::create(fromValue, toValue, attribute);
524 } 571 }
525 572
526 } // namespace 573 } // namespace
527 574
528 PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation( PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const 575 PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation( PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const
529 { 576 {
577 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor Property(propertyHandle);
578 if (applicableTypes)
579 return InvalidatableInterpolation::create(*applicableTypes, *this, end);
580
530 ASSERT(element); 581 ASSERT(element);
531 RefPtrWillBeRawPtr<SVGAnimatedPropertyBase> attribute = toSVGElement(element )->propertyFromAttribute(propertyHandle.svgAttribute()); 582 RefPtrWillBeRawPtr<SVGAnimatedPropertyBase> attribute = toSVGElement(element )->propertyFromAttribute(propertyHandle.svgAttribute());
532 ASSERT(attribute); 583 ASSERT(attribute);
533 584
534 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase( )->cloneForAnimation(m_value); 585 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase( )->cloneForAnimation(m_value);
535 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()- >cloneForAnimation(toSVGPropertySpecificKeyframe(end).value()); 586 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()- >cloneForAnimation(toSVGPropertySpecificKeyframe(end).value());
536 587
537 if (!fromValue || !toValue) 588 if (!fromValue || !toValue)
538 return nullptr; 589 return nullptr;
539 590
540 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get( )); 591 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get( ));
541 } 592 }
542 593
543 } // namespace blink 594 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/animation/StringKeyframe.h ('k') | third_party/WebKit/Source/core/core.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698