| Index: Source/core/animation/PrimitiveInterpolation.h
|
| diff --git a/Source/core/animation/PrimitiveInterpolation.h b/Source/core/animation/PrimitiveInterpolation.h
|
| index 8ae0d755ac3d5cde75d892f3c04ece8d28880dc7..885bae0620e8a7de2c54edb304f747cbd9eb9c3b 100644
|
| --- a/Source/core/animation/PrimitiveInterpolation.h
|
| +++ b/Source/core/animation/PrimitiveInterpolation.h
|
| @@ -6,6 +6,7 @@
|
| #define PrimitiveInterpolation_h
|
|
|
| #include "core/animation/InterpolationValue.h"
|
| +#include "platform/animation/AnimationUtilities.h"
|
| #include "platform/heap/Handle.h"
|
| #include "wtf/Vector.h"
|
| #include <cmath>
|
| @@ -20,7 +21,9 @@ class PrimitiveInterpolation : public NoBaseWillBeGarbageCollectedFinalized<Prim
|
| public:
|
| virtual ~PrimitiveInterpolation() { }
|
|
|
| - virtual void interpolate(double fraction, OwnPtrWillBeMember<InterpolationValue>& result) const = 0;
|
| + virtual void interpolateValue(double fraction, OwnPtrWillBeMember<InterpolationValue>& result) const = 0;
|
| + virtual double interpolateUnderlyingFraction(double start, double end, double fraction) const = 0;
|
| + virtual bool isFlip() const { return false; }
|
|
|
| DEFINE_INLINE_VIRTUAL_TRACE() { }
|
| };
|
| @@ -56,7 +59,7 @@ private:
|
| , m_nonInterpolableValue(nonInterpolableValue)
|
| { }
|
|
|
| - void interpolate(double fraction, OwnPtrWillBeMember<InterpolationValue>& result) const final
|
| + void interpolateValue(double fraction, OwnPtrWillBeMember<InterpolationValue>& result) const final
|
| {
|
| ASSERT(result);
|
| ASSERT(&result->type() == &m_type);
|
| @@ -64,6 +67,8 @@ private:
|
| m_start->interpolate(*m_end, fraction, result->interpolableValue());
|
| }
|
|
|
| + double interpolateUnderlyingFraction(double start, double end, double fraction) const final { return blend(start, end, fraction); }
|
| +
|
| const InterpolationType& m_type;
|
| OwnPtrWillBeMember<InterpolableValue> m_start;
|
| OwnPtrWillBeMember<InterpolableValue> m_end;
|
| @@ -92,20 +97,22 @@ private:
|
| : m_start(start)
|
| , m_end(end)
|
| , m_lastFraction(std::numeric_limits<double>::quiet_NaN())
|
| - {
|
| - ASSERT(m_start);
|
| - ASSERT(m_end);
|
| - }
|
| + { }
|
|
|
| - void interpolate(double fraction, OwnPtrWillBeMember<InterpolationValue>& result) const final
|
| + void interpolateValue(double fraction, OwnPtrWillBeMember<InterpolationValue>& result) const final
|
| {
|
| // TODO(alancutter): Remove this optimisation once Oilpan is default.
|
| if (!std::isnan(m_lastFraction) && (fraction < 0.5) == (m_lastFraction < 0.5))
|
| return;
|
| - result = ((fraction < 0.5) ? m_start : m_end)->clone();
|
| + const InterpolationValue* side = ((fraction < 0.5) ? m_start : m_end).get();
|
| + result = side ? side->clone() : nullptr;
|
| m_lastFraction = fraction;
|
| }
|
|
|
| + double interpolateUnderlyingFraction(double start, double end, double fraction) const final { return fraction < 0.5 ? start : end; }
|
| +
|
| + bool isFlip() const final { return true; }
|
| +
|
| OwnPtrWillBeMember<InterpolationValue> m_start;
|
| OwnPtrWillBeMember<InterpolationValue> m_end;
|
| mutable double m_lastFraction;
|
|
|