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

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: Change InterpolationEnvironment 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 const Vector<const InterpolationType*>* applicableTypesForProperty(PropertyHandl e property)
dstockwell 2015/10/28 03:29:16 As discussed I think we'll want to clean this up t
alancutter (OOO until 2018) 2015/10/28 03:48:45 Added TODOs.
134 { 136 {
135 using ApplicableTypesMap = HashMap<CSSPropertyID, const Vector<const Interpo lationType*>*>; 137 using ApplicableTypesMap = HashMap<PropertyHandle, const Vector<const Interp olationType*>*>;
136 DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ()); 138 DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ());
137 auto entry = applicableTypesMap.find(property); 139 auto entry = applicableTypesMap.find(property);
138 if (entry != applicableTypesMap.end()) 140 if (entry != applicableTypesMap.end())
139 return entry->value; 141 return entry->value;
140 142
143 bool fallbackToLegacy = false;
141 auto applicableTypes = new Vector<const InterpolationType*>(); 144 auto applicableTypes = new Vector<const InterpolationType*>();
142 switch (property) { 145
143 case CSSPropertyBaselineShift: 146 if (property.isCSSProperty()) {
144 case CSSPropertyBorderBottomWidth: 147 CSSPropertyID cssProperty = property.cssProperty();
145 case CSSPropertyBorderLeftWidth: 148 switch (cssProperty) {
146 case CSSPropertyBorderRightWidth: 149 case CSSPropertyBaselineShift:
147 case CSSPropertyBorderTopWidth: 150 case CSSPropertyBorderBottomWidth:
148 case CSSPropertyBottom: 151 case CSSPropertyBorderLeftWidth:
149 case CSSPropertyCx: 152 case CSSPropertyBorderRightWidth:
150 case CSSPropertyCy: 153 case CSSPropertyBorderTopWidth:
151 case CSSPropertyFlexBasis: 154 case CSSPropertyBottom:
152 case CSSPropertyHeight: 155 case CSSPropertyCx:
153 case CSSPropertyLeft: 156 case CSSPropertyCy:
154 case CSSPropertyLetterSpacing: 157 case CSSPropertyFlexBasis:
155 case CSSPropertyMarginBottom: 158 case CSSPropertyHeight:
156 case CSSPropertyMarginLeft: 159 case CSSPropertyLeft:
157 case CSSPropertyMarginRight: 160 case CSSPropertyLetterSpacing:
158 case CSSPropertyMarginTop: 161 case CSSPropertyMarginBottom:
159 case CSSPropertyMaxHeight: 162 case CSSPropertyMarginLeft:
160 case CSSPropertyMaxWidth: 163 case CSSPropertyMarginRight:
161 case CSSPropertyMinHeight: 164 case CSSPropertyMarginTop:
162 case CSSPropertyMinWidth: 165 case CSSPropertyMaxHeight:
163 case CSSPropertyMotionOffset: 166 case CSSPropertyMaxWidth:
164 case CSSPropertyOutlineOffset: 167 case CSSPropertyMinHeight:
165 case CSSPropertyOutlineWidth: 168 case CSSPropertyMinWidth:
166 case CSSPropertyPaddingBottom: 169 case CSSPropertyMotionOffset:
167 case CSSPropertyPaddingLeft: 170 case CSSPropertyOutlineOffset:
168 case CSSPropertyPaddingRight: 171 case CSSPropertyOutlineWidth:
169 case CSSPropertyPaddingTop: 172 case CSSPropertyPaddingBottom:
170 case CSSPropertyPerspective: 173 case CSSPropertyPaddingLeft:
171 case CSSPropertyR: 174 case CSSPropertyPaddingRight:
172 case CSSPropertyRight: 175 case CSSPropertyPaddingTop:
173 case CSSPropertyRx: 176 case CSSPropertyPerspective:
174 case CSSPropertyRy: 177 case CSSPropertyR:
175 case CSSPropertyShapeMargin: 178 case CSSPropertyRight:
176 case CSSPropertyStrokeDashoffset: 179 case CSSPropertyRx:
177 case CSSPropertyStrokeWidth: 180 case CSSPropertyRy:
178 case CSSPropertyTop: 181 case CSSPropertyShapeMargin:
179 case CSSPropertyVerticalAlign: 182 case CSSPropertyStrokeDashoffset:
180 case CSSPropertyWebkitBorderHorizontalSpacing: 183 case CSSPropertyStrokeWidth:
181 case CSSPropertyWebkitBorderVerticalSpacing: 184 case CSSPropertyTop:
182 case CSSPropertyWebkitColumnGap: 185 case CSSPropertyVerticalAlign:
183 case CSSPropertyWebkitColumnRuleWidth: 186 case CSSPropertyWebkitBorderHorizontalSpacing:
184 case CSSPropertyWebkitColumnWidth: 187 case CSSPropertyWebkitBorderVerticalSpacing:
185 case CSSPropertyWebkitPerspectiveOriginX: 188 case CSSPropertyWebkitColumnGap:
186 case CSSPropertyWebkitPerspectiveOriginY: 189 case CSSPropertyWebkitColumnRuleWidth:
187 case CSSPropertyWebkitTransformOriginX: 190 case CSSPropertyWebkitColumnWidth:
188 case CSSPropertyWebkitTransformOriginY: 191 case CSSPropertyWebkitPerspectiveOriginX:
189 case CSSPropertyWebkitTransformOriginZ: 192 case CSSPropertyWebkitPerspectiveOriginY:
190 case CSSPropertyWidth: 193 case CSSPropertyWebkitTransformOriginX:
191 case CSSPropertyWordSpacing: 194 case CSSPropertyWebkitTransformOriginY:
192 case CSSPropertyX: 195 case CSSPropertyWebkitTransformOriginZ:
193 case CSSPropertyY: 196 case CSSPropertyWidth:
194 applicableTypes->append(new CSSLengthInterpolationType(property)); 197 case CSSPropertyWordSpacing:
195 break; 198 case CSSPropertyX:
196 case CSSPropertyFlexGrow: 199 case CSSPropertyY:
197 case CSSPropertyFlexShrink: 200 applicableTypes->append(new CSSLengthInterpolationType(cssProperty)) ;
198 case CSSPropertyFillOpacity: 201 break;
199 case CSSPropertyFloodOpacity: 202 case CSSPropertyFlexGrow:
200 case CSSPropertyFontSizeAdjust: 203 case CSSPropertyFlexShrink:
201 case CSSPropertyOpacity: 204 case CSSPropertyFillOpacity:
202 case CSSPropertyOrphans: 205 case CSSPropertyFloodOpacity:
203 case CSSPropertyShapeImageThreshold: 206 case CSSPropertyFontSizeAdjust:
204 case CSSPropertyStopOpacity: 207 case CSSPropertyOpacity:
205 case CSSPropertyStrokeMiterlimit: 208 case CSSPropertyOrphans:
206 case CSSPropertyStrokeOpacity: 209 case CSSPropertyShapeImageThreshold:
207 case CSSPropertyWebkitColumnCount: 210 case CSSPropertyStopOpacity:
208 case CSSPropertyWidows: 211 case CSSPropertyStrokeMiterlimit:
209 case CSSPropertyZIndex: 212 case CSSPropertyStrokeOpacity:
210 applicableTypes->append(new CSSNumberInterpolationType(property)); 213 case CSSPropertyWebkitColumnCount:
211 break; 214 case CSSPropertyWidows:
212 case CSSPropertyLineHeight: 215 case CSSPropertyZIndex:
213 applicableTypes->append(new CSSLengthInterpolationType(property)); 216 applicableTypes->append(new CSSNumberInterpolationType(cssProperty)) ;
214 applicableTypes->append(new CSSNumberInterpolationType(property)); 217 break;
215 break; 218 case CSSPropertyLineHeight:
216 case CSSPropertyBackgroundColor: 219 applicableTypes->append(new CSSLengthInterpolationType(cssProperty)) ;
217 case CSSPropertyBorderBottomColor: 220 applicableTypes->append(new CSSNumberInterpolationType(cssProperty)) ;
218 case CSSPropertyBorderLeftColor: 221 break;
219 case CSSPropertyBorderRightColor: 222 case CSSPropertyBackgroundColor:
220 case CSSPropertyBorderTopColor: 223 case CSSPropertyBorderBottomColor:
221 case CSSPropertyColor: 224 case CSSPropertyBorderLeftColor:
222 case CSSPropertyFloodColor: 225 case CSSPropertyBorderRightColor:
223 case CSSPropertyLightingColor: 226 case CSSPropertyBorderTopColor:
224 case CSSPropertyOutlineColor: 227 case CSSPropertyColor:
225 case CSSPropertyStopColor: 228 case CSSPropertyFloodColor:
226 case CSSPropertyTextDecorationColor: 229 case CSSPropertyLightingColor:
227 case CSSPropertyWebkitColumnRuleColor: 230 case CSSPropertyOutlineColor:
228 case CSSPropertyWebkitTextStrokeColor: 231 case CSSPropertyStopColor:
229 applicableTypes->append(new CSSColorInterpolationType(property)); 232 case CSSPropertyTextDecorationColor:
230 break; 233 case CSSPropertyWebkitColumnRuleColor:
231 case CSSPropertyFill: 234 case CSSPropertyWebkitTextStrokeColor:
232 case CSSPropertyStroke: 235 applicableTypes->append(new CSSColorInterpolationType(cssProperty));
233 applicableTypes->append(new CSSPaintInterpolationType(property)); 236 break;
234 break; 237 case CSSPropertyFill:
235 case CSSPropertyBoxShadow: 238 case CSSPropertyStroke:
236 case CSSPropertyTextShadow: 239 applicableTypes->append(new CSSPaintInterpolationType(cssProperty));
237 applicableTypes->append(new CSSShadowListInterpolationType(property)); 240 break;
238 break; 241 case CSSPropertyBoxShadow:
239 case CSSPropertyBorderImageSource: 242 case CSSPropertyTextShadow:
240 case CSSPropertyListStyleImage: 243 applicableTypes->append(new CSSShadowListInterpolationType(cssProper ty));
241 case CSSPropertyWebkitMaskBoxImageSource: 244 break;
242 applicableTypes->append(new CSSImageInterpolationType(property)); 245 case CSSPropertyBorderImageSource:
243 break; 246 case CSSPropertyListStyleImage:
244 case CSSPropertyBackgroundImage: 247 case CSSPropertyWebkitMaskBoxImageSource:
245 case CSSPropertyWebkitMaskImage: 248 applicableTypes->append(new CSSImageInterpolationType(cssProperty));
246 applicableTypes->append(new CSSImageListInterpolationType(property)); 249 break;
247 break; 250 case CSSPropertyBackgroundImage:
248 default: 251 case CSSPropertyWebkitMaskImage:
249 // TODO(alancutter): Support all interpolable CSS properties here so we can stop falling back to the old StyleInterpolation implementation. 252 applicableTypes->append(new CSSImageListInterpolationType(cssPropert y));
250 if (CSSPropertyMetadata::isInterpolableProperty(property)) { 253 break;
251 delete applicableTypes; 254 default:
252 applicableTypesMap.add(property, nullptr); 255 // TODO(alancutter): Support all interpolable CSS properties here so we can stop falling back to the old StyleInterpolation implementation.
253 return nullptr; 256 if (CSSPropertyMetadata::isInterpolableProperty(cssProperty))
257 fallbackToLegacy = true;
258 break;
254 } 259 }
255 break; 260 applicableTypes->append(new CSSValueInterpolationType(cssProperty));
261 } else {
262 const QualifiedName& attribute = property.svgAttribute();
263 if (attribute == HTMLNames::classAttr
264 || attribute == SVGNames::clipPathUnitsAttr
265 || attribute == SVGNames::edgeModeAttr
266 || attribute == SVGNames::filterUnitsAttr
267 || attribute == SVGNames::gradientUnitsAttr
268 || attribute == SVGNames::inAttr
269 || attribute == SVGNames::in2Attr
270 || attribute == SVGNames::lengthAdjustAttr
271 || attribute == SVGNames::markerUnitsAttr
272 || attribute == SVGNames::maskContentUnitsAttr
273 || attribute == SVGNames::maskUnitsAttr
274 || attribute == SVGNames::methodAttr
275 || attribute == SVGNames::modeAttr
276 || attribute == SVGNames::operatorAttr
277 || attribute == SVGNames::patternContentUnitsAttr
278 || attribute == SVGNames::patternUnitsAttr
279 || attribute == SVGNames::preserveAlphaAttr
280 || attribute == SVGNames::preserveAspectRatioAttr
281 || attribute == SVGNames::primitiveUnitsAttr
282 || attribute == SVGNames::resultAttr
283 || attribute == SVGNames::spacingAttr
284 || attribute == SVGNames::spreadMethodAttr
285 || attribute == SVGNames::stitchTilesAttr
286 || attribute == SVGNames::targetAttr
287 || attribute == SVGNames::typeAttr
288 || attribute == SVGNames::xChannelSelectorAttr
289 || attribute == SVGNames::yChannelSelectorAttr
290 || attribute == XLinkNames::hrefAttr) {
291 applicableTypes->append(new SVGValueInterpolationType(attribute));
292 } else {
293 fallbackToLegacy = true;
294 }
256 } 295 }
257 applicableTypes->append(new CSSValueInterpolationType(property)); 296
297 if (fallbackToLegacy) {
298 delete applicableTypes;
299 applicableTypesMap.add(property, nullptr);
300 return nullptr;
301 }
302
258 applicableTypesMap.add(property, applicableTypes); 303 applicableTypesMap.add(property, applicableTypes);
259 return applicableTypes; 304 return applicableTypes;
260 } 305 }
261 306
262 } // namespace 307 } // namespace
263 308
264 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::createLeg acyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe & end, Element* element, const ComputedStyle* baseStyle) const 309 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::createLeg acyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe & end, Element* element, const ComputedStyle* baseStyle) const
265 { 310 {
266 CSSValue& fromCSSValue = *m_value.get(); 311 CSSValue& fromCSSValue = *m_value.get();
267 CSSValue& toCSSValue = *toCSSPropertySpecificKeyframe(end).value(); 312 CSSValue& toCSSValue = *toCSSPropertySpecificKeyframe(end).value();
268 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(from CSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve (toCSSValue)) { 313 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(from CSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve (toCSSValue)) {
269 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation . 314 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation .
270 return DeferredLegacyStyleInterpolation::create(&fromCSSValue, &toCSSVal ue, property); 315 return DeferredLegacyStyleInterpolation::create(&fromCSSValue, &toCSSVal ue, property);
271 } 316 }
272 317
273 // FIXME: Remove the use of AnimatableValues and Elements here. 318 // FIXME: Remove the use of AnimatableValues and Elements here.
274 ASSERT(element); 319 ASSERT(element);
275 populateAnimatableValue(property, *element, baseStyle, false); 320 populateAnimatableValue(property, *element, baseStyle, false);
276 end.populateAnimatableValue(property, *element, baseStyle, false); 321 end.populateAnimatableValue(property, *element, baseStyle, false);
277 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata bleValue(), property); 322 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata bleValue(), property);
278 } 323 }
279 324
280 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCrea teInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyfram e& end, Element* element, const ComputedStyle* baseStyle) const 325 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCrea teInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyfram e& end, Element* element, const ComputedStyle* baseStyle) const
281 { 326 {
282 CSSPropertyID property = propertyHandle.cssProperty(); 327 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor Property(propertyHandle);
283 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor Property(property);
284 if (applicableTypes) 328 if (applicableTypes)
285 return InvalidatableInterpolation::create(*applicableTypes, *this, end); 329 return InvalidatableInterpolation::create(*applicableTypes, *this, end);
286 330
287 // TODO(alancutter): Remove the remainder of this function. 331 // TODO(alancutter): Remove the remainder of this function.
288 332
289 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter. 333 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter.
334 CSSPropertyID property = propertyHandle.cssProperty();
290 CSSValue* fromCSSValue = m_value.get(); 335 CSSValue* fromCSSValue = m_value.get();
291 CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value(); 336 CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value();
292 InterpolationRange range = RangeAll; 337 InterpolationRange range = RangeAll;
293 338
294 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect. 339 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect.
295 bool forceDefaultInterpolation = false; 340 bool forceDefaultInterpolation = false;
296 341
297 // FIXME: Remove this check once neutral keyframes are implemented in String Keyframes. 342 // FIXME: Remove this check once neutral keyframes are implemented in String Keyframes.
298 if (!fromCSSValue || !toCSSValue) 343 if (!fromCSSValue || !toCSSValue)
299 return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSValue , property); 344 return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSValue , property);
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 if (interpolation) 565 if (interpolation)
521 return interpolation.release(); 566 return interpolation.release();
522 567
523 return DefaultSVGInterpolation::create(fromValue, toValue, attribute); 568 return DefaultSVGInterpolation::create(fromValue, toValue, attribute);
524 } 569 }
525 570
526 } // namespace 571 } // namespace
527 572
528 PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation( PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const 573 PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation( PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const
529 { 574 {
575 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor Property(propertyHandle);
576 if (applicableTypes)
577 return InvalidatableInterpolation::create(*applicableTypes, *this, end);
578
530 ASSERT(element); 579 ASSERT(element);
531 RefPtrWillBeRawPtr<SVGAnimatedPropertyBase> attribute = toSVGElement(element )->propertyFromAttribute(propertyHandle.svgAttribute()); 580 RefPtrWillBeRawPtr<SVGAnimatedPropertyBase> attribute = toSVGElement(element )->propertyFromAttribute(propertyHandle.svgAttribute());
532 ASSERT(attribute); 581 ASSERT(attribute);
533 582
534 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase( )->cloneForAnimation(m_value); 583 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase( )->cloneForAnimation(m_value);
535 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()- >cloneForAnimation(toSVGPropertySpecificKeyframe(end).value()); 584 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()- >cloneForAnimation(toSVGPropertySpecificKeyframe(end).value());
536 585
537 if (!fromValue || !toValue) 586 if (!fromValue || !toValue)
538 return nullptr; 587 return nullptr;
539 588
540 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get( )); 589 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get( ));
541 } 590 }
542 591
543 } // namespace blink 592 } // 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