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

Side by Side Diff: third_party/WebKit/Source/core/animation/PrimitiveInterpolation.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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PrimitiveInterpolation_h 5 #ifndef PrimitiveInterpolation_h
6 #define PrimitiveInterpolation_h 6 #define PrimitiveInterpolation_h
7 7
8 #include "core/animation/PairwiseInterpolationValue.h"
8 #include "core/animation/TypedInterpolationValue.h" 9 #include "core/animation/TypedInterpolationValue.h"
9 #include "platform/animation/AnimationUtilities.h" 10 #include "platform/animation/AnimationUtilities.h"
10 #include "platform/heap/Handle.h" 11 #include "platform/heap/Handle.h"
11 #include "wtf/PtrUtil.h" 12 #include "wtf/PtrUtil.h"
12 #include "wtf/Vector.h" 13 #include "wtf/Vector.h"
13 #include <cmath> 14 #include <cmath>
14 #include <memory> 15 #include <memory>
15 16
16 namespace blink { 17 namespace blink {
17 18
(...skipping 13 matching lines...) Expand all
31 32
32 protected: 33 protected:
33 PrimitiveInterpolation() { } 34 PrimitiveInterpolation() { }
34 }; 35 };
35 36
36 // Represents a pair of keyframes that are compatible for "smooth" interpolation eg. "0px" and "100px". 37 // Represents a pair of keyframes that are compatible for "smooth" interpolation eg. "0px" and "100px".
37 class PairwisePrimitiveInterpolation : public PrimitiveInterpolation { 38 class PairwisePrimitiveInterpolation : public PrimitiveInterpolation {
38 public: 39 public:
39 ~PairwisePrimitiveInterpolation() override { } 40 ~PairwisePrimitiveInterpolation() override { }
40 41
41 static std::unique_ptr<PairwisePrimitiveInterpolation> create(const Interpol ationType& type, std::unique_ptr<InterpolableValue> start, std::unique_ptr<Inter polableValue> end, PassRefPtr<NonInterpolableValue> nonInterpolableValue) 42 static std::unique_ptr<PairwisePrimitiveInterpolation> create(const Interpol ationType& type, PairwiseInterpolationValue&& pairwiseInterpolationValue)
42 { 43 {
43 return wrapUnique(new PairwisePrimitiveInterpolation(type, std::move(sta rt), std::move(end), nonInterpolableValue)); 44 return wrapUnique(new PairwisePrimitiveInterpolation(type, std::move(pai rwiseInterpolationValue)));
44 } 45 }
45 46
46 const InterpolationType& type() const { return m_type; } 47 const InterpolationType& type() const { return m_type; }
47 48
48 std::unique_ptr<TypedInterpolationValue> initialValue() const 49 std::unique_ptr<TypedInterpolationValue> initialValue() const
49 { 50 {
50 return TypedInterpolationValue::create(m_type, m_start->clone(), m_nonIn terpolableValue); 51 return TypedInterpolationValue::create(m_type, InterpolationValue(m_pair wise.startInterpolableValue->clone(), m_pairwise.nonInterpolableValue));
51 }
52
53 private:
54 PairwisePrimitiveInterpolation(const InterpolationType& type, std::unique_pt r<InterpolableValue> start, std::unique_ptr<InterpolableValue> end, PassRefPtr<N onInterpolableValue> nonInterpolableValue)
55 : m_type(type)
56 , m_start(std::move(start))
57 , m_end(std::move(end))
58 , m_nonInterpolableValue(nonInterpolableValue)
59 {
60 ASSERT(m_start);
61 ASSERT(m_end);
62 } 52 }
63 53
64 void interpolateValue(double fraction, std::unique_ptr<TypedInterpolationVal ue>& result) const final 54 void interpolateValue(double fraction, std::unique_ptr<TypedInterpolationVal ue>& result) const final
65 { 55 {
66 ASSERT(result); 56 DCHECK(result);
67 ASSERT(&result->type() == &m_type); 57 DCHECK(&result->type() == &m_type);
68 ASSERT(result->getNonInterpolableValue() == m_nonInterpolableValue.get() ); 58 DCHECK(result->getNonInterpolableValue() == m_pairwise.nonInterpolableVa lue.get());
69 m_start->interpolate(*m_end, fraction, *result->mutableValue().interpola bleValue); 59 m_pairwise.startInterpolableValue->interpolate(
60 *m_pairwise.endInterpolableValue, fraction, *result->mutableValue(). interpolableValue);
61 }
62
63 private:
64 PairwisePrimitiveInterpolation(const InterpolationType& type, PairwiseInterp olationValue&& pairwiseInterpolationValue)
65 : m_type(type)
66 , m_pairwise(std::move(pairwiseInterpolationValue))
67 {
68 DCHECK(m_pairwise);
70 } 69 }
71 70
72 double interpolateUnderlyingFraction(double start, double end, double fracti on) const final { return blend(start, end, fraction); } 71 double interpolateUnderlyingFraction(double start, double end, double fracti on) const final { return blend(start, end, fraction); }
73 72
74 const InterpolationType& m_type; 73 const InterpolationType& m_type;
75 std::unique_ptr<InterpolableValue> m_start; 74 PairwiseInterpolationValue m_pairwise;
76 std::unique_ptr<InterpolableValue> m_end;
77 RefPtr<NonInterpolableValue> m_nonInterpolableValue;
78 }; 75 };
79 76
80 // Represents a pair of incompatible keyframes that fall back to 50% flip behavi our eg. "auto" and "0px". 77 // Represents a pair of incompatible keyframes that fall back to 50% flip behavi our eg. "auto" and "0px".
81 class FlipPrimitiveInterpolation : public PrimitiveInterpolation { 78 class FlipPrimitiveInterpolation : public PrimitiveInterpolation {
82 public: 79 public:
83 ~FlipPrimitiveInterpolation() override { } 80 ~FlipPrimitiveInterpolation() override { }
84 81
85 static std::unique_ptr<FlipPrimitiveInterpolation> create(std::unique_ptr<Ty pedInterpolationValue> start, std::unique_ptr<TypedInterpolationValue> end) 82 static std::unique_ptr<FlipPrimitiveInterpolation> create(std::unique_ptr<Ty pedInterpolationValue> start, std::unique_ptr<TypedInterpolationValue> end)
86 { 83 {
87 return wrapUnique(new FlipPrimitiveInterpolation(std::move(start), std:: move(end))); 84 return wrapUnique(new FlipPrimitiveInterpolation(std::move(start), std:: move(end)));
(...skipping 21 matching lines...) Expand all
109 bool isFlip() const final { return true; } 106 bool isFlip() const final { return true; }
110 107
111 std::unique_ptr<TypedInterpolationValue> m_start; 108 std::unique_ptr<TypedInterpolationValue> m_start;
112 std::unique_ptr<TypedInterpolationValue> m_end; 109 std::unique_ptr<TypedInterpolationValue> m_end;
113 mutable double m_lastFraction; 110 mutable double m_lastFraction;
114 }; 111 };
115 112
116 } // namespace blink 113 } // namespace blink
117 114
118 #endif // PrimitiveInterpolation_h 115 #endif // PrimitiveInterpolation_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698