Index: Source/core/animation/css/CSSAnimatableValueFactory.cpp |
diff --git a/Source/core/animation/css/CSSAnimatableValueFactory.cpp b/Source/core/animation/css/CSSAnimatableValueFactory.cpp |
index 14536319e105387e46af7048e7e751c84ecd5da3..db12ed300d860fda91494d537be0821458d0d645 100644 |
--- a/Source/core/animation/css/CSSAnimatableValueFactory.cpp |
+++ b/Source/core/animation/css/CSSAnimatableValueFactory.cpp |
@@ -102,6 +102,22 @@ inline static PassRefPtr<AnimatableValue> createFromDouble(double value, Animata |
return AnimatableDouble::create(value, constraint); |
} |
+static PassRefPtr<AnimatableValue> createFromLengthOrNumber(const LengthOrNumber& lengthOrNumber, const RenderStyle* style) |
+{ |
+ if (lengthOrNumber.isNumber()) |
+ return createFromDouble(lengthOrNumber.number()); |
+ return createFromLength(lengthOrNumber.length(), style); |
+} |
+ |
+inline static PassRefPtr<AnimatableValue> createFromLengthOrNumberBox(const LengthOrNumberBox& lengthOrNumberBox, const RenderStyle* style) |
+{ |
+ return AnimatableLengthBox::create( |
+ createFromLengthOrNumber(lengthOrNumberBox.left(), style), |
+ createFromLengthOrNumber(lengthOrNumberBox.right(), style), |
+ createFromLengthOrNumber(lengthOrNumberBox.top(), style), |
+ createFromLengthOrNumber(lengthOrNumberBox.bottom(), style)); |
+} |
+ |
inline static PassRefPtr<AnimatableValue> createFromLengthBox(const LengthBox& lengthBox, const RenderStyle* style) |
{ |
return AnimatableLengthBox::create( |
@@ -229,13 +245,13 @@ PassRefPtr<AnimatableValue> CSSAnimatableValueFactory::create(CSSPropertyID prop |
case CSSPropertyBorderBottomWidth: |
return createFromDouble(style->borderBottomWidth()); |
case CSSPropertyBorderImageOutset: |
- return createFromLengthBox(style->borderImageOutset(), style); |
+ return createFromLengthOrNumberBox(style->borderImageOutset(), style); |
case CSSPropertyBorderImageSlice: |
return createFromLengthBox(style->borderImageSlices(), style); |
case CSSPropertyBorderImageSource: |
return createFromStyleImage(style->borderImageSource()); |
case CSSPropertyBorderImageWidth: |
- return createFromLengthBox(style->borderImageWidth(), style); |
+ return createFromLengthOrNumberBox(style->borderImageWidth(), style); |
case CSSPropertyBorderLeftColor: |
return createFromColor(property, style); |
case CSSPropertyBorderLeftWidth: |
@@ -376,13 +392,13 @@ PassRefPtr<AnimatableValue> CSSAnimatableValueFactory::create(CSSPropertyID prop |
case CSSPropertyWebkitFilter: |
return AnimatableFilterOperations::create(style->filter()); |
case CSSPropertyWebkitMaskBoxImageOutset: |
- return createFromLengthBox(style->maskBoxImageOutset(), style); |
+ return createFromLengthOrNumberBox(style->maskBoxImageOutset(), style); |
case CSSPropertyWebkitMaskBoxImageSlice: |
return createFromLengthBoxAndBool(style->maskBoxImageSlices(), style->maskBoxImageSlicesFill(), style); |
case CSSPropertyWebkitMaskBoxImageSource: |
return createFromStyleImage(style->maskBoxImageSource()); |
case CSSPropertyWebkitMaskBoxImageWidth: |
- return createFromLengthBox(style->maskBoxImageWidth(), style); |
+ return createFromLengthOrNumberBox(style->maskBoxImageWidth(), style); |
case CSSPropertyWebkitMaskImage: |
return createFromFillLayers<CSSPropertyWebkitMaskImage>(style->maskLayers(), style); |
case CSSPropertyWebkitMaskPositionX: |