| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |