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

Unified Diff: Source/core/animation/StringKeyframe.cpp

Issue 1262283002: Fix 50% flip handling of CSS Animations using CSS wide keywords (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/animation/StringKeyframe.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/animation/StringKeyframe.cpp
diff --git a/Source/core/animation/StringKeyframe.cpp b/Source/core/animation/StringKeyframe.cpp
index 8c84b34e7c717eba42ad70eba4091bdec7486d10..db56d6314be26151a03088ec6836f78d9454bd74 100644
--- a/Source/core/animation/StringKeyframe.cpp
+++ b/Source/core/animation/StringKeyframe.cpp
@@ -183,6 +183,22 @@ const Vector<const InterpolationType*>* applicableTypesForProperty(CSSPropertyID
} // namespace
+PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::createLegacyStyleInterpolation(CSSPropertyID property, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const
+{
+ CSSValue& fromCSSValue = *m_value.get();
+ CSSValue& toCSSValue = *toCSSPropertySpecificKeyframe(end).value();
+ if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(fromCSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(toCSSValue)) {
+ // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation.
+ return DeferredLegacyStyleInterpolation::create(&fromCSSValue, &toCSSValue, property);
+ }
+
+ // FIXME: Remove the use of AnimatableValues and Elements here.
+ ASSERT(element);
+ populateAnimatableValue(property, *element, baseStyle);
+ end.populateAnimatableValue(property, *element, baseStyle);
+ return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimatableValue(), property);
+}
+
PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyframe::maybeCreateInterpolation(PropertyHandle propertyHandle, Keyframe::PropertySpecificKeyframe& end, Element* element, const ComputedStyle* baseStyle) const
{
CSSPropertyID property = propertyHandle.cssProperty();
@@ -196,7 +212,6 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
CSSValue* fromCSSValue = m_value.get();
CSSValue* toCSSValue = toCSSPropertySpecificKeyframe(end).value();
InterpolationRange range = RangeAll;
- bool fallBackToLegacy = false;
// FIXME: Remove this flag once we can rely on legacy's behaviour being correct.
bool forceDefaultInterpolation = false;
@@ -214,6 +229,9 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
return nullptr;
}
+ if (fromCSSValue->isCSSWideKeyword() || toCSSValue->isCSSWideKeyword())
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
+
switch (property) {
case CSSPropertyLineHeight:
if (LengthStyleInterpolation::canCreateFrom(*fromCSSValue) && LengthStyleInterpolation::canCreateFrom(*toCSSValue))
@@ -282,11 +300,11 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
// FIXME: Handle keywords e.g. 'smaller', 'larger'.
if (property == CSSPropertyFontSize)
- fallBackToLegacy = true;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
// FIXME: Handle keywords e.g. 'baseline', 'sub'.
if (property == CSSPropertyBaselineShift)
- fallBackToLegacy = true;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
break;
case CSSPropertyOrphans:
@@ -339,7 +357,7 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
// Current color should use LegacyStyleInterpolation
if (ColorStyleInterpolation::shouldUseLegacyStyleInterpolation(*fromCSSValue, *toCSSValue))
- fallBackToLegacy = true;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
break;
}
@@ -373,9 +391,7 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
return interpolation.release();
// FIXME: Handle keywords: top, right, left, center, bottom
- fallBackToLegacy = true;
-
- break;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
}
case CSSPropertyBoxShadow:
@@ -391,10 +407,7 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
}
// FIXME: Handle interpolation from/to none, unspecified color values
- fallBackToLegacy = true;
-
- break;
-
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
}
case CSSPropertyClip: {
@@ -433,7 +446,7 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
return interpolation.release();
// FIXME: Support drop shadow interpolation.
- fallBackToLegacy = true;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
break;
}
@@ -443,7 +456,7 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
return interpolation.release();
// TODO(soonm): Legacy mode is used when from and to cssvaluelist length does not match.
- fallBackToLegacy = true;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
break;
}
@@ -453,42 +466,25 @@ PassRefPtrWillBeRawPtr<Interpolation> StringKeyframe::CSSPropertySpecificKeyfram
return interpolation.release();
// TODO(soonm): Legacy mode is used when from and to cssvaluelist length does not match.
- fallBackToLegacy = true;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
break;
}
default:
// Fall back to LegacyStyleInterpolation.
- fallBackToLegacy = true;
+ return createLegacyStyleInterpolation(property, end, element, baseStyle);
break;
}
if (fromCSSValue == toCSSValue)
return ConstantStyleInterpolation::create(fromCSSValue, property);
- if (forceDefaultInterpolation)
- return nullptr;
-
- if (fromCSSValue->isCSSWideKeyword() || toCSSValue->isCSSWideKeyword())
- fallBackToLegacy = true;
-
- if (fallBackToLegacy) {
- if (DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(*fromCSSValue) || DeferredLegacyStyleInterpolation::interpolationRequiresStyleResolve(*toCSSValue)) {
- // FIXME: Handle these cases outside of DeferredLegacyStyleInterpolation.
- return DeferredLegacyStyleInterpolation::create(fromCSSValue, toCSSValue, property);
- }
-
- // FIXME: Remove the use of AnimatableValues and Elements here.
- ASSERT(element);
- populateAnimatableValue(property, *element, baseStyle);
- end.populateAnimatableValue(property, *element, baseStyle);
- return LegacyStyleInterpolation::create(getAnimatableValue(), end.getAnimatableValue(), property);
+ if (!forceDefaultInterpolation) {
+ ASSERT(AnimatableValue::usesDefaultInterpolation(
+ StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, property, fromCSSValue).get(),
+ StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, property, toCSSValue).get()));
}
- ASSERT(AnimatableValue::usesDefaultInterpolation(
- StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, property, fromCSSValue).get(),
- StyleResolver::createAnimatableValueSnapshot(*element, baseStyle, property, toCSSValue).get()));
-
return nullptr;
}
« no previous file with comments | « Source/core/animation/StringKeyframe.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698