| OLD | NEW |
| 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/CSSValueInterpolationType.h" | 9 #include "core/animation/CSSValueInterpolationType.h" |
| 10 #include "core/animation/ColorStyleInterpolation.h" | 10 #include "core/animation/ColorStyleInterpolation.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 PropertyHandleSet properties; | 80 PropertyHandleSet properties; |
| 81 for (unsigned i = 0; i < m_propertySet->propertyCount(); ++i) | 81 for (unsigned i = 0; i < m_propertySet->propertyCount(); ++i) |
| 82 properties.add(PropertyHandle(m_propertySet->propertyAt(i).id())); | 82 properties.add(PropertyHandle(m_propertySet->propertyAt(i).id())); |
| 83 | 83 |
| 84 for (const auto& key: m_svgPropertyMap.keys()) | 84 for (const auto& key: m_svgPropertyMap.keys()) |
| 85 properties.add(PropertyHandle(*key)); | 85 properties.add(PropertyHandle(*key)); |
| 86 | 86 |
| 87 return properties; | 87 return properties; |
| 88 } | 88 } |
| 89 | 89 |
| 90 PassRefPtrWillBeRawPtr<Keyframe> StringKeyframe::clone() const | 90 PassRefPtr<Keyframe> StringKeyframe::clone() const |
| 91 { | 91 { |
| 92 return adoptRefWillBeNoop(new StringKeyframe(*this)); | 92 return adoptRef(new StringKeyframe(*this)); |
| 93 } | 93 } |
| 94 | 94 |
| 95 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::creat
ePropertySpecificKeyframe(PropertyHandle property) const | 95 PassOwnPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::createPropertySpe
cificKeyframe(PropertyHandle property) const |
| 96 { | 96 { |
| 97 if (property.isCSSProperty()) | 97 if (property.isCSSProperty()) |
| 98 return adoptPtrWillBeNoop(new CSSPropertySpecificKeyframe(offset(), &eas
ing(), cssPropertyValue(property.cssProperty()), composite())); | 98 return adoptPtr(new CSSPropertySpecificKeyframe(offset(), &easing(), css
PropertyValue(property.cssProperty()), composite())); |
| 99 | 99 |
| 100 ASSERT(property.isSVGAttribute()); | 100 ASSERT(property.isSVGAttribute()); |
| 101 return adoptPtrWillBeNoop(new SVGPropertySpecificKeyframe(offset(), &easing(
), svgPropertyValue(*property.svgAttribute()), composite())); | 101 return adoptPtr(new SVGPropertySpecificKeyframe(offset(), &easing(), svgProp
ertyValue(*property.svgAttribute()), composite())); |
| 102 } | |
| 103 | |
| 104 DEFINE_TRACE(StringKeyframe) | |
| 105 { | |
| 106 visitor->trace(m_propertySet); | |
| 107 Keyframe::trace(visitor); | |
| 108 } | 102 } |
| 109 | 103 |
| 110 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double
offset, PassRefPtr<TimingFunction> easing, CSSValue* value, EffectModel::Composi
teOperation op) | 104 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double
offset, PassRefPtr<TimingFunction> easing, CSSValue* value, EffectModel::Composi
teOperation op) |
| 111 : Keyframe::PropertySpecificKeyframe(offset, easing, op) | 105 : Keyframe::PropertySpecificKeyframe(offset, easing, op) |
| 112 , m_value(value) | 106 , m_value(value) |
| 113 { } | 107 { } |
| 114 | 108 |
| 115 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double
offset, PassRefPtr<TimingFunction> easing, CSSValue* value) | 109 StringKeyframe::CSSPropertySpecificKeyframe::CSSPropertySpecificKeyframe(double
offset, PassRefPtr<TimingFunction> easing, CSSValue* value) |
| 116 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR
eplace) | 110 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR
eplace) |
| 117 , m_value(value) | 111 , m_value(value) |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 } | 170 } |
| 177 break; | 171 break; |
| 178 } | 172 } |
| 179 applicableTypes->append(new CSSValueInterpolationType(property)); | 173 applicableTypes->append(new CSSValueInterpolationType(property)); |
| 180 applicableTypesMap.add(property, applicableTypes); | 174 applicableTypesMap.add(property, applicableTypes); |
| 181 return applicableTypes; | 175 return applicableTypes; |
| 182 } | 176 } |
| 183 | 177 |
| 184 } // namespace | 178 } // namespace |
| 185 | 179 |
| 186 PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
e::createLegacyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpec
ificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const | 180 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::createLeg
acyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe
& end, Element* element, const ComputedStyle* baseStyle) const |
| 187 { | 181 { |
| 188 CSSValue& fromCSSValue = *m_value.get(); | 182 CSSValue& fromCSSValue = *m_value.get(); |
| 189 CSSValue& toCSSValue = *toCSSPropertySpecificKeyframe(end).value(); | 183 CSSValue& toCSSValue = *toCSSPropertySpecificKeyframe(end).value(); |
| 190 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(from
CSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve
(toCSSValue)) { | 184 if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(from
CSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve
(toCSSValue)) { |
| 191 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation
. | 185 // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation
. |
| 192 return DeferredLegacyStyleInterpolation::create(&fromCSSValue, &toCSSVal
ue, property); | 186 return DeferredLegacyStyleInterpolation::create(&fromCSSValue, &toCSSVal
ue, property); |
| 193 } | 187 } |
| 194 | 188 |
| 195 // FIXME: Remove the use of AnimatableValues and Elements here. | 189 // FIXME: Remove the use of AnimatableValues and Elements here. |
| 196 ASSERT(element); | 190 ASSERT(element); |
| 197 populateAnimatableValue(property, *element, baseStyle); | 191 populateAnimatableValue(property, *element, baseStyle); |
| 198 end.populateAnimatableValue(property, *element, baseStyle); | 192 end.populateAnimatableValue(property, *element, baseStyle); |
| 199 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata
bleValue(), property); | 193 return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimata
bleValue(), property); |
| 200 } | 194 } |
| 201 | 195 |
| 202 PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
e::maybeCreateInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpe
cificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const | 196 PassRefPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCrea
teInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyfram
e& end, Element* element, const ComputedStyle* baseStyle) const |
| 203 { | 197 { |
| 204 CSSPropertyID property = propertyHandle.cssProperty(); | 198 CSSPropertyID property = propertyHandle.cssProperty(); |
| 205 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor
Property(property); | 199 const Vector<const InterpolationType*>* applicableTypes = applicableTypesFor
Property(property); |
| 206 if (applicableTypes) | 200 if (applicableTypes) |
| 207 return InvalidatableStyleInterpolation::create(*applicableTypes, *this,
toCSSPropertySpecificKeyframe(end)); | 201 return InvalidatableStyleInterpolation::create(*applicableTypes, *this,
toCSSPropertySpecificKeyframe(end)); |
| 208 | 202 |
| 209 // TODO(alancutter): Remove the remainder of this function. | 203 // TODO(alancutter): Remove the remainder of this function. |
| 210 | 204 |
| 211 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe
ct, and a template parameter specific converter. | 205 // FIXME: Refactor this into a generic piece that lives in InterpolationEffe
ct, and a template parameter specific converter. |
| 212 CSSValue* fromCSSValue = m_value.get(); | 206 CSSValue* fromCSSValue = m_value.get(); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 case CSSPropertyFontSizeAdjust: | 311 case CSSPropertyFontSizeAdjust: |
| 318 case CSSPropertyOpacity: | 312 case CSSPropertyOpacity: |
| 319 case CSSPropertyStopOpacity: | 313 case CSSPropertyStopOpacity: |
| 320 case CSSPropertyStrokeOpacity: | 314 case CSSPropertyStrokeOpacity: |
| 321 case CSSPropertyStrokeMiterlimit: | 315 case CSSPropertyStrokeMiterlimit: |
| 322 if (DoubleStyleInterpolation::canCreateFrom(*fromCSSValue) && DoubleStyl
eInterpolation::canCreateFrom(*toCSSValue)) | 316 if (DoubleStyleInterpolation::canCreateFrom(*fromCSSValue) && DoubleStyl
eInterpolation::canCreateFrom(*toCSSValue)) |
| 323 return DoubleStyleInterpolation::create(*fromCSSValue, *toCSSValue,
property, toCSSPrimitiveValue(fromCSSValue)->isNumber(), setRange(property)); | 317 return DoubleStyleInterpolation::create(*fromCSSValue, *toCSSValue,
property, toCSSPrimitiveValue(fromCSSValue)->isNumber(), setRange(property)); |
| 324 break; | 318 break; |
| 325 | 319 |
| 326 case CSSPropertyMotionRotation: { | 320 case CSSPropertyMotionRotation: { |
| 327 RefPtrWillBeRawPtr<Interpolation> interpolation = DoubleStyleInterpolati
on::maybeCreateFromMotionRotation(*fromCSSValue, *toCSSValue, property); | 321 RefPtr<Interpolation> interpolation = DoubleStyleInterpolation::maybeCre
ateFromMotionRotation(*fromCSSValue, *toCSSValue, property); |
| 328 if (interpolation) | 322 if (interpolation) |
| 329 return interpolation.release(); | 323 return interpolation.release(); |
| 330 break; | 324 break; |
| 331 } | 325 } |
| 332 case CSSPropertyVisibility: | 326 case CSSPropertyVisibility: |
| 333 if (VisibilityStyleInterpolation::canCreateFrom(*fromCSSValue) && Visibi
lityStyleInterpolation::canCreateFrom(*toCSSValue) && (VisibilityStyleInterpolat
ion::isVisible(*fromCSSValue) || VisibilityStyleInterpolation::isVisible(*toCSSV
alue))) | 327 if (VisibilityStyleInterpolation::canCreateFrom(*fromCSSValue) && Visibi
lityStyleInterpolation::canCreateFrom(*toCSSValue) && (VisibilityStyleInterpolat
ion::isVisible(*fromCSSValue) || VisibilityStyleInterpolation::isVisible(*toCSSV
alue))) |
| 334 return VisibilityStyleInterpolation::create(*fromCSSValue, *toCSSVal
ue, property); | 328 return VisibilityStyleInterpolation::create(*fromCSSValue, *toCSSVal
ue, property); |
| 335 | 329 |
| 336 break; | 330 break; |
| 337 | 331 |
| 338 case CSSPropertyBackgroundColor: | 332 case CSSPropertyBackgroundColor: |
| 339 case CSSPropertyBorderBottomColor: | 333 case CSSPropertyBorderBottomColor: |
| 340 case CSSPropertyBorderLeftColor: | 334 case CSSPropertyBorderLeftColor: |
| 341 case CSSPropertyBorderRightColor: | 335 case CSSPropertyBorderRightColor: |
| 342 case CSSPropertyBorderTopColor: | 336 case CSSPropertyBorderTopColor: |
| 343 case CSSPropertyColor: | 337 case CSSPropertyColor: |
| 344 case CSSPropertyFill: | 338 case CSSPropertyFill: |
| 345 case CSSPropertyFloodColor: | 339 case CSSPropertyFloodColor: |
| 346 case CSSPropertyLightingColor: | 340 case CSSPropertyLightingColor: |
| 347 case CSSPropertyOutlineColor: | 341 case CSSPropertyOutlineColor: |
| 348 case CSSPropertyStopColor: | 342 case CSSPropertyStopColor: |
| 349 case CSSPropertyStroke: | 343 case CSSPropertyStroke: |
| 350 case CSSPropertyTextDecorationColor: | 344 case CSSPropertyTextDecorationColor: |
| 351 case CSSPropertyWebkitColumnRuleColor: | 345 case CSSPropertyWebkitColumnRuleColor: |
| 352 case CSSPropertyWebkitTextStrokeColor: | 346 case CSSPropertyWebkitTextStrokeColor: |
| 353 { | 347 { |
| 354 RefPtrWillBeRawPtr<Interpolation> interpolation = ColorStyleInterpol
ation::maybeCreateFromColor(*fromCSSValue, *toCSSValue, property); | 348 RefPtr<Interpolation> interpolation = ColorStyleInterpolation::maybe
CreateFromColor(*fromCSSValue, *toCSSValue, property); |
| 355 if (interpolation) | 349 if (interpolation) |
| 356 return interpolation.release(); | 350 return interpolation.release(); |
| 357 | 351 |
| 358 // Current color should use LegacyStyleInterpolation | 352 // Current color should use LegacyStyleInterpolation |
| 359 if (ColorStyleInterpolation::shouldUseLegacyStyleInterpolation(*from
CSSValue, *toCSSValue)) | 353 if (ColorStyleInterpolation::shouldUseLegacyStyleInterpolation(*from
CSSValue, *toCSSValue)) |
| 360 return createLegacyStyleInterpolation(property, end, element, ba
seStyle); | 354 return createLegacyStyleInterpolation(property, end, element, ba
seStyle); |
| 361 | 355 |
| 362 break; | 356 break; |
| 363 } | 357 } |
| 364 | 358 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 376 case CSSPropertyBorderBottomLeftRadius: | 370 case CSSPropertyBorderBottomLeftRadius: |
| 377 case CSSPropertyBorderBottomRightRadius: | 371 case CSSPropertyBorderBottomRightRadius: |
| 378 case CSSPropertyBorderTopLeftRadius: | 372 case CSSPropertyBorderTopLeftRadius: |
| 379 case CSSPropertyBorderTopRightRadius: | 373 case CSSPropertyBorderTopRightRadius: |
| 380 if (LengthPairStyleInterpolation::canCreateFrom(*fromCSSValue) && Length
PairStyleInterpolation::canCreateFrom(*toCSSValue)) | 374 if (LengthPairStyleInterpolation::canCreateFrom(*fromCSSValue) && Length
PairStyleInterpolation::canCreateFrom(*toCSSValue)) |
| 381 return LengthPairStyleInterpolation::create(*fromCSSValue, *toCSSVal
ue, property, RangeNonNegative); | 375 return LengthPairStyleInterpolation::create(*fromCSSValue, *toCSSVal
ue, property, RangeNonNegative); |
| 382 break; | 376 break; |
| 383 | 377 |
| 384 case CSSPropertyPerspectiveOrigin: | 378 case CSSPropertyPerspectiveOrigin: |
| 385 case CSSPropertyTransformOrigin: { | 379 case CSSPropertyTransformOrigin: { |
| 386 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpolation
<LengthStyleInterpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, prop
erty, range); | 380 RefPtr<Interpolation> interpolation = ListStyleInterpolation<LengthStyle
Interpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, property, range)
; |
| 387 if (interpolation) | 381 if (interpolation) |
| 388 return interpolation.release(); | 382 return interpolation.release(); |
| 389 | 383 |
| 390 // FIXME: Handle keywords: top, right, left, center, bottom | 384 // FIXME: Handle keywords: top, right, left, center, bottom |
| 391 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; | 385 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; |
| 392 } | 386 } |
| 393 | 387 |
| 394 case CSSPropertyBoxShadow: | 388 case CSSPropertyBoxShadow: |
| 395 case CSSPropertyTextShadow: { | 389 case CSSPropertyTextShadow: { |
| 396 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpolation
<ShadowStyleInterpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, prop
erty); | 390 RefPtr<Interpolation> interpolation = ListStyleInterpolation<ShadowStyle
Interpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, property); |
| 397 if (interpolation) | 391 if (interpolation) |
| 398 return interpolation.release(); | 392 return interpolation.release(); |
| 399 | 393 |
| 400 // FIXME: AnimatableShadow incorrectly animates between inset and non-in
set values so it will never indicate it needs default interpolation | 394 // FIXME: AnimatableShadow incorrectly animates between inset and non-in
set values so it will never indicate it needs default interpolation |
| 401 if (ShadowStyleInterpolation::usesDefaultStyleInterpolation(*fromCSSValu
e, *toCSSValue)) { | 395 if (ShadowStyleInterpolation::usesDefaultStyleInterpolation(*fromCSSValu
e, *toCSSValue)) { |
| 402 forceDefaultInterpolation = true; | 396 forceDefaultInterpolation = true; |
| 403 break; | 397 break; |
| 404 } | 398 } |
| 405 | 399 |
| 406 // FIXME: Handle interpolation from/to none, unspecified color values | 400 // FIXME: Handle interpolation from/to none, unspecified color values |
| 407 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; | 401 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; |
| 408 } | 402 } |
| 409 | 403 |
| 410 case CSSPropertyClip: { | 404 case CSSPropertyClip: { |
| 411 if (LengthBoxStyleInterpolation::usesDefaultInterpolation(*fromCSSValue,
*toCSSValue)) { | 405 if (LengthBoxStyleInterpolation::usesDefaultInterpolation(*fromCSSValue,
*toCSSValue)) { |
| 412 forceDefaultInterpolation = true; | 406 forceDefaultInterpolation = true; |
| 413 break; | 407 break; |
| 414 } | 408 } |
| 415 RefPtrWillBeRawPtr<Interpolation> interpolation = LengthBoxStyleInterpol
ation::maybeCreateFrom(*fromCSSValue, *toCSSValue, property); | 409 RefPtr<Interpolation> interpolation = LengthBoxStyleInterpolation::maybe
CreateFrom(*fromCSSValue, *toCSSValue, property); |
| 416 if (interpolation) | 410 if (interpolation) |
| 417 return interpolation.release(); | 411 return interpolation.release(); |
| 418 break; | 412 break; |
| 419 } | 413 } |
| 420 | 414 |
| 421 case CSSPropertyBorderImageSlice: | 415 case CSSPropertyBorderImageSlice: |
| 422 case CSSPropertyWebkitMaskBoxImageSlice: { | 416 case CSSPropertyWebkitMaskBoxImageSlice: { |
| 423 RefPtrWillBeRawPtr<Interpolation> interpolation = ImageSliceStyleInterpo
lation::maybeCreate(*fromCSSValue, *toCSSValue, property); | 417 RefPtr<Interpolation> interpolation = ImageSliceStyleInterpolation::mayb
eCreate(*fromCSSValue, *toCSSValue, property); |
| 424 if (interpolation) | 418 if (interpolation) |
| 425 return interpolation.release(); | 419 return interpolation.release(); |
| 426 if (ImageSliceStyleInterpolation::usesDefaultInterpolation(*fromCSSValue
, *toCSSValue)) | 420 if (ImageSliceStyleInterpolation::usesDefaultInterpolation(*fromCSSValue
, *toCSSValue)) |
| 427 forceDefaultInterpolation = true; | 421 forceDefaultInterpolation = true; |
| 428 | 422 |
| 429 break; | 423 break; |
| 430 } | 424 } |
| 431 | 425 |
| 432 case CSSPropertyStrokeDasharray: { | 426 case CSSPropertyStrokeDasharray: { |
| 433 RefPtrWillBeRawPtr<Interpolation> interpolation = SVGStrokeDasharrayStyl
eInterpolation::maybeCreate(*fromCSSValue, *toCSSValue, property); | 427 RefPtr<Interpolation> interpolation = SVGStrokeDasharrayStyleInterpolati
on::maybeCreate(*fromCSSValue, *toCSSValue, property); |
| 434 if (interpolation) | 428 if (interpolation) |
| 435 return interpolation.release(); | 429 return interpolation.release(); |
| 436 | 430 |
| 437 break; | 431 break; |
| 438 } | 432 } |
| 439 | 433 |
| 440 case CSSPropertyWebkitFilter: | 434 case CSSPropertyWebkitFilter: |
| 441 case CSSPropertyBackdropFilter: { | 435 case CSSPropertyBackdropFilter: { |
| 442 RefPtrWillBeRawPtr<Interpolation> interpolation = FilterStyleInterpolati
on::maybeCreateList(*fromCSSValue, *toCSSValue, property); | 436 RefPtr<Interpolation> interpolation = FilterStyleInterpolation::maybeCre
ateList(*fromCSSValue, *toCSSValue, property); |
| 443 if (interpolation) | 437 if (interpolation) |
| 444 return interpolation.release(); | 438 return interpolation.release(); |
| 445 | 439 |
| 446 // FIXME: Support drop shadow interpolation. | 440 // FIXME: Support drop shadow interpolation. |
| 447 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; | 441 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; |
| 448 break; | 442 break; |
| 449 } | 443 } |
| 450 | 444 |
| 451 case CSSPropertyTranslate: { | 445 case CSSPropertyTranslate: { |
| 452 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpolation
<LengthStyleInterpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, prop
erty, range); | 446 RefPtr<Interpolation> interpolation = ListStyleInterpolation<LengthStyle
Interpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, property, range)
; |
| 453 if (interpolation) | 447 if (interpolation) |
| 454 return interpolation.release(); | 448 return interpolation.release(); |
| 455 | 449 |
| 456 // TODO(soonm): Legacy mode is used when from and to cssvaluelist length
does not match. | 450 // TODO(soonm): Legacy mode is used when from and to cssvaluelist length
does not match. |
| 457 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; | 451 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; |
| 458 break; | 452 break; |
| 459 } | 453 } |
| 460 | 454 |
| 461 case CSSPropertyScale: { | 455 case CSSPropertyScale: { |
| 462 RefPtrWillBeRawPtr<Interpolation> interpolation = ListStyleInterpolation
<DoubleStyleInterpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, prop
erty, range); | 456 RefPtr<Interpolation> interpolation = ListStyleInterpolation<DoubleStyle
Interpolation>::maybeCreateFromList(*fromCSSValue, *toCSSValue, property, range)
; |
| 463 if (interpolation) | 457 if (interpolation) |
| 464 return interpolation.release(); | 458 return interpolation.release(); |
| 465 | 459 |
| 466 // TODO(soonm): Legacy mode is used when from and to cssvaluelist length
does not match. | 460 // TODO(soonm): Legacy mode is used when from and to cssvaluelist length
does not match. |
| 467 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; | 461 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; |
| 468 break; | 462 break; |
| 469 } | 463 } |
| 470 | 464 |
| 471 default: | 465 default: |
| 472 // Fall back to LegacyStyleInterpolation. | 466 // Fall back to LegacyStyleInterpolation. |
| 473 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; | 467 return createLegacyStyleInterpolation(property, end, element, baseStyle)
; |
| 474 break; | 468 break; |
| 475 } | 469 } |
| 476 | 470 |
| 477 if (fromCSSValue == toCSSValue) | 471 if (fromCSSValue == toCSSValue) |
| 478 return ConstantStyleInterpolation::create(fromCSSValue, property); | 472 return ConstantStyleInterpolation::create(fromCSSValue, property); |
| 479 | 473 |
| 480 if (!forceDefaultInterpolation) { | 474 if (!forceDefaultInterpolation) { |
| 481 ASSERT(AnimatableValue::usesDefaultInterpolation( | 475 ASSERT(AnimatableValue::usesDefaultInterpolation( |
| 482 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr
operty, fromCSSValue).get(), | 476 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr
operty, fromCSSValue).get(), |
| 483 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr
operty, toCSSValue).get())); | 477 StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, pr
operty, toCSSValue).get())); |
| 484 } | 478 } |
| 485 | 479 |
| 486 return nullptr; | 480 return nullptr; |
| 487 | 481 |
| 488 } | 482 } |
| 489 | 483 |
| 490 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPr
opertySpecificKeyframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction
> easing) const | 484 PassOwnPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPropertySpecif
icKeyframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) co
nst |
| 491 { | 485 { |
| 492 return adoptPtrWillBeNoop(new CSSPropertySpecificKeyframe(offset, easing, st
atic_cast<CSSValue*>(0), EffectModel::CompositeAdd)); | 486 return adoptPtr(new CSSPropertySpecificKeyframe(offset, easing, static_cast<
CSSValue*>(0), EffectModel::CompositeAdd)); |
| 493 } | 487 } |
| 494 | 488 |
| 495 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPr
opertySpecificKeyframe::cloneWithOffset(double offset) const | 489 PassOwnPtr<Keyframe::PropertySpecificKeyframe> StringKeyframe::CSSPropertySpecif
icKeyframe::cloneWithOffset(double offset) const |
| 496 { | 490 { |
| 497 Keyframe::PropertySpecificKeyframe* theClone = new CSSPropertySpecificKeyfra
me(offset, m_easing, m_value.get()); | 491 Keyframe::PropertySpecificKeyframe* theClone = new CSSPropertySpecificKeyfra
me(offset, m_easing, m_value.get()); |
| 498 toCSSPropertySpecificKeyframe(theClone)->m_animatableValueCache = m_animatab
leValueCache; | 492 toCSSPropertySpecificKeyframe(theClone)->m_animatableValueCache = m_animatab
leValueCache; |
| 499 return adoptPtrWillBeNoop(theClone); | 493 return adoptPtr(theClone); |
| 500 } | |
| 501 | |
| 502 DEFINE_TRACE(StringKeyframe::CSSPropertySpecificKeyframe) | |
| 503 { | |
| 504 visitor->trace(m_value); | |
| 505 visitor->trace(m_animatableValueCache); | |
| 506 Keyframe::PropertySpecificKeyframe::trace(visitor); | |
| 507 } | 494 } |
| 508 | 495 |
| 509 SVGPropertySpecificKeyframe::SVGPropertySpecificKeyframe(double offset, PassRefP
tr<TimingFunction> easing, const String& value, EffectModel::CompositeOperation
op) | 496 SVGPropertySpecificKeyframe::SVGPropertySpecificKeyframe(double offset, PassRefP
tr<TimingFunction> easing, const String& value, EffectModel::CompositeOperation
op) |
| 510 : Keyframe::PropertySpecificKeyframe(offset, easing, op) | 497 : Keyframe::PropertySpecificKeyframe(offset, easing, op) |
| 511 , m_value(value) | 498 , m_value(value) |
| 512 { | 499 { |
| 513 } | 500 } |
| 514 | 501 |
| 515 SVGPropertySpecificKeyframe::SVGPropertySpecificKeyframe(double offset, PassRefP
tr<TimingFunction> easing, const String& value) | 502 SVGPropertySpecificKeyframe::SVGPropertySpecificKeyframe(double offset, PassRefP
tr<TimingFunction> easing, const String& value) |
| 516 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR
eplace) | 503 : Keyframe::PropertySpecificKeyframe(offset, easing, EffectModel::CompositeR
eplace) |
| 517 , m_value(value) | 504 , m_value(value) |
| 518 { | 505 { |
| 519 ASSERT(!isNull(m_offset)); | 506 ASSERT(!isNull(m_offset)); |
| 520 } | 507 } |
| 521 | 508 |
| 522 DEFINE_TRACE(StringKeyframe::SVGPropertySpecificKeyframe) | 509 PassOwnPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKeyframe::clon
eWithOffset(double offset) const |
| 523 { | 510 { |
| 524 Keyframe::PropertySpecificKeyframe::trace(visitor); | 511 return adoptPtr(new SVGPropertySpecificKeyframe(offset, m_easing, m_value)); |
| 525 } | 512 } |
| 526 | 513 |
| 527 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKe
yframe::cloneWithOffset(double offset) const | 514 PassOwnPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKeyframe::neut
ralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const |
| 528 { | 515 { |
| 529 return adoptPtrWillBeNoop(new SVGPropertySpecificKeyframe(offset, m_easing,
m_value)); | 516 return adoptPtr(new SVGPropertySpecificKeyframe(offset, easing, "", EffectMo
del::CompositeAdd)); |
| 530 } | |
| 531 | |
| 532 PassOwnPtrWillBeRawPtr<Keyframe::PropertySpecificKeyframe> SVGPropertySpecificKe
yframe::neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const | |
| 533 { | |
| 534 return adoptPtrWillBeNoop(new SVGPropertySpecificKeyframe(offset, easing, ""
, EffectModel::CompositeAdd)); | |
| 535 } | 517 } |
| 536 | 518 |
| 537 namespace { | 519 namespace { |
| 538 | 520 |
| 539 PassRefPtrWillBeRawPtr<Interpolation> createSVGInterpolation(SVGPropertyBase* fr
omValue, SVGPropertyBase* toValue, SVGAnimatedPropertyBase* attribute) | 521 PassRefPtr<Interpolation> createSVGInterpolation(SVGPropertyBase* fromValue, SVG
PropertyBase* toValue, SVGAnimatedPropertyBase* attribute) |
| 540 { | 522 { |
| 541 RefPtrWillBeRawPtr<Interpolation> interpolation = nullptr; | 523 RefPtr<Interpolation> interpolation = nullptr; |
| 542 ASSERT(fromValue->type() == toValue->type()); | 524 ASSERT(fromValue->type() == toValue->type()); |
| 543 switch (fromValue->type()) { | 525 switch (fromValue->type()) { |
| 544 case AnimatedAngle: | 526 case AnimatedAngle: |
| 545 if (AngleSVGInterpolation::canCreateFrom(fromValue) && AngleSVGInterpola
tion::canCreateFrom(toValue)) | 527 if (AngleSVGInterpolation::canCreateFrom(fromValue) && AngleSVGInterpola
tion::canCreateFrom(toValue)) |
| 546 return AngleSVGInterpolation::create(fromValue, toValue, attribute); | 528 return AngleSVGInterpolation::create(fromValue, toValue, attribute); |
| 547 break; | 529 break; |
| 548 case AnimatedInteger: | 530 case AnimatedInteger: |
| 549 return IntegerSVGInterpolation::create(fromValue, toValue, attribute); | 531 return IntegerSVGInterpolation::create(fromValue, toValue, attribute); |
| 550 case AnimatedIntegerOptionalInteger: { | 532 case AnimatedIntegerOptionalInteger: { |
| 551 int min = &attribute->attributeName() == &SVGNames::orderAttr ? 1 : 0; | 533 int min = &attribute->attributeName() == &SVGNames::orderAttr ? 1 : 0; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 582 break; | 564 break; |
| 583 } | 565 } |
| 584 if (interpolation) | 566 if (interpolation) |
| 585 return interpolation.release(); | 567 return interpolation.release(); |
| 586 | 568 |
| 587 return DefaultSVGInterpolation::create(fromValue, toValue, attribute); | 569 return DefaultSVGInterpolation::create(fromValue, toValue, attribute); |
| 588 } | 570 } |
| 589 | 571 |
| 590 } // namespace | 572 } // namespace |
| 591 | 573 |
| 592 PassRefPtrWillBeRawPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateIn
terpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& e
nd, Element* element, const ComputedStyle* baseStyle) const | 574 PassRefPtr<Interpolation> SVGPropertySpecificKeyframe::maybeCreateInterpolation(
PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element*
element, const ComputedStyle* baseStyle) const |
| 593 { | 575 { |
| 594 ASSERT(element); | 576 ASSERT(element); |
| 595 RefPtrWillBeRawPtr<SVGAnimatedPropertyBase> attribute = toSVGElement(element
)->propertyFromAttribute(*propertyHandle.svgAttribute()); | 577 RefPtrWillBeRawPtr<SVGAnimatedPropertyBase> attribute = toSVGElement(element
)->propertyFromAttribute(*propertyHandle.svgAttribute()); |
| 596 ASSERT(attribute); | 578 ASSERT(attribute); |
| 597 | 579 |
| 598 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase(
)->cloneForAnimation(m_value); | 580 RefPtrWillBeRawPtr<SVGPropertyBase> fromValue = attribute->currentValueBase(
)->cloneForAnimation(m_value); |
| 599 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()-
>cloneForAnimation(toSVGPropertySpecificKeyframe(end).value()); | 581 RefPtrWillBeRawPtr<SVGPropertyBase> toValue = attribute->currentValueBase()-
>cloneForAnimation(toSVGPropertySpecificKeyframe(end).value()); |
| 600 | 582 |
| 601 if (!fromValue || !toValue) | 583 if (!fromValue || !toValue) |
| 602 return nullptr; | 584 return nullptr; |
| 603 | 585 |
| 604 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get(
)); | 586 return createSVGInterpolation(fromValue.get(), toValue.get(), attribute.get(
)); |
| 605 } | 587 } |
| 606 | 588 |
| 607 } // namespace blink | 589 } // namespace blink |
| OLD | NEW |