Commit 54bd8709 authored by timloh@chromium.org's avatar timloh@chromium.org

Simplify animation/transition parsing slightly

This patch simplifies parsing CSS animations and transitions slightly by
making us only return CSSValueLists from the parser, including when we
only have a single value in the list. This was probably done differently
in the past (with single values not being wrapped in a CSSValueList) as
premature optimisation, which adds needless complexity to the code. Note
this changes the foo.style.getPropertyCSSValue output slightly.

I've also made BisonCSSParser::parseAnimationTimingFunctionValue return
a single (non-valuelist-wrapped) CSSValue which isn't initial or inherit
to better match the intention of the callers.

R=alancutter,dstockwell

Review URL: https://codereview.chromium.org/293113007

git-svn-id: svn://svn.chromium.org/blink/trunk@175153 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 97015197
......@@ -3,35 +3,35 @@ Testing whether CSSPrimitiveValue.getFloatValue() converts units correctly.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_PT) is 10
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_MM) is 3.527778
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_CM) is 0.352778
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_IN) is 0.138889
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_PC) is 0.833333
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_PX) is 13.333333
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_NUMBER) is 13.333333
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_DEG) is 90
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_RAD) is 1.570796
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_GRAD) is 100
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_NUMBER) is 90
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_MS) is 200
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_S) is 0.2
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_NUMBER) is 200
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_PERCENTAGE) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_MS) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_HZ) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_DEG) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('font-size', CSSPrimitiveValue.CSS_RGBCOLOR) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_PERCENTAGE) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_PX) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_MS) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_HZ) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_RGBCOLOR) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_PERCENTAGE) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_PX) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_DEG) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_HZ) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_RGBCOLOR) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PT) is 10
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_MM) is 3.527778
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_CM) is 0.352778
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_IN) is 0.138889
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PC) is 0.833333
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PX) is 13.333333
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_NUMBER) is 13.333333
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_DEG) is 90
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_RAD) is 1.570796
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_GRAD) is 100
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_NUMBER) is 90
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_MS) is 200
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_S) is 0.2
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_NUMBER) is 200
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PERCENTAGE) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_MS) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_HZ) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_DEG) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_RGBCOLOR) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_PERCENTAGE) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_PX) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_MS) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_HZ) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_RGBCOLOR) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_PERCENTAGE) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_PX) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_DEG) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_HZ) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_RGBCOLOR) threw exception InvalidAccessError: Failed to execute 'getFloatValue' on 'CSSPrimitiveValue': Failed to obtain a double value..
PASS successfullyParsed is true
TEST COMPLETE
......
......@@ -11,49 +11,45 @@ if (window.testRunner)
description("Testing whether CSSPrimitiveValue.getFloatValue() converts units correctly.");
function getFloatValue(propertyName, unit)
function getFloatValue(nestLevel, propertyName, unit)
{
var result = document.getElementById("test-div").style.getPropertyCSSValue(propertyName).getFloatValue(unit);
return Number(result.toFixed(6));
var value = document.getElementById("test-div").style.getPropertyCSSValue(propertyName);
while (nestLevel--)
value = value[0];
return Number(value.getFloatValue(unit).toFixed(6));
}
function getFirstFloatValueInList(propertyName, unit)
{
var result = document.getElementById("test-div").style.getPropertyCSSValue(propertyName)[0][0].getFloatValue(unit);
return Number(result.toFixed(6));
}
shouldBe("getFloatValue('font-size', CSSPrimitiveValue.CSS_PT)", "10");
shouldBe("getFloatValue('font-size', CSSPrimitiveValue.CSS_MM)", "3.527778");
shouldBe("getFloatValue('font-size', CSSPrimitiveValue.CSS_CM)", "0.352778");
shouldBe("getFloatValue('font-size', CSSPrimitiveValue.CSS_IN)", "0.138889");
shouldBe("getFloatValue('font-size', CSSPrimitiveValue.CSS_PC)", "0.833333");
shouldBe("getFloatValue('font-size', CSSPrimitiveValue.CSS_PX)", "13.333333");
shouldBe("getFloatValue('font-size', CSSPrimitiveValue.CSS_NUMBER)", "13.333333");
shouldBe("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_DEG)", "90");
shouldBe("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_RAD)", "1.570796");
shouldBe("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_GRAD)", "100");
shouldBe("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_NUMBER)", "90");
shouldBe("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_MS)", "200");
shouldBe("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_S)", "0.2");
shouldBe("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_NUMBER)", "200");
shouldBe("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PT)", "10");
shouldBe("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_MM)", "3.527778");
shouldBe("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_CM)", "0.352778");
shouldBe("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_IN)", "0.138889");
shouldBe("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PC)", "0.833333");
shouldBe("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PX)", "13.333333");
shouldBe("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_NUMBER)", "13.333333");
shouldBe("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_DEG)", "90");
shouldBe("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_RAD)", "1.570796");
shouldBe("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_GRAD)", "100");
shouldBe("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_NUMBER)", "90");
shouldBe("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_MS)", "200");
shouldBe("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_S)", "0.2");
shouldBe("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_NUMBER)", "200");
shouldThrow("getFloatValue('font-size', CSSPrimitiveValue.CSS_PERCENTAGE)");
shouldThrow("getFloatValue('font-size', CSSPrimitiveValue.CSS_MS)");
shouldThrow("getFloatValue('font-size', CSSPrimitiveValue.CSS_HZ)");
shouldThrow("getFloatValue('font-size', CSSPrimitiveValue.CSS_DEG)");
shouldThrow("getFloatValue('font-size', CSSPrimitiveValue.CSS_RGBCOLOR)");
shouldThrow("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_PERCENTAGE)");
shouldThrow("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_MS)");
shouldThrow("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_HZ)");
shouldThrow("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_DEG)");
shouldThrow("getFloatValue(0, 'font-size', CSSPrimitiveValue.CSS_RGBCOLOR)");
shouldThrow("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_PERCENTAGE)");
shouldThrow("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_PX)");
shouldThrow("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_MS)");
shouldThrow("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_HZ)");
shouldThrow("getFirstFloatValueInList('-webkit-transform', CSSPrimitiveValue.CSS_RGBCOLOR)");
shouldThrow("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_PERCENTAGE)");
shouldThrow("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_PX)");
shouldThrow("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_MS)");
shouldThrow("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_HZ)");
shouldThrow("getFloatValue(2, '-webkit-transform', CSSPrimitiveValue.CSS_RGBCOLOR)");
shouldThrow("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_PERCENTAGE)");
shouldThrow("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_PX)");
shouldThrow("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_DEG)");
shouldThrow("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_HZ)");
shouldThrow("getFloatValue('-webkit-animation-delay', CSSPrimitiveValue.CSS_RGBCOLOR)");
shouldThrow("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_PERCENTAGE)");
shouldThrow("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_PX)");
shouldThrow("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_DEG)");
shouldThrow("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_HZ)");
shouldThrow("getFloatValue(1, '-webkit-animation-delay', CSSPrimitiveValue.CSS_RGBCOLOR)");
</script>
</body>
......@@ -99,12 +99,8 @@ namespace WebCore {
{
CSS{{animation}}Data& data = state.style()->access{{animation}}s();
data.{{vector}}.clear();
if (value->isValueList()) {
for (CSSValueListIterator i = value; i.hasMore(); i.advance())
data.{{vector}}.append(state.styleMap().mapAnimation{{attribute}}(i.value()));
} else {
data.{{vector}}.append(state.styleMap().mapAnimation{{attribute}}(value));
}
}
{% endmacro %}
{{apply_animation('CSSPropertyWebkitAnimationDelay', 'Delay', 'Animation')}}
......
......@@ -99,8 +99,7 @@ PassRefPtrWillBeRawPtr<AnimationEffect> EffectInput::convert(Element* element, c
String timingFunctionString;
if (keyframeDictionaryVector[i].get("easing", timingFunctionString)) {
RefPtrWillBeRawPtr<CSSValue> timingFunctionValue = BisonCSSParser::parseAnimationTimingFunctionValue(timingFunctionString);
if (timingFunctionValue)
if (RefPtrWillBeRawPtr<CSSValue> timingFunctionValue = BisonCSSParser::parseAnimationTimingFunctionValue(timingFunctionString))
keyframe->setEasing(CSSToStyleMap::mapAnimationTimingFunction(timingFunctionValue.get(), true));
}
......
......@@ -89,9 +89,7 @@ void TimingInput::setPlaybackDirection(Timing& timing, const String& direction)
void TimingInput::setTimingFunction(Timing& timing, const String& timingFunctionString)
{
RefPtrWillBeRawPtr<CSSValue> timingFunctionValue = BisonCSSParser::parseAnimationTimingFunctionValue(timingFunctionString);
if (timingFunctionValue && !timingFunctionValue->isInitialValue())
if (RefPtrWillBeRawPtr<CSSValue> timingFunctionValue = BisonCSSParser::parseAnimationTimingFunctionValue(timingFunctionString))
timing.timingFunction = CSSToStyleMap::mapAnimationTimingFunction(timingFunctionValue.get(), true);
else
timing.timingFunction = Timing::defaults().timingFunction;
......
......@@ -117,10 +117,8 @@ static void resolveKeyframes(StyleResolver* resolver, Element* element, const El
timingFunction = parentStyle->animations()->timingFunctionList()[0];
else if (value->isInheritedValue() || value->isInitialValue())
timingFunction = CSSTimingData::initialTimingFunction();
else if (value->isValueList())
timingFunction = CSSToStyleMap::mapAnimationTimingFunction(toCSSValueList(value)->item(0));
else
timingFunction = CSSToStyleMap::mapAnimationTimingFunction(value);
timingFunction = CSSToStyleMap::mapAnimationTimingFunction(toCSSValueList(value)->item(0));
keyframe->setEasing(timingFunction.release());
} else if (CSSAnimations::isAnimatableProperty(property)) {
keyframe->setPropertyValue(property, CSSAnimatableValueFactory::create(property, *keyframeStyle).get());
......
......@@ -921,7 +921,13 @@ PassRefPtrWillBeRawPtr<CSSValue> BisonCSSParser::parseAnimationTimingFunctionVal
if (!parseValue(style.get(), CSSPropertyTransitionTimingFunction, string, false, HTMLStandardMode, 0))
return nullptr;
return style->getPropertyCSSValue(CSSPropertyTransitionTimingFunction);
RefPtrWillBeRawPtr<CSSValue> value = style->getPropertyCSSValue(CSSPropertyTransitionTimingFunction);
if (!value || value->isInitialValue() || value->isInheritedValue())
return nullptr;
CSSValueList* valueList = toCSSValueList(value.get());
if (valueList->length() > 1)
return nullptr;
return valueList->item(0);
}
bool BisonCSSParser::parseValue(MutableStylePropertySet* declaration, CSSPropertyID propertyID, const String& string, bool important, const Document& document)
......
......@@ -42,7 +42,6 @@
namespace WebCore {
// FIXME: Many of these may not be used.
class AnimationParseContext;
class CSSArrayFunctionValue;
class CSSBorderImageSliceValue;
class CSSPrimitiveValue;
......@@ -136,12 +135,13 @@ private:
PassRefPtrWillBeRawPtr<CSSValue> parseAnimationIterationCount();
PassRefPtrWillBeRawPtr<CSSValue> parseAnimationName();
PassRefPtrWillBeRawPtr<CSSValue> parseAnimationPlayState();
PassRefPtrWillBeRawPtr<CSSValue> parseAnimationProperty(AnimationParseContext&);
PassRefPtrWillBeRawPtr<CSSValue> parseAnimationProperty();
PassRefPtrWillBeRawPtr<CSSValue> parseAnimationTimingFunction();
bool parseWebkitTransformOriginShorthand(RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&, RefPtrWillBeRawPtr<CSSValue>&);
bool parseCubicBezierTimingFunctionValue(CSSParserValueList*& args, double& result);
bool parseAnimationProperty(CSSPropertyID, RefPtrWillBeRawPtr<CSSValue>&, AnimationParseContext&);
PassRefPtrWillBeRawPtr<CSSValue> parseAnimationProperty(CSSPropertyID);
PassRefPtrWillBeRawPtr<CSSValueList> parseAnimationPropertyList(CSSPropertyID);
bool parseTransitionShorthand(CSSPropertyID, bool important);
bool parseAnimationShorthand(CSSPropertyID, bool important);
......
......@@ -391,8 +391,7 @@ PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction(CSSValue* v
// FIXME: We should probably only call into this function with a valid
// single timing function value which isn't initial or inherit. We can
// currently get into here with initial since the parser expands unset
// properties in shorthands to initial and we can get into here with a
// value list via the EffectInput/TimingInput code paths.
// properties in shorthands to initial.
if (value->isPrimitiveValue()) {
CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
......@@ -426,7 +425,7 @@ PassRefPtr<TimingFunction> CSSToStyleMap::mapAnimationTimingFunction(CSSValue* v
return CubicBezierTimingFunction::create(cubicTimingFunction->x1(), cubicTimingFunction->y1(), cubicTimingFunction->x2(), cubicTimingFunction->y2());
}
if (!value->isStepsTimingFunctionValue())
if (value->isInitialValue())
return CSSTimingData::initialTimingFunction();
CSSStepsTimingFunctionValue* stepsTimingFunction = toCSSStepsTimingFunctionValue(value);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment