Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Unified Diff: third_party/WebKit/Source/core/animation/TransitionInterpolation.h

Issue 2650133002: Add TransitionInterpolation class for CSS Transition refactor (Closed)
Patch Set: lint Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/animation/TransitionInterpolation.h
diff --git a/third_party/WebKit/Source/core/animation/TransitionInterpolation.h b/third_party/WebKit/Source/core/animation/TransitionInterpolation.h
new file mode 100644
index 0000000000000000000000000000000000000000..393cefcd28bc65944494bb12ebb7e492f292f084
--- /dev/null
+++ b/third_party/WebKit/Source/core/animation/TransitionInterpolation.h
@@ -0,0 +1,89 @@
+// Copyright 2017 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 TransitionInterpolation_h
+#define TransitionInterpolation_h
+
+#include "core/animation/CompositorAnimations.h"
+#include "core/animation/Interpolation.h"
+#include "core/animation/InterpolationType.h"
+
+namespace blink {
+
+class StyleResolverState;
+class InterpolationType;
+
+class TransitionInterpolation : public Interpolation {
+ public:
+ static PassRefPtr<TransitionInterpolation> create(
+ const PropertyHandle& property,
+ const InterpolationType& type,
+ InterpolationValue&& start,
+ InterpolationValue&& end,
+ const RefPtr<AnimatableValue> compositorStart,
+ const RefPtr<AnimatableValue> compositorEnd) {
+ return adoptRef(new TransitionInterpolation(
+ property, type, std::move(start), std::move(end),
+ std::move(compositorStart), std::move(compositorEnd)));
+ }
+
+ void apply(StyleResolverState&) const;
+
+ bool isTransitionInterpolation() const final { return true; }
+
+ const PropertyHandle& getProperty() const final { return m_property; }
+
+ std::unique_ptr<TypedInterpolationValue> getInterpolatedValue() const;
+
+ RefPtr<AnimatableValue> getInterpolatedCompositorValue() const;
+
+ void interpolate(int iteration, double fraction) final;
+
+ protected:
+ TransitionInterpolation(const PropertyHandle& property,
+ const InterpolationType& type,
+ InterpolationValue&& start,
+ InterpolationValue&& end,
+ const RefPtr<AnimatableValue> compositorStart,
+ const RefPtr<AnimatableValue> compositorEnd)
+ : m_property(property),
+ m_type(type),
+ m_start(std::move(start)),
+ m_end(std::move(end)),
+ m_merge(type.maybeMergeSingles(m_start.clone(), m_end.clone())),
+ m_compositorStart(std::move(compositorStart)),
+ m_compositorEnd(std::move(compositorEnd)),
+ m_cachedInterpolableValue(m_merge.startInterpolableValue->clone()) {
+ DCHECK(m_merge);
+ DCHECK_EQ(
+ m_compositorStart && m_compositorEnd,
+ CompositorAnimations::isCompositableProperty(m_property.cssProperty()));
+ }
+
+ private:
+ const InterpolableValue& currentInterpolableValue() const;
+ NonInterpolableValue* currentNonInterpolableValue() const;
+
+ const PropertyHandle m_property;
+ const InterpolationType& m_type;
+ const InterpolationValue m_start;
+ const InterpolationValue m_end;
+ const PairwiseInterpolationValue m_merge;
+ const RefPtr<AnimatableValue> m_compositorStart;
+ const RefPtr<AnimatableValue> m_compositorEnd;
+
+ mutable double m_cachedFraction = 0;
+ mutable int m_cachedIteration = 0;
+ mutable std::unique_ptr<InterpolableValue> m_cachedInterpolableValue;
+};
+
+DEFINE_TYPE_CASTS(TransitionInterpolation,
+ Interpolation,
+ value,
+ value->isTransitionInterpolation(),
+ value.isTransitionInterpolation());
+
+} // namespace blink
+
+#endif

Powered by Google App Engine
This is Rietveld 408576698