OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "config.h" | 5 #include "config.h" |
6 #include "core/animation/InterpolableValue.h" | 6 #include "core/animation/InterpolableValue.h" |
7 | 7 |
8 namespace blink { | 8 namespace blink { |
9 | 9 |
10 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(InterpolableValue); | 10 DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(InterpolableValue); |
(...skipping 30 matching lines...) Expand all Loading... |
41 ASSERT(toList.m_size == m_size); | 41 ASSERT(toList.m_size == m_size); |
42 ASSERT(resultList.m_size == m_size); | 42 ASSERT(resultList.m_size == m_size); |
43 | 43 |
44 for (size_t i = 0; i < m_size; i++) { | 44 for (size_t i = 0; i < m_size; i++) { |
45 ASSERT(m_values[i]); | 45 ASSERT(m_values[i]); |
46 ASSERT(toList.m_values[i]); | 46 ASSERT(toList.m_values[i]); |
47 m_values[i]->interpolate(*(toList.m_values[i]), progress, *(resultList.m
_values[i])); | 47 m_values[i]->interpolate(*(toList.m_values[i]), progress, *(resultList.m
_values[i])); |
48 } | 48 } |
49 } | 49 } |
50 | 50 |
51 void InterpolableNumber::add(const InterpolableValue& rhs, InterpolableValue& re
sult) const | 51 void InterpolableNumber::scaleAndAdd(double scale, const InterpolableValue& othe
r) |
52 { | 52 { |
53 const InterpolableNumber& rhsNumber = toInterpolableNumber(rhs); | 53 m_value = m_value * scale + toInterpolableNumber(other).m_value; |
54 InterpolableNumber& resultNumber = toInterpolableNumber(result); | |
55 | |
56 resultNumber.m_value = m_value + rhsNumber.m_value; | |
57 } | 54 } |
58 | 55 |
59 void InterpolableNumber::multiply(double scalar, InterpolableValue& result) cons
t | 56 void InterpolableList::scaleAndAdd(double scale, const InterpolableValue& other) |
60 { | 57 { |
61 InterpolableNumber& resultNumber = toInterpolableNumber(result); | 58 const InterpolableList& otherList = toInterpolableList(other); |
62 | 59 ASSERT(otherList.m_size == m_size); |
63 resultNumber.m_value = scalar * m_value; | 60 for (size_t i = 0; i < m_size; i++) |
64 } | 61 m_values[i]->scaleAndAdd(scale, *otherList.m_values[i]); |
65 | |
66 void InterpolableBool::add(const InterpolableValue& rhs, InterpolableValue& resu
lt) const | |
67 { | |
68 const InterpolableBool& rhsBool = toInterpolableBool(rhs); | |
69 InterpolableBool& resultBool = toInterpolableBool(result); | |
70 | |
71 resultBool.m_value = m_value || rhsBool.m_value; | |
72 } | |
73 | |
74 void InterpolableList::add(const InterpolableValue& rhs, InterpolableValue& resu
lt) const | |
75 { | |
76 const InterpolableList& rhsList = toInterpolableList(rhs); | |
77 InterpolableList& resultList = toInterpolableList(result); | |
78 | |
79 ASSERT(rhsList.m_size == m_size); | |
80 ASSERT(resultList.m_size == m_size); | |
81 | |
82 for (size_t i = 0; i < m_size; i++) { | |
83 ASSERT(m_values[i]); | |
84 ASSERT(rhsList.m_values[i]); | |
85 m_values[i]->add(*(rhsList.m_values[i]), *(resultList.m_values[i])); | |
86 } | |
87 } | |
88 | |
89 void InterpolableList::multiply(double scalar, InterpolableValue& result) const | |
90 { | |
91 InterpolableList& resultList = toInterpolableList(result); | |
92 | |
93 ASSERT(resultList.m_size == m_size); | |
94 | |
95 for (size_t i = 0; i < m_size; i++) { | |
96 ASSERT(m_values[i]); | |
97 m_values[i]->multiply(scalar, *(resultList.m_values[i])); | |
98 } | |
99 } | 62 } |
100 | 63 |
101 DEFINE_TRACE(InterpolableList) | 64 DEFINE_TRACE(InterpolableList) |
102 { | 65 { |
103 visitor->trace(m_values); | 66 visitor->trace(m_values); |
104 InterpolableValue::trace(visitor); | 67 InterpolableValue::trace(visitor); |
105 } | 68 } |
106 | 69 |
107 void InterpolableAnimatableValue::interpolate(const InterpolableValue& to, const
double progress, InterpolableValue& result) const | 70 void InterpolableAnimatableValue::interpolate(const InterpolableValue& to, const
double progress, InterpolableValue& result) const |
108 { | 71 { |
109 const InterpolableAnimatableValue& toValue = toInterpolableAnimatableValue(t
o); | 72 const InterpolableAnimatableValue& toValue = toInterpolableAnimatableValue(t
o); |
110 InterpolableAnimatableValue& resultValue = toInterpolableAnimatableValue(res
ult); | 73 InterpolableAnimatableValue& resultValue = toInterpolableAnimatableValue(res
ult); |
111 if (progress == 0) | 74 if (progress == 0) |
112 resultValue.m_value = m_value; | 75 resultValue.m_value = m_value; |
113 if (progress == 1) | 76 if (progress == 1) |
114 resultValue.m_value = toValue.m_value; | 77 resultValue.m_value = toValue.m_value; |
115 resultValue.m_value = AnimatableValue::interpolate(m_value.get(), toValue.m_
value.get(), progress); | 78 resultValue.m_value = AnimatableValue::interpolate(m_value.get(), toValue.m_
value.get(), progress); |
116 } | 79 } |
117 | 80 |
118 DEFINE_TRACE(InterpolableAnimatableValue) | 81 DEFINE_TRACE(InterpolableAnimatableValue) |
119 { | 82 { |
120 visitor->trace(m_value); | 83 visitor->trace(m_value); |
121 InterpolableValue::trace(visitor); | 84 InterpolableValue::trace(visitor); |
122 } | 85 } |
123 | 86 |
124 } | 87 } |
OLD | NEW |