Chromium Code Reviews| 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) |