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

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

Issue 1164573002: CSSValue Immediates: Change CSSValue to an object instead of a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: (Hopefully) Builds with oilpan now Created 5 years, 6 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 // 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/animation/AngleSVGInterpolation.h" 8 #include "core/animation/AngleSVGInterpolation.h"
9 #include "core/animation/ColorStyleInterpolation.h" 9 #include "core/animation/ColorStyleInterpolation.h"
10 #include "core/animation/CompositorAnimations.h" 10 #include "core/animation/CompositorAnimations.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 { 49 {
50 } 50 }
51 51
52 void StringKeyframe::setPropertyValue(CSSPropertyID property, const String& valu e, Element* element, StyleSheetContents* styleSheetContents) 52 void StringKeyframe::setPropertyValue(CSSPropertyID property, const String& valu e, Element* element, StyleSheetContents* styleSheetContents)
53 { 53 {
54 ASSERT(property != CSSPropertyInvalid); 54 ASSERT(property != CSSPropertyInvalid);
55 if (CSSAnimations::isAllowedAnimation(property)) 55 if (CSSAnimations::isAllowedAnimation(property))
56 m_propertySet->setProperty(property, value, false, styleSheetContents); 56 m_propertySet->setProperty(property, value, false, styleSheetContents);
57 } 57 }
58 58
59 void StringKeyframe::setPropertyValue(CSSPropertyID property, PassRefPtrWillBeRa wPtr<CSSValue> value) 59 void StringKeyframe::setPropertyValue(CSSPropertyID property, CSSValue value)
60 { 60 {
61 ASSERT(property != CSSPropertyInvalid); 61 ASSERT(property != CSSPropertyInvalid);
62 ASSERT(CSSAnimations::isAllowedAnimation(property)); 62 ASSERT(CSSAnimations::isAllowedAnimation(property));
63 m_propertySet->setProperty(property, value, false); 63 m_propertySet->setProperty(property, value, false);
64 } 64 }
65 65
66 void StringKeyframe::setPropertyValue(const QualifiedName& attributeName, const String& value, Element* element) 66 void StringKeyframe::setPropertyValue(const QualifiedName& attributeName, const String& value, Element* element)
67 { 67 {
68 ASSERT(element->isSVGElement()); 68 ASSERT(element->isSVGElement());
69 m_svgPropertyMap.set(&attributeName, value); 69 m_svgPropertyMap.set(&attributeName, value);
(...skipping 26 matching lines...) Expand all
96 ASSERT(property.isSVGAttribute()); 96 ASSERT(property.isSVGAttribute());
97 return adoptPtrWillBeNoop(new SVGPropertySpecificKeyframe(offset(), &easing( ), svgPropertyValue(*property.svgAttribute()), composite())); 97 return adoptPtrWillBeNoop(new SVGPropertySpecificKeyframe(offset(), &easing( ), svgPropertyValue(*property.svgAttribute()), composite()));
98 } 98 }
99 99
100 DEFINE_TRACE(StringKeyframe) 100 DEFINE_TRACE(StringKeyframe)
101 { 101 {
102 visitor->trace(m_propertySet); 102 visitor->trace(m_propertySet);
103 Keyframe::trace(visitor); 103 Keyframe::trace(visitor);
104 } 104 }
105 105
106 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, CSSValue* value, EffectModel::Composi teOperation op) 106 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, NullableCSSValue value, EffectModel:: CompositeOperation op)
107 : Keyframe::PropertySpecificKeyframe(offset, easing, op) 107 : Keyframe::PropertySpecificKeyframe(offset, easing, op)
108 , m_value(value) 108 , m_value(value)
109 { } 109 { }
110 110
111 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, CSSValue* value) 111 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double offset, PassRefPtr<TimingFunction> easing, NullableCSSValue value)
112 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR eplace) 112 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR eplace)
113 , m_value(value) 113 , m_value(value)
114 { 114 {
115 ASSERT(!isNull(m_offset)); 115 ASSERT(!isNull(m_offset));
116 } 116 }
117 117
118 void StringKeyframe::CSSPropertySpecificKeyframe::populateAnimatableValue(CSSPro pertyID property, Element& element, const ComputedStyle* baseStyle) const 118 void StringKeyframe::CSSPropertySpecificKeyframe::populateAnimatableValue(CSSPro pertyID property, Element& element, const ComputedStyle* baseStyle) const
119 { 119 {
120 if (!m_animatableValueCache && (baseStyle || !m_value->isInheritedValue())) 120 if (!m_animatableValueCache && (baseStyle || !m_value->isInheritedValue()))
121 m_animatableValueCache = StyleResolver::createAnimatableValueSnapshot(el ement, baseStyle, property, m_value.get()); 121 m_animatableValueCache = StyleResolver::createAnimatableValueSnapshot(el ement, baseStyle, property, m_value);
122 } 122 }
123 123
124 namespace { 124 namespace {
125 InterpolationRange setRange(CSSPropertyID id) 125 InterpolationRange setRange(CSSPropertyID id)
126 { 126 {
127 switch (id) { 127 switch (id) {
128 case CSSPropertyOrphans: 128 case CSSPropertyOrphans:
129 case CSSPropertyWebkitColumnCount: 129 case CSSPropertyWebkitColumnCount:
130 case CSSPropertyWidows: 130 case CSSPropertyWidows:
131 return RangeRoundGreaterThanOrEqualToOne; 131 return RangeRoundGreaterThanOrEqualToOne;
(...skipping 18 matching lines...) Expand all
150 } 150 }
151 } 151 }
152 152
153 } // namespace 153 } // namespace
154 154
155 PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram e::maybeCreateInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpe cificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const 155 PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram e::maybeCreateInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpe cificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const
156 { 156 {
157 CSSPropertyID property = propertyHandle.cssProperty(); 157 CSSPropertyID property = propertyHandle.cssProperty();
158 158
159 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter. 159 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe ct, and a template parameter specific converter.
160 CSSValue* fromCSSValue = m_value.get(); 160 NullableCSSValue nullableFromCSSValue = m_value;
161 CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value(); 161 NullableCSSValue nullableToCSSValue = toCSSPropertySpecificKeyframe(end).val ue();
162 InterpolationRange range = RangeAll; 162 InterpolationRange range = RangeAll;
163 bool fallBackToLegacy = false; 163 bool fallBackToLegacy = false;
164 164
165 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect. 165 // FIXME: Remove this flag once we can rely on legacy's behaviour being corr ect.
166 bool forceDefaultInterpolation = false; 166 bool forceDefaultInterpolation = false;
167 167
168 // FIXME: Remove this check once neutral keyframes are implemented in String Keyframes. 168 // FIXME: Remove this check once neutral keyframes are implemented in String Keyframes.
169 if (!fromCSSValue || !toCSSValue) 169 if (!nullableFromCSSValue || !nullableToCSSValue)
170 return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSValue , property); 170 return DeferredLegacyStyleInterpolation::create(nullableFromCSSValue, nu llableToCSSValue, property);
171 171 CSSValue& fromCSSValue = *nullableFromCSSValue;
172 ASSERT(fromCSSValue && toCSSValue); 172 CSSValue& toCSSValue = *nullableToCSSValue;
173 173
174 if (!CSSPropertyMetadata::isAnimatableProperty(property)) { 174 if (!CSSPropertyMetadata::isAnimatableProperty(property)) {
175 if (fromCSSValue == toCSSValue) 175 if (fromCSSValue.ptrEquals(toCSSValue))
176 return ConstantStyleInterpolation::create(fromCSSValue, property); 176 return ConstantStyleInterpolation::create(fromCSSValue, property);
177 177
178 return nullptr; 178 return nullptr;
179 } 179 }
180 180
181 // FIXME: Generate this giant switch statement. 181 // FIXME: Generate this giant switch statement.
182 switch (property) { 182 switch (property) {
183 case CSSPropertyLineHeight: 183 case CSSPropertyLineHeight:
184 if (LengthStyleInterpolation::canCreateFrom(*fromCSSValue) && LengthStyl eInterpolation::canCreateFrom(*toCSSValue)) 184 if (LengthStyleInterpolation::canCreateFrom(fromCSSValue) && LengthStyle Interpolation::canCreateFrom(toCSSValue))
185 return LengthStyleInterpolation::create(*fromCSSValue, *toCSSValue, property, RangeNonNegative); 185 return LengthStyleInterpolation::create(fromCSSValue, toCSSValue, pr operty, RangeNonNegative);
186 186
187 if (DoubleStyleInterpolation::canCreateFrom(*fromCSSValue) && DoubleStyl eInterpolation::canCreateFrom(*toCSSValue)) 187 if (DoubleStyleInterpolation::canCreateFrom(fromCSSValue) && DoubleStyle Interpolation::canCreateFrom(toCSSValue))
188 return DoubleStyleInterpolation::create(*fromCSSValue, *toCSSValue, property, CSSPrimitiveValue::CSS_NUMBER, RangeNonNegative); 188 return DoubleStyleInterpolation::create(fromCSSValue, toCSSValue, pr operty, CSSPrimitiveValue::CSS_NUMBER, RangeNonNegative);
189 189
190 break; 190 break;
191 case CSSPropertyBorderBottomWidth: 191 case CSSPropertyBorderBottomWidth:
192 case CSSPropertyBorderLeftWidth: 192 case CSSPropertyBorderLeftWidth:
193 case CSSPropertyBorderRightWidth: 193 case CSSPropertyBorderRightWidth:
194 case CSSPropertyBorderTopWidth: 194 case CSSPropertyBorderTopWidth:
195 case CSSPropertyFlexBasis: 195 case CSSPropertyFlexBasis:
196 case CSSPropertyFontSize: 196 case CSSPropertyFontSize:
197 case CSSPropertyHeight: 197 case CSSPropertyHeight:
198 case CSSPropertyMaxHeight: 198 case CSSPropertyMaxHeight:
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 case CSSPropertyVerticalAlign: 235 case CSSPropertyVerticalAlign:
236 case CSSPropertyWordSpacing: 236 case CSSPropertyWordSpacing:
237 case CSSPropertyWebkitColumnRuleWidth: 237 case CSSPropertyWebkitColumnRuleWidth:
238 case CSSPropertyWebkitPerspectiveOriginX: 238 case CSSPropertyWebkitPerspectiveOriginX:
239 case CSSPropertyWebkitPerspectiveOriginY: 239 case CSSPropertyWebkitPerspectiveOriginY:
240 case CSSPropertyWebkitTransformOriginX: 240 case CSSPropertyWebkitTransformOriginX:
241 case CSSPropertyWebkitTransformOriginY: 241 case CSSPropertyWebkitTransformOriginY:
242 case CSSPropertyWebkitTransformOriginZ: 242 case CSSPropertyWebkitTransformOriginZ:
243 case CSSPropertyX: 243 case CSSPropertyX:
244 case CSSPropertyY: 244 case CSSPropertyY:
245 if (LengthStyleInterpolation::canCreateFrom(*fromCSSValue, property) && LengthStyleInterpolation::canCreateFrom(*toCSSValue, property)) 245 if (LengthStyleInterpolation::canCreateFrom(fromCSSValue, property) && L engthStyleInterpolation::canCreateFrom(toCSSValue, property))
246 return LengthStyleInterpolation::create(*fromCSSValue, *toCSSValue, property, range); 246 return LengthStyleInterpolation::create(fromCSSValue, toCSSValue, pr operty, range);
247 247
248 // FIXME: Handle keywords e.g. 'smaller', 'larger'. 248 // FIXME: Handle keywords e.g. 'smaller', 'larger'.
249 if (property == CSSPropertyFontSize) 249 if (property == CSSPropertyFontSize)
250 fallBackToLegacy = true; 250 fallBackToLegacy = true;
251 251
252 // FIXME: Handle keywords e.g. 'baseline', 'sub'. 252 // FIXME: Handle keywords e.g. 'baseline', 'sub'.
253 if (property == CSSPropertyBaselineShift) 253 if (property == CSSPropertyBaselineShift)
254 fallBackToLegacy = true; 254 fallBackToLegacy = true;
255 255
256 break; 256 break;
257 case CSSPropertyOrphans: 257 case CSSPropertyOrphans:
258 case CSSPropertyWidows: 258 case CSSPropertyWidows:
259 case CSSPropertyZIndex: 259 case CSSPropertyZIndex:
260 case CSSPropertyWebkitColumnCount: 260 case CSSPropertyWebkitColumnCount:
261 case CSSPropertyShapeImageThreshold: 261 case CSSPropertyShapeImageThreshold:
262 case CSSPropertyFillOpacity: 262 case CSSPropertyFillOpacity:
263 case CSSPropertyFloodOpacity: 263 case CSSPropertyFloodOpacity:
264 case CSSPropertyFontSizeAdjust: 264 case CSSPropertyFontSizeAdjust:
265 case CSSPropertyOpacity: 265 case CSSPropertyOpacity:
266 case CSSPropertyStopOpacity: 266 case CSSPropertyStopOpacity:
267 case CSSPropertyStrokeOpacity: 267 case CSSPropertyStrokeOpacity:
268 case CSSPropertyStrokeMiterlimit: 268 case CSSPropertyStrokeMiterlimit:
269 if (DoubleStyleInterpolation::canCreateFrom(*fromCSSValue) && DoubleStyl eInterpolation::canCreateFrom(*toCSSValue)) 269 if (DoubleStyleInterpolation::canCreateFrom(fromCSSValue) && DoubleStyle Interpolation::canCreateFrom(toCSSValue))
270 return DoubleStyleInterpolation::create(*fromCSSValue, *toCSSValue, property, toCSSPrimitiveValue(fromCSSValue)->primitiveType(), setRange(property) ); 270 return DoubleStyleInterpolation::create(fromCSSValue, toCSSValue, pr operty, toCSSPrimitiveValue(fromCSSValue).primitiveType(), setRange(property));
271 break; 271 break;
272 272
273 case CSSPropertyMotionRotation: { 273 case CSSPropertyMotionRotation: {
274 RefPtrWillBeRawPtr<Interpolation> interpolation = DoubleStyleInterpolati on::maybeCreateFromMotionRotation(*fromCSSValue, *toCSSValue, property); 274 RefPtrWillBeRawPtr<Interpolation> interpolation = DoubleStyleInterpolati on::maybeCreateFromMotionRotation(fromCSSValue, toCSSValue, property);
275 if (interpolation) 275 if (interpolation)
276 return interpolation.release(); 276 return interpolation.release();
277 break; 277 break;
278 } 278 }
279 case CSSPropertyVisibility: 279 case CSSPropertyVisibility:
280 if (VisibilityStyleInterpolation::canCreateFrom(*fromCSSValue) && Visibi lityStyleInterpolation::canCreateFrom(*toCSSValue) && (VisibilityStyleInterpolat ion::isVisible(*fromCSSValue) || VisibilityStyleInterpolation::isVisible(*toCSSV alue))) 280 if (VisibilityStyleInterpolation::canCreateFrom(fromCSSValue) && Visibil ityStyleInterpolation::canCreateFrom(toCSSValue) && (VisibilityStyleInterpolatio n::isVisible(fromCSSValue) || VisibilityStyleInterpolation::isVisible(toCSSValue )))
281 return VisibilityStyleInterpolation::create(*fromCSSValue, *toCSSVal ue, property); 281 return VisibilityStyleInterpolation::create(fromCSSValue, toCSSValue , property);
282 282
283 break; 283 break;
284 284
285 case CSSPropertyBackgroundColor: 285 case CSSPropertyBackgroundColor:
286 case CSSPropertyBorderBottomColor: 286 case CSSPropertyBorderBottomColor:
287 case CSSPropertyBorderLeftColor: 287 case CSSPropertyBorderLeftColor:
288 case CSSPropertyBorderRightColor: 288 case CSSPropertyBorderRightColor:
289 case CSSPropertyBorderTopColor: 289 case CSSPropertyBorderTopColor:
290 case CSSPropertyColor: 290 case CSSPropertyColor:
291 case CSSPropertyFill: 291 case CSSPropertyFill:
292 case CSSPropertyFloodColor: 292 case CSSPropertyFloodColor:
293 case CSSPropertyLightingColor: 293 case CSSPropertyLightingColor:
294 case CSSPropertyOutlineColor: 294 case CSSPropertyOutlineColor:
295 case CSSPropertyStopColor: 295 case CSSPropertyStopColor:
296 case CSSPropertyStroke: 296 case CSSPropertyStroke:
297 case CSSPropertyTextDecorationColor: 297 case CSSPropertyTextDecorationColor:
298 case CSSPropertyWebkitColumnRuleColor: 298 case CSSPropertyWebkitColumnRuleColor:
299 case CSSPropertyWebkitTextStrokeColor: 299 case CSSPropertyWebkitTextStrokeColor:
300 { 300 {
301 RefPtrWillBeRawPtr<Interpolation> interpolation = ColorStyleInterpol ation::maybeCreateFromColor(*fromCSSValue, *toCSSValue, property); 301 RefPtrWillBeRawPtr<Interpolation> interpolation = ColorStyleInterpol ation::maybeCreateFromColor(fromCSSValue, toCSSValue, property);
302 if (interpolation) 302 if (interpolation)
303 return interpolation.release(); 303 return interpolation.release();
304 304
305 // Current color should use LegacyStyleInterpolation 305 // Current color should use LegacyStyleInterpolation
306 if (ColorStyleInterpolation::shouldUseLegacyStyleInterpolation(*from CSSValue, *toCSSValue)) 306 if (ColorStyleInterpolation::shouldUseLegacyStyleInterpolation(fromC SSValue, toCSSValue))
307 fallBackToLegacy = true; 307 fallBackToLegacy = true;
308 308
309 break; 309 break;
310 } 310 }
311 311
312 case CSSPropertyBorderImageSource: 312 case CSSPropertyBorderImageSource:
313 case CSSPropertyListStyleImage: 313 case CSSPropertyListStyleImage:
314 case CSSPropertyWebkitMaskBoxImageSource: 314 case CSSPropertyWebkitMaskBoxImageSource:
315 if (fromCSSValue == toCSSValue) 315 if (fromCSSValue.ptrEquals(toCSSValue))
316 return ConstantStyleInterpolation::create(fromCSSValue, property); 316 return ConstantStyleInterpolation::create(fromCSSValue, property);
317 317
318 if (ImageStyleInterpolation::canCreateFrom(*fromCSSValue) && ImageStyleI nterpolation::canCreateFrom(*toCSSValue)) 318 if (ImageStyleInterpolation::canCreateFrom(fromCSSValue) && ImageStyleIn terpolation::canCreateFrom(toCSSValue))
319 return ImageStyleInterpolation::create(*fromCSSValue, *toCSSValue, p roperty); 319 return ImageStyleInterpolation::create(fromCSSValue, toCSSValue, pro perty);
320 320
321 forceDefaultInterpolation = true; 321 forceDefaultInterpolation = true;
322 break; 322 break;
323 case CSSPropertyBorderBottomLeftRadius: 323 case CSSPropertyBorderBottomLeftRadius:
324 case CSSPropertyBorderBottomRightRadius: 324 case CSSPropertyBorderBottomRightRadius:
325 case CSSPropertyBorderTopLeftRadius: 325 case CSSPropertyBorderTopLeftRadius:
326 case CSSPropertyBorderTopRightRadius: 326 case CSSPropertyBorderTopRightRadius:
327 range = RangeNonNegative; 327 range = RangeNonNegative;
328 // Fall through 328 // Fall through
329 case CSSPropertyObjectPosition: 329 case CSSPropertyObjectPosition:
330 if (LengthPairStyleInterpolation::canCreateFrom(*fromCSSValue) && Length PairStyleInterpolation::canCreateFrom(*toCSSValue)) 330 if (LengthPairStyleInterpolation::canCreateFrom(fromCSSValue) && LengthP airStyleInterpolation::canCreateFrom(toCSSValue))
331 return LengthPairStyleInterpolation::create(*fromCSSValue, *toCSSVal ue, property, range); 331 return LengthPairStyleInterpolation::create(fromCSSValue, toCSSValue , property, range);
332 break; 332 break;
333 333
334 case CSSPropertyPerspectiveOrigin: 334 case CSSPropertyPerspectiveOrigin:
335 case CSSPropertyTransformOrigin: { 335 case CSSPropertyTransformOrigin: {
336 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpolation <LengthStyleInterpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, prop erty, range); 336 if (fromCSSValue.isValueList() && toCSSValue.isValueList()) {
337 if (interpolation) 337 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpola tion<LengthStyleInterpolation>::maybeCreateFromList(toCSSValueList(fromCSSValue) , toCSSValueList(toCSSValue), property, range);
338 return interpolation.release(); 338 if (interpolation)
339 return interpolation.release();
340 }
339 341
340 // FIXME: Handle keywords: top, right, left, center, bottom 342 // FIXME: Handle keywords: top, right, left, center, bottom
341 fallBackToLegacy = true; 343 fallBackToLegacy = true;
342 344
343 break; 345 break;
344 } 346 }
345 347
346 case CSSPropertyBoxShadow: 348 case CSSPropertyBoxShadow:
347 case CSSPropertyTextShadow: { 349 case CSSPropertyTextShadow: {
348 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpolation <ShadowStyleInterpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, prop erty); 350 if (fromCSSValue.isValueList() && toCSSValue.isValueList()) {
349 if (interpolation) 351 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpola tion<ShadowStyleInterpolation>::maybeCreateFromList(toCSSValueList(fromCSSValue) , toCSSValueList(toCSSValue), property);
350 return interpolation.release(); 352 if (interpolation)
353 return interpolation.release();
354 }
351 355
352 // FIXME: AnimatableShadow incorrectly animates between inset and non-in set values so it will never indicate it needs default interpolation 356 // FIXME: AnimatableShadow incorrectly animates between inset and non-in set values so it will never indicate it needs default interpolation
353 if (ShadowStyleInterpolation::usesDefaultStyleInterpolation(*fromCSSValu e, *toCSSValue)) { 357 if (ShadowStyleInterpolation::usesDefaultStyleInterpolation(fromCSSValue , toCSSValue)) {
354 forceDefaultInterpolation = true; 358 forceDefaultInterpolation = true;
355 break; 359 break;
356 } 360 }
357 361
358 // FIXME: Handle interpolation from/to none, unspecified color values 362 // FIXME: Handle interpolation from/to none, unspecified color values
359 fallBackToLegacy = true; 363 fallBackToLegacy = true;
360 364
361 break; 365 break;
362 366
363 } 367 }
364 368
365 case CSSPropertyClip: { 369 case CSSPropertyClip: {
366 if (LengthBoxStyleInterpolation::usesDefaultInterpolation(*fromCSSValue, *toCSSValue)) { 370 if (LengthBoxStyleInterpolation::usesDefaultInterpolation(fromCSSValue, toCSSValue)) {
367 forceDefaultInterpolation = true; 371 forceDefaultInterpolation = true;
368 break; 372 break;
369 } 373 }
370 RefPtrWillBeRawPtr<Interpolation> interpolation = LengthBoxStyleInterpol ation::maybeCreateFrom(*fromCSSValue, *toCSSValue, property); 374 RefPtrWillBeRawPtr<Interpolation> interpolation = LengthBoxStyleInterpol ation::maybeCreateFrom(fromCSSValue, toCSSValue, property);
371 if (interpolation) 375 if (interpolation)
372 return interpolation.release(); 376 return interpolation.release();
373 break; 377 break;
374 } 378 }
375 379
376 case CSSPropertyBorderImageSlice: 380 case CSSPropertyBorderImageSlice:
377 case CSSPropertyWebkitMaskBoxImageSlice: { 381 case CSSPropertyWebkitMaskBoxImageSlice: {
378 RefPtrWillBeRawPtr<Interpolation> interpolation = ImageSliceStyleInterpo lation::maybeCreate(*fromCSSValue, *toCSSValue, property); 382 RefPtrWillBeRawPtr<Interpolation> interpolation = ImageSliceStyleInterpo lation::maybeCreate(fromCSSValue, toCSSValue, property);
379 if (interpolation) 383 if (interpolation)
380 return interpolation.release(); 384 return interpolation.release();
381 if (ImageSliceStyleInterpolation::usesDefaultInterpolation(*fromCSSValue , *toCSSValue)) 385 if (ImageSliceStyleInterpolation::usesDefaultInterpolation(fromCSSValue, toCSSValue))
382 forceDefaultInterpolation = true; 386 forceDefaultInterpolation = true;
383 387
384 break; 388 break;
385 } 389 }
386 390
387 case CSSPropertyStrokeDasharray: { 391 case CSSPropertyStrokeDasharray: {
388 RefPtrWillBeRawPtr<Interpolation> interpolation = SVGStrokeDasharrayStyl eInterpolation::maybeCreate(*fromCSSValue, *toCSSValue, property); 392 RefPtrWillBeRawPtr<Interpolation> interpolation = SVGStrokeDasharrayStyl eInterpolation::maybeCreate(fromCSSValue, toCSSValue, property);
389 if (interpolation) 393 if (interpolation)
390 return interpolation.release(); 394 return interpolation.release();
391 395
392 break; 396 break;
393 } 397 }
394 398
395 case CSSPropertyWebkitFilter: { 399 case CSSPropertyWebkitFilter: {
396 RefPtrWillBeRawPtr<Interpolation> interpolation = FilterStyleInterpolati on::maybeCreateList(*fromCSSValue, *toCSSValue, property); 400 RefPtrWillBeRawPtr<Interpolation> interpolation = FilterStyleInterpolati on::maybeCreateList(fromCSSValue, toCSSValue, property);
397 if (interpolation) 401 if (interpolation)
398 return interpolation.release(); 402 return interpolation.release();
399 403
400 // FIXME: Support drop shadow interpolation. 404 // FIXME: Support drop shadow interpolation.
401 fallBackToLegacy = true; 405 fallBackToLegacy = true;
402 break; 406 break;
403 } 407 }
404 408
405 default: 409 default:
406 // Fall back to LegacyStyleInterpolation. 410 // Fall back to LegacyStyleInterpolation.
407 fallBackToLegacy = true; 411 fallBackToLegacy = true;
408 break; 412 break;
409 } 413 }
410 414
411 if (fromCSSValue == toCSSValue) 415 if (fromCSSValue.ptrEquals(toCSSValue))
412 return ConstantStyleInterpolation::create(fromCSSValue, property); 416 return ConstantStyleInterpolation::create(fromCSSValue, property);
413 417
414 if (forceDefaultInterpolation) 418 if (forceDefaultInterpolation)
415 return nullptr; 419 return nullptr;
416 420
417 if (fromCSSValue->isCSSWideKeyword() || toCSSValue->isCSSWideKeyword()) 421 if (fromCSSValue.isCSSWideKeyword() || toCSSValue.isCSSWideKeyword())
418 fallBackToLegacy = true; 422 fallBackToLegacy = true;
419 423
420 if (fallBackToLegacy) { 424 if (fallBackToLegacy) {
421 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve( *fromCSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleRe solve(*toCSSValue)) { 425 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve( fromCSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleRes olve(toCSSValue)) {
422 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpola tion. 426 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpola tion.
423 return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSV alue, property); 427 return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSV alue, property);
424 } 428 }
425 429
426 // FIXME: Remove the use of AnimatableValues and Elements here. 430 // FIXME: Remove the use of AnimatableValues and Elements here.
427 ASSERT(element); 431 ASSERT(element);
428 populateAnimatableValue(property, *element, baseStyle); 432 populateAnimatableValue(property, *element, baseStyle);
429 end.populateAnimatableValue(property, *element, baseStyle); 433 end.populateAnimatableValue(property, *element, baseStyle);
430 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAni matableValue(), property); 434 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAni matableValue(), property);
431 } 435 }
432 436
433 ASSERT(AnimatableValue::usesDefaultInterpolation( 437 ASSERT(AnimatableValue::usesDefaultInterpolation(
434 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, proper ty, fromCSSValue).get(), 438 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, proper ty, fromCSSValue).get(),
435 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, proper ty, toCSSValue).get())); 439 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, proper ty, toCSSValue).get()));
436 440
437 return nullptr; 441 return nullptr;
438 442
439 } 443 }
440 444
441 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPr opertySpecificKeyframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction > easing) const 445 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPr opertySpecificKeyframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction > easing) const
442 { 446 {
443 return adoptPtrWillBeNoop(new CSSPropertySpecificKeyframe(offset, easing, st atic_cast<CSSValue*>(0), EffectModel::CompositeAdd)); 447 return adoptPtrWillBeNoop(new CSSPropertySpecificKeyframe(offset, easing, nu llptr, EffectModel::CompositeAdd));
444 } 448 }
445 449
446 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPr opertySpecificKeyframe::cloneWithOffset(double offset) const 450 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPr opertySpecificKeyframe::cloneWithOffset(double offset) const
447 { 451 {
448 Keyframe::PropertySpecificKeyframe* theClone = new CSSPropertySpecificKeyfra me(offset, m_easing, m_value.get()); 452 Keyframe::PropertySpecificKeyframe* theClone = new CSSPropertySpecificKeyfra me(offset, m_easing, m_value);
449 toCSSPropertySpecificKeyframe(theClone)->m_animatableValueCache = m_animatab leValueCache; 453 toCSSPropertySpecificKeyframe(theClone)->m_animatableValueCache = m_animatab leValueCache;
450 return adoptPtrWillBeNoop(theClone); 454 return adoptPtrWillBeNoop(theClone);
451 } 455 }
452 456
453 DEFINE_TRACE(StringKeyframe::CSSPropertySpecificKeyframe) 457 DEFINE_TRACE(StringKeyframe::CSSPropertySpecificKeyframe)
454 { 458 {
455 visitor->trace(m_value); 459 visitor->trace(m_value);
456 visitor->trace(m_animatableValueCache); 460 visitor->trace(m_animatableValueCache);
457 Keyframe::PropertySpecificKeyframe::trace(visitor); 461 Keyframe::PropertySpecificKeyframe::trace(visitor);
458 } 462 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase( )->cloneForAnimation(m_value); 553 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase( )->cloneForAnimation(m_value);
550 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()- >cloneForAnimation(toSVGPropertySpecificKeyframe(end).value()); 554 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()- >cloneForAnimation(toSVGPropertySpecificKeyframe(end).value());
551 555
552 if (!fromValue || !toValue) 556 if (!fromValue || !toValue)
553 return nullptr; 557 return nullptr;
554 558
555 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get( )); 559 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get( ));
556 } 560 }
557 561
558 } // namespace blink 562 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698