| Index: Source/core/animation/InterpolationType.h
|
| diff --git a/Source/core/animation/InterpolationType.h b/Source/core/animation/InterpolationType.h
|
| index 1962d8dbce584061fb83655190c75de9044b25cb..b32232d5f5d09eeec32fa15a382579b7021a4e96 100644
|
| --- a/Source/core/animation/InterpolationType.h
|
| +++ b/Source/core/animation/InterpolationType.h
|
| @@ -31,20 +31,47 @@ public:
|
| };
|
| using ConversionCheckers = WillBeHeapVector<OwnPtrWillBeMember<ConversionChecker>>;
|
|
|
| - virtual PassOwnPtrWillBeRawPtr<PairwisePrimitiveInterpolation> maybeConvertPairwise(const CSSPropertySpecificKeyframe& startKeyframe, const CSSPropertySpecificKeyframe& endKeyframe, const StyleResolverState*, ConversionCheckers&) const
|
| + virtual PassOwnPtrWillBeRawPtr<PairwisePrimitiveInterpolation> maybeConvertPairwise(const CSSPropertySpecificKeyframe& startKeyframe, const CSSPropertySpecificKeyframe& endKeyframe, const StyleResolverState* state, ConversionCheckers& conversionCheckers) const
|
| {
|
| - return nullptr;
|
| + OwnPtrWillBeRawPtr<InterpolationValue> startValue = maybeConvertSingle(startKeyframe, state, conversionCheckers);
|
| + if (!startValue)
|
| + return nullptr;
|
| + OwnPtrWillBeRawPtr<InterpolationValue> endValue = maybeConvertSingle(endKeyframe, state, conversionCheckers);
|
| + if (!endValue)
|
| + return nullptr;
|
| + return PairwisePrimitiveInterpolation::create(*this, startValue->m_interpolableValue.release(), endValue->m_interpolableValue.release(), startValue->m_nonInterpolableValue.release());
|
| }
|
|
|
| - virtual PassOwnPtrWillBeRawPtr<InterpolationValue> maybeConvertSingle(const CSSPropertySpecificKeyframe&, const StyleResolverState*, ConversionCheckers&) const = 0;
|
| + virtual PassOwnPtrWillBeRawPtr<InterpolationValue> maybeConvertSingle(const CSSPropertySpecificKeyframe& keyframe, const StyleResolverState* state, ConversionCheckers& conversionCheckers) const
|
| + {
|
| + const CSSValue* value = keyframe.value();
|
| + if (!value)
|
| + return maybeConvertNeutral();
|
| + if (value->isInitialValue() || (value->isUnsetValue() && !CSSPropertyMetadata::isInheritedProperty(m_property)))
|
| + return maybeConvertInitial();
|
| + if (value->isInheritedValue() || (value->isUnsetValue() && CSSPropertyMetadata::isInheritedProperty(m_property)))
|
| + return maybeConvertInherit(state, conversionCheckers);
|
| + return maybeConvertValue(*value, state, conversionCheckers);
|
| + }
|
| +
|
| + virtual PassOwnPtrWillBeRawPtr<InterpolationValue> maybeConvertUnderlyingValue(const StyleResolverState&) const = 0;
|
|
|
| virtual void apply(const InterpolableValue&, const NonInterpolableValue*, StyleResolverState&) const = 0;
|
|
|
| + // Implement reference equality checking via pointer equality checking as these are singletons
|
| + bool operator==(const InterpolationType& other) const { return this == &other; }
|
| + bool operator!=(const InterpolationType& other) const { return this != &other; }
|
| +
|
| protected:
|
| InterpolationType(CSSPropertyID property)
|
| : m_property(property)
|
| { }
|
|
|
| + virtual PassOwnPtrWillBeRawPtr<InterpolationValue> maybeConvertNeutral() const { ASSERT_NOT_REACHED(); return nullptr; }
|
| + virtual PassOwnPtrWillBeRawPtr<InterpolationValue> maybeConvertInitial() const { ASSERT_NOT_REACHED(); return nullptr; }
|
| + virtual PassOwnPtrWillBeRawPtr<InterpolationValue> maybeConvertInherit(const StyleResolverState* state, ConversionCheckers& conversionCheckers) const { ASSERT_NOT_REACHED(); return nullptr; }
|
| + virtual PassOwnPtrWillBeRawPtr<InterpolationValue> maybeConvertValue(const CSSValue& value, const StyleResolverState* state, ConversionCheckers& conversionCheckers) const { ASSERT_NOT_REACHED(); return nullptr; }
|
| +
|
| const CSSPropertyID m_property;
|
| };
|
|
|
|
|