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

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

Issue 2236193002: WIP: Implement CSS transitions on top of InterpolationTypes instead of AnimatableValues (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@_environmentStyle
Patch Set: Created 4 years, 4 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/PairwiseInterpolation.h
diff --git a/third_party/WebKit/Source/core/animation/PairwiseInterpolation.h b/third_party/WebKit/Source/core/animation/PairwiseInterpolation.h
new file mode 100644
index 0000000000000000000000000000000000000000..5043b5af43ea00dc76c128adcc0ddc90747aa315
--- /dev/null
+++ b/third_party/WebKit/Source/core/animation/PairwiseInterpolation.h
@@ -0,0 +1,75 @@
+// 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 PairwiseInterpolation_h
+#define PairwiseInterpolation_h
+
+#include "core/animation/PrimitiveInterpolation.h"
+#include "core/animation/StackableInterpolation.h"
+#include "core/animation/TypedInterpolationValue.h"
+
+namespace blink {
+
+class PairwiseInterpolation : public StackableInterpolation {
+public:
+ static PassRefPtr<PairwiseInterpolation> maybeCreate(const InterpolationType& type, InterpolationValue&& start, InterpolationValue&& end)
+ {
+ PairwiseInterpolationValue merge = type.maybeMergeSingles(start.clone(), end.clone());
+ if (!merge)
+ return nullptr;
+ return adoptRef(new PairwiseInterpolation(type, std::move(start), std::move(end), std::move(merge)));
+ }
+
+ bool isPairwiseInterpolation() const final { return true; }
+
+ PropertyHandle getProperty() const final
+ {
+ return m_property;
+ }
+
+protected:
+ PairwiseInterpolation(const InterpolationType& type, InterpolationValue&& start, InterpolationValue&& end, PairwiseInterpolationValue&& merge)
+ : m_property(type.getProperty())
+ , m_start(TypedInterpolationValue::create(type, std::move(start)))
+ , m_end(TypedInterpolationValue::create(type, std::move(end)))
+ , m_pairwisePrimitiveInterpolation(PairwisePrimitiveInterpolation::create(type, std::move(merge)))
+ , m_currentValue(m_pairwisePrimitiveInterpolation->initialValue())
+ { }
+
+ void interpolateImpl() final
+ {
+ if (m_currentFraction == 0)
+ m_currentValue->mutableValue() = m_start->value().clone();
+ else if (m_currentFraction == 1)
+ m_currentValue->mutableValue() = m_end->value().clone();
+ else
+ m_pairwisePrimitiveInterpolation->interpolateValue(m_currentFraction, m_currentValue);
+ }
+
+ std::unique_ptr<TypedInterpolationValue> maybeConvertUnderlyingValue(const InterpolationEnvironment&) const final
+ {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ const TypedInterpolationValue* ensureValidInterpolation(const InterpolationEnvironment&, const UnderlyingValueOwner&) const final
+ {
+ return m_currentValue.get();
+ }
+
+ double underlyingFraction() const final
+ {
+ return 0;
+ }
+
+ const PropertyHandle m_property;
+ const std::unique_ptr<TypedInterpolationValue> m_start;
+ const std::unique_ptr<TypedInterpolationValue> m_end;
+ const std::unique_ptr<PairwisePrimitiveInterpolation> m_pairwisePrimitiveInterpolation;
+ std::unique_ptr<TypedInterpolationValue> m_currentValue;
+};
+
+} // namespace blink
+
+#endif // PairwiseInterpolation_h

Powered by Google App Engine
This is Rietveld 408576698