Index: third_party/WebKit/Source/core/animation/TransitionEffectModel.h |
diff --git a/third_party/WebKit/Source/core/animation/TransitionEffectModel.h b/third_party/WebKit/Source/core/animation/TransitionEffectModel.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d19874b4d1d07c1b17aca3001202ecf582e0488c |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/animation/TransitionEffectModel.h |
@@ -0,0 +1,63 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef TransitionEffectModel_h |
+#define TransitionEffectModel_h |
+ |
+#include "core/animation/EffectModel.h" |
+#include "core/animation/PairwiseInterpolation.h" |
+#include "platform/animation/TimingFunction.h" |
+ |
+namespace blink { |
+ |
+class Element; |
+class TransitionEffectModelTest; |
+ |
+class TransitionEffectModel : public EffectModel { |
+public: |
+ static TransitionEffectModel* create(PassRefPtr<PairwiseInterpolation> pairwiseInterpolation, double delayOffset, PassRefPtr<TimingFunction> timingFunction) |
+ { |
+ return new TransitionEffectModel(pairwiseInterpolation, delayOffset, timingFunction); |
+ } |
+ |
+private: |
+ TransitionEffectModel(PassRefPtr<PairwiseInterpolation> pairwiseInterpolation, double delayOffset, PassRefPtr<TimingFunction> timingFunction) |
+ : m_interpolation(pairwiseInterpolation) |
+ , m_delayOffset(delayOffset) |
+ , m_timingFunction(timingFunction) |
+ { |
+ DCHECK(delayOffset >= 0 && delayOffset < 1); |
+ } |
+ |
+ bool affects(PropertyHandle property) const final |
+ { |
+ return m_interpolation->getProperty() == property; |
+ } |
+ |
+ bool isTransitionEffectModel() const final { return true; } |
+ |
+ void sampleImpl(int iteration, double fraction, double iterationDuration, Vector<RefPtr<Interpolation>>& result) const final |
+ { |
+ double delayedFraction = 0; |
+ if (fraction > m_delayOffset) { |
+ delayedFraction = (fraction - m_delayOffset) / (1 - m_delayOffset); |
+ } |
+ delayedFraction = m_timingFunction->evaluate(delayedFraction, iterationDuration); |
+ m_interpolation->interpolate(0, delayedFraction); |
+ if (result.isEmpty()) { |
+ result.append(m_interpolation); |
+ } else { |
+ result[0] = m_interpolation; |
+ result.shrink(1); |
+ } |
+ } |
+ |
+ const RefPtr<PairwiseInterpolation> m_interpolation; |
+ const double m_delayOffset; |
+ RefPtr<TimingFunction> m_timingFunction; |
+}; |
+ |
+} // namespace blink |
+ |
+#endif // TransitionEffectModel_h |