Index: Source/core/animation/DoubleStyleInterpolation.cpp |
diff --git a/Source/core/animation/DoubleStyleInterpolation.cpp b/Source/core/animation/DoubleStyleInterpolation.cpp |
index b4eb68d700d47ec30f4ade3f7a31072d3b7a9998..a807f04100186581fa00b568285c3e38f886cdd3 100644 |
--- a/Source/core/animation/DoubleStyleInterpolation.cpp |
+++ b/Source/core/animation/DoubleStyleInterpolation.cpp |
@@ -27,39 +27,44 @@ PassOwnPtrWillBeRawPtr<InterpolableValue> DoubleStyleInterpolation::doubleToInte |
return nullptr; |
} |
-PassRefPtrWillBeRawPtr<CSSValue> DoubleStyleInterpolation::interpolableValueToDouble(InterpolableValue* value, bool isNumber, InterpolationRange clamp) |
+static double clampToRange(double value, InterpolationRange clamp) |
{ |
- ASSERT(value->isNumber()); |
- double doubleValue = toInterpolableNumber(value)->value(); |
- |
switch (clamp) { |
case RangeAll: |
// Do nothing |
break; |
case RangeZeroToOne: |
- doubleValue = clampTo<float>(doubleValue, 0, 1); |
+ value = clampTo<float>(value, 0, 1); |
break; |
case RangeOpacityFIXME: |
- doubleValue = clampTo<float>(doubleValue, 0, nextafterf(1, 0)); |
+ value = clampTo<float>(value, 0, nextafterf(1, 0)); |
break; |
case RangeFloor: |
- doubleValue = floor(doubleValue); |
+ value = floor(value); |
break; |
case RangeRound: |
- doubleValue = round(doubleValue); |
+ value = round(value); |
break; |
case RangeRoundGreaterThanOrEqualToOne: |
- doubleValue = clampTo<float>(round(doubleValue), 1); |
+ value = clampTo<float>(round(value), 1); |
break; |
case RangeGreaterThanOrEqualToOne: |
- doubleValue = clampTo<float>(doubleValue, 1); |
+ value = clampTo<float>(value, 1); |
break; |
case RangeNonNegative: |
- doubleValue = clampTo<float>(doubleValue, 0); |
+ value = clampTo<float>(value, 0); |
break; |
default: |
ASSERT_NOT_REACHED(); |
} |
+ return value; |
+} |
+ |
+PassRefPtrWillBeRawPtr<CSSValue> DoubleStyleInterpolation::interpolableValueToDouble(InterpolableValue* value, bool isNumber, InterpolationRange clamp) |
+{ |
+ ASSERT(value->isNumber()); |
+ double doubleValue = clampToRange(toInterpolableNumber(value)->value(), clamp); |
+ |
if (isNumber) |
return CSSPrimitiveValue::create(doubleValue, CSSPrimitiveValue::CSS_NUMBER); |
return CSSPrimitiveValue::create(doubleValue, CSSPrimitiveValue::CSS_DEG); |
@@ -80,6 +85,19 @@ DEFINE_TRACE(DoubleStyleInterpolation) |
StyleInterpolation::trace(visitor); |
} |
+PassOwnPtrWillBeRawPtr<InterpolableValue> DoubleStyleInterpolation::toInterpolableValue(const CSSValue& value, CSSPropertyID property) |
Eric Willigers
2015/06/23 06:50:48
I am not certain I understand how these DoubleStyl
soonm
2015/06/24 00:26:44
I added these interface to make ListStyleInterpola
|
+{ |
+ ASSERT(canCreateFrom(value)); |
+ return doubleToInterpolableValue(value); |
+} |
+ |
+PassRefPtrWillBeRawPtr<CSSPrimitiveValue> DoubleStyleInterpolation::fromInterpolableValue(const InterpolableValue& value, InterpolationRange range) |
+{ |
+ // TODO Get the correct angle or double unit type |
+ double doubleValue = clampToRange(toInterpolableNumber(value).value(), range); |
+ return CSSPrimitiveValue::create(doubleValue, CSSPrimitiveValue::CSS_NUMBER); |
+} |
+ |
namespace { |
bool extractMotionRotation(const CSSValue& value, float* rotation, MotionRotationType* rotationType) |