| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "cc/animation/keyframed_animation_curve.h" |
| 6 |
| 5 #include <stddef.h> | 7 #include <stddef.h> |
| 6 | 8 |
| 7 #include <algorithm> | 9 #include <algorithm> |
| 8 | 10 |
| 9 #include "cc/animation/keyframed_animation_curve.h" | 11 #include "base/memory/ptr_util.h" |
| 10 #include "cc/base/time_util.h" | 12 #include "cc/base/time_util.h" |
| 11 #include "ui/gfx/animation/tween.h" | 13 #include "ui/gfx/animation/tween.h" |
| 12 #include "ui/gfx/geometry/box_f.h" | 14 #include "ui/gfx/geometry/box_f.h" |
| 13 | 15 |
| 14 namespace cc { | 16 namespace cc { |
| 15 | 17 |
| 16 namespace { | 18 namespace { |
| 17 | 19 |
| 18 template <class KeyframeType> | 20 template <class KeyframeType> |
| 19 void InsertKeyframe(scoped_ptr<KeyframeType> keyframe, | 21 void InsertKeyframe(std::unique_ptr<KeyframeType> keyframe, |
| 20 std::vector<scoped_ptr<KeyframeType>>* keyframes) { | 22 std::vector<std::unique_ptr<KeyframeType>>* keyframes) { |
| 21 // Usually, the keyframes will be added in order, so this loop would be | 23 // Usually, the keyframes will be added in order, so this loop would be |
| 22 // unnecessary and we should skip it if possible. | 24 // unnecessary and we should skip it if possible. |
| 23 if (!keyframes->empty() && keyframe->Time() < keyframes->back()->Time()) { | 25 if (!keyframes->empty() && keyframe->Time() < keyframes->back()->Time()) { |
| 24 for (size_t i = 0; i < keyframes->size(); ++i) { | 26 for (size_t i = 0; i < keyframes->size(); ++i) { |
| 25 if (keyframe->Time() < keyframes->at(i)->Time()) { | 27 if (keyframe->Time() < keyframes->at(i)->Time()) { |
| 26 keyframes->insert(keyframes->begin() + i, std::move(keyframe)); | 28 keyframes->insert(keyframes->begin() + i, std::move(keyframe)); |
| 27 return; | 29 return; |
| 28 } | 30 } |
| 29 } | 31 } |
| 30 } | 32 } |
| 31 | 33 |
| 32 keyframes->push_back(std::move(keyframe)); | 34 keyframes->push_back(std::move(keyframe)); |
| 33 } | 35 } |
| 34 | 36 |
| 35 template <typename KeyframeType> | 37 template <typename KeyframeType> |
| 36 base::TimeDelta TransformedAnimationTime( | 38 base::TimeDelta TransformedAnimationTime( |
| 37 const std::vector<scoped_ptr<KeyframeType>>& keyframes, | 39 const std::vector<std::unique_ptr<KeyframeType>>& keyframes, |
| 38 const scoped_ptr<TimingFunction>& timing_function, | 40 const std::unique_ptr<TimingFunction>& timing_function, |
| 39 base::TimeDelta time) { | 41 base::TimeDelta time) { |
| 40 if (timing_function) { | 42 if (timing_function) { |
| 41 base::TimeDelta start_time = keyframes.front()->Time(); | 43 base::TimeDelta start_time = keyframes.front()->Time(); |
| 42 base::TimeDelta duration = | 44 base::TimeDelta duration = |
| 43 keyframes.back()->Time() - keyframes.front()->Time(); | 45 keyframes.back()->Time() - keyframes.front()->Time(); |
| 44 double progress = TimeUtil::Divide(time - start_time, duration); | 46 double progress = TimeUtil::Divide(time - start_time, duration); |
| 45 | 47 |
| 46 time = TimeUtil::Scale(duration, timing_function->GetValue(progress)) + | 48 time = TimeUtil::Scale(duration, timing_function->GetValue(progress)) + |
| 47 start_time; | 49 start_time; |
| 48 } | 50 } |
| 49 | 51 |
| 50 return time; | 52 return time; |
| 51 } | 53 } |
| 52 | 54 |
| 53 template <typename KeyframeType> | 55 template <typename KeyframeType> |
| 54 size_t GetActiveKeyframe(const std::vector<scoped_ptr<KeyframeType>>& keyframes, | 56 size_t GetActiveKeyframe( |
| 55 base::TimeDelta time) { | 57 const std::vector<std::unique_ptr<KeyframeType>>& keyframes, |
| 58 base::TimeDelta time) { |
| 56 DCHECK_GE(keyframes.size(), 2ul); | 59 DCHECK_GE(keyframes.size(), 2ul); |
| 57 size_t i = 0; | 60 size_t i = 0; |
| 58 for (; i < keyframes.size() - 2; ++i) { // Last keyframe is never active. | 61 for (; i < keyframes.size() - 2; ++i) { // Last keyframe is never active. |
| 59 if (time < keyframes[i + 1]->Time()) | 62 if (time < keyframes[i + 1]->Time()) |
| 60 break; | 63 break; |
| 61 } | 64 } |
| 62 | 65 |
| 63 return i; | 66 return i; |
| 64 } | 67 } |
| 65 | 68 |
| 66 template <typename KeyframeType> | 69 template <typename KeyframeType> |
| 67 double TransformedKeyframeProgress( | 70 double TransformedKeyframeProgress( |
| 68 const std::vector<scoped_ptr<KeyframeType>>& keyframes, | 71 const std::vector<std::unique_ptr<KeyframeType>>& keyframes, |
| 69 base::TimeDelta time, | 72 base::TimeDelta time, |
| 70 size_t i) { | 73 size_t i) { |
| 71 double progress = | 74 double progress = |
| 72 TimeUtil::Divide(time - keyframes[i]->Time(), | 75 TimeUtil::Divide(time - keyframes[i]->Time(), |
| 73 keyframes[i + 1]->Time() - keyframes[i]->Time()); | 76 keyframes[i + 1]->Time() - keyframes[i]->Time()); |
| 74 | 77 |
| 75 if (keyframes[i]->timing_function()) { | 78 if (keyframes[i]->timing_function()) { |
| 76 progress = keyframes[i]->timing_function()->GetValue(progress); | 79 progress = keyframes[i]->timing_function()->GetValue(progress); |
| 77 } | 80 } |
| 78 | 81 |
| 79 return progress; | 82 return progress; |
| 80 } | 83 } |
| 81 | 84 |
| 82 } // namespace | 85 } // namespace |
| 83 | 86 |
| 84 Keyframe::Keyframe(base::TimeDelta time, | 87 Keyframe::Keyframe(base::TimeDelta time, |
| 85 scoped_ptr<TimingFunction> timing_function) | 88 std::unique_ptr<TimingFunction> timing_function) |
| 86 : time_(time), timing_function_(std::move(timing_function)) {} | 89 : time_(time), timing_function_(std::move(timing_function)) {} |
| 87 | 90 |
| 88 Keyframe::~Keyframe() {} | 91 Keyframe::~Keyframe() {} |
| 89 | 92 |
| 90 base::TimeDelta Keyframe::Time() const { | 93 base::TimeDelta Keyframe::Time() const { |
| 91 return time_; | 94 return time_; |
| 92 } | 95 } |
| 93 | 96 |
| 94 scoped_ptr<ColorKeyframe> ColorKeyframe::Create( | 97 std::unique_ptr<ColorKeyframe> ColorKeyframe::Create( |
| 95 base::TimeDelta time, | 98 base::TimeDelta time, |
| 96 SkColor value, | 99 SkColor value, |
| 97 scoped_ptr<TimingFunction> timing_function) { | 100 std::unique_ptr<TimingFunction> timing_function) { |
| 98 return make_scoped_ptr( | 101 return base::WrapUnique( |
| 99 new ColorKeyframe(time, value, std::move(timing_function))); | 102 new ColorKeyframe(time, value, std::move(timing_function))); |
| 100 } | 103 } |
| 101 | 104 |
| 102 ColorKeyframe::ColorKeyframe(base::TimeDelta time, | 105 ColorKeyframe::ColorKeyframe(base::TimeDelta time, |
| 103 SkColor value, | 106 SkColor value, |
| 104 scoped_ptr<TimingFunction> timing_function) | 107 std::unique_ptr<TimingFunction> timing_function) |
| 105 : Keyframe(time, std::move(timing_function)), value_(value) {} | 108 : Keyframe(time, std::move(timing_function)), value_(value) {} |
| 106 | 109 |
| 107 ColorKeyframe::~ColorKeyframe() {} | 110 ColorKeyframe::~ColorKeyframe() {} |
| 108 | 111 |
| 109 SkColor ColorKeyframe::Value() const { return value_; } | 112 SkColor ColorKeyframe::Value() const { return value_; } |
| 110 | 113 |
| 111 scoped_ptr<ColorKeyframe> ColorKeyframe::Clone() const { | 114 std::unique_ptr<ColorKeyframe> ColorKeyframe::Clone() const { |
| 112 scoped_ptr<TimingFunction> func; | 115 std::unique_ptr<TimingFunction> func; |
| 113 if (timing_function()) | 116 if (timing_function()) |
| 114 func = timing_function()->Clone(); | 117 func = timing_function()->Clone(); |
| 115 return ColorKeyframe::Create(Time(), Value(), std::move(func)); | 118 return ColorKeyframe::Create(Time(), Value(), std::move(func)); |
| 116 } | 119 } |
| 117 | 120 |
| 118 scoped_ptr<FloatKeyframe> FloatKeyframe::Create( | 121 std::unique_ptr<FloatKeyframe> FloatKeyframe::Create( |
| 119 base::TimeDelta time, | 122 base::TimeDelta time, |
| 120 float value, | 123 float value, |
| 121 scoped_ptr<TimingFunction> timing_function) { | 124 std::unique_ptr<TimingFunction> timing_function) { |
| 122 return make_scoped_ptr( | 125 return base::WrapUnique( |
| 123 new FloatKeyframe(time, value, std::move(timing_function))); | 126 new FloatKeyframe(time, value, std::move(timing_function))); |
| 124 } | 127 } |
| 125 | 128 |
| 126 FloatKeyframe::FloatKeyframe(base::TimeDelta time, | 129 FloatKeyframe::FloatKeyframe(base::TimeDelta time, |
| 127 float value, | 130 float value, |
| 128 scoped_ptr<TimingFunction> timing_function) | 131 std::unique_ptr<TimingFunction> timing_function) |
| 129 : Keyframe(time, std::move(timing_function)), value_(value) {} | 132 : Keyframe(time, std::move(timing_function)), value_(value) {} |
| 130 | 133 |
| 131 FloatKeyframe::~FloatKeyframe() {} | 134 FloatKeyframe::~FloatKeyframe() {} |
| 132 | 135 |
| 133 float FloatKeyframe::Value() const { | 136 float FloatKeyframe::Value() const { |
| 134 return value_; | 137 return value_; |
| 135 } | 138 } |
| 136 | 139 |
| 137 scoped_ptr<FloatKeyframe> FloatKeyframe::Clone() const { | 140 std::unique_ptr<FloatKeyframe> FloatKeyframe::Clone() const { |
| 138 scoped_ptr<TimingFunction> func; | 141 std::unique_ptr<TimingFunction> func; |
| 139 if (timing_function()) | 142 if (timing_function()) |
| 140 func = timing_function()->Clone(); | 143 func = timing_function()->Clone(); |
| 141 return FloatKeyframe::Create(Time(), Value(), std::move(func)); | 144 return FloatKeyframe::Create(Time(), Value(), std::move(func)); |
| 142 } | 145 } |
| 143 | 146 |
| 144 scoped_ptr<TransformKeyframe> TransformKeyframe::Create( | 147 std::unique_ptr<TransformKeyframe> TransformKeyframe::Create( |
| 145 base::TimeDelta time, | 148 base::TimeDelta time, |
| 146 const TransformOperations& value, | 149 const TransformOperations& value, |
| 147 scoped_ptr<TimingFunction> timing_function) { | 150 std::unique_ptr<TimingFunction> timing_function) { |
| 148 return make_scoped_ptr( | 151 return base::WrapUnique( |
| 149 new TransformKeyframe(time, value, std::move(timing_function))); | 152 new TransformKeyframe(time, value, std::move(timing_function))); |
| 150 } | 153 } |
| 151 | 154 |
| 152 TransformKeyframe::TransformKeyframe(base::TimeDelta time, | 155 TransformKeyframe::TransformKeyframe( |
| 153 const TransformOperations& value, | 156 base::TimeDelta time, |
| 154 scoped_ptr<TimingFunction> timing_function) | 157 const TransformOperations& value, |
| 158 std::unique_ptr<TimingFunction> timing_function) |
| 155 : Keyframe(time, std::move(timing_function)), value_(value) {} | 159 : Keyframe(time, std::move(timing_function)), value_(value) {} |
| 156 | 160 |
| 157 TransformKeyframe::~TransformKeyframe() {} | 161 TransformKeyframe::~TransformKeyframe() {} |
| 158 | 162 |
| 159 const TransformOperations& TransformKeyframe::Value() const { | 163 const TransformOperations& TransformKeyframe::Value() const { |
| 160 return value_; | 164 return value_; |
| 161 } | 165 } |
| 162 | 166 |
| 163 scoped_ptr<TransformKeyframe> TransformKeyframe::Clone() const { | 167 std::unique_ptr<TransformKeyframe> TransformKeyframe::Clone() const { |
| 164 scoped_ptr<TimingFunction> func; | 168 std::unique_ptr<TimingFunction> func; |
| 165 if (timing_function()) | 169 if (timing_function()) |
| 166 func = timing_function()->Clone(); | 170 func = timing_function()->Clone(); |
| 167 return TransformKeyframe::Create(Time(), Value(), std::move(func)); | 171 return TransformKeyframe::Create(Time(), Value(), std::move(func)); |
| 168 } | 172 } |
| 169 | 173 |
| 170 scoped_ptr<FilterKeyframe> FilterKeyframe::Create( | 174 std::unique_ptr<FilterKeyframe> FilterKeyframe::Create( |
| 171 base::TimeDelta time, | 175 base::TimeDelta time, |
| 172 const FilterOperations& value, | 176 const FilterOperations& value, |
| 173 scoped_ptr<TimingFunction> timing_function) { | 177 std::unique_ptr<TimingFunction> timing_function) { |
| 174 return make_scoped_ptr( | 178 return base::WrapUnique( |
| 175 new FilterKeyframe(time, value, std::move(timing_function))); | 179 new FilterKeyframe(time, value, std::move(timing_function))); |
| 176 } | 180 } |
| 177 | 181 |
| 178 FilterKeyframe::FilterKeyframe(base::TimeDelta time, | 182 FilterKeyframe::FilterKeyframe(base::TimeDelta time, |
| 179 const FilterOperations& value, | 183 const FilterOperations& value, |
| 180 scoped_ptr<TimingFunction> timing_function) | 184 std::unique_ptr<TimingFunction> timing_function) |
| 181 : Keyframe(time, std::move(timing_function)), value_(value) {} | 185 : Keyframe(time, std::move(timing_function)), value_(value) {} |
| 182 | 186 |
| 183 FilterKeyframe::~FilterKeyframe() {} | 187 FilterKeyframe::~FilterKeyframe() {} |
| 184 | 188 |
| 185 const FilterOperations& FilterKeyframe::Value() const { | 189 const FilterOperations& FilterKeyframe::Value() const { |
| 186 return value_; | 190 return value_; |
| 187 } | 191 } |
| 188 | 192 |
| 189 scoped_ptr<FilterKeyframe> FilterKeyframe::Clone() const { | 193 std::unique_ptr<FilterKeyframe> FilterKeyframe::Clone() const { |
| 190 scoped_ptr<TimingFunction> func; | 194 std::unique_ptr<TimingFunction> func; |
| 191 if (timing_function()) | 195 if (timing_function()) |
| 192 func = timing_function()->Clone(); | 196 func = timing_function()->Clone(); |
| 193 return FilterKeyframe::Create(Time(), Value(), std::move(func)); | 197 return FilterKeyframe::Create(Time(), Value(), std::move(func)); |
| 194 } | 198 } |
| 195 | 199 |
| 196 scoped_ptr<KeyframedColorAnimationCurve> KeyframedColorAnimationCurve:: | 200 std::unique_ptr<KeyframedColorAnimationCurve> |
| 197 Create() { | 201 KeyframedColorAnimationCurve::Create() { |
| 198 return make_scoped_ptr(new KeyframedColorAnimationCurve); | 202 return base::WrapUnique(new KeyframedColorAnimationCurve); |
| 199 } | 203 } |
| 200 | 204 |
| 201 KeyframedColorAnimationCurve::KeyframedColorAnimationCurve() {} | 205 KeyframedColorAnimationCurve::KeyframedColorAnimationCurve() {} |
| 202 | 206 |
| 203 KeyframedColorAnimationCurve::~KeyframedColorAnimationCurve() {} | 207 KeyframedColorAnimationCurve::~KeyframedColorAnimationCurve() {} |
| 204 | 208 |
| 205 void KeyframedColorAnimationCurve::AddKeyframe( | 209 void KeyframedColorAnimationCurve::AddKeyframe( |
| 206 scoped_ptr<ColorKeyframe> keyframe) { | 210 std::unique_ptr<ColorKeyframe> keyframe) { |
| 207 InsertKeyframe(std::move(keyframe), &keyframes_); | 211 InsertKeyframe(std::move(keyframe), &keyframes_); |
| 208 } | 212 } |
| 209 | 213 |
| 210 base::TimeDelta KeyframedColorAnimationCurve::Duration() const { | 214 base::TimeDelta KeyframedColorAnimationCurve::Duration() const { |
| 211 return keyframes_.back()->Time() - keyframes_.front()->Time(); | 215 return keyframes_.back()->Time() - keyframes_.front()->Time(); |
| 212 } | 216 } |
| 213 | 217 |
| 214 scoped_ptr<AnimationCurve> KeyframedColorAnimationCurve::Clone() const { | 218 std::unique_ptr<AnimationCurve> KeyframedColorAnimationCurve::Clone() const { |
| 215 scoped_ptr<KeyframedColorAnimationCurve> to_return = | 219 std::unique_ptr<KeyframedColorAnimationCurve> to_return = |
| 216 KeyframedColorAnimationCurve::Create(); | 220 KeyframedColorAnimationCurve::Create(); |
| 217 for (size_t i = 0; i < keyframes_.size(); ++i) | 221 for (size_t i = 0; i < keyframes_.size(); ++i) |
| 218 to_return->AddKeyframe(keyframes_[i]->Clone()); | 222 to_return->AddKeyframe(keyframes_[i]->Clone()); |
| 219 | 223 |
| 220 if (timing_function_) | 224 if (timing_function_) |
| 221 to_return->SetTimingFunction(timing_function_->Clone()); | 225 to_return->SetTimingFunction(timing_function_->Clone()); |
| 222 | 226 |
| 223 return std::move(to_return); | 227 return std::move(to_return); |
| 224 } | 228 } |
| 225 | 229 |
| 226 SkColor KeyframedColorAnimationCurve::GetValue(base::TimeDelta t) const { | 230 SkColor KeyframedColorAnimationCurve::GetValue(base::TimeDelta t) const { |
| 227 if (t <= keyframes_.front()->Time()) | 231 if (t <= keyframes_.front()->Time()) |
| 228 return keyframes_.front()->Value(); | 232 return keyframes_.front()->Value(); |
| 229 | 233 |
| 230 if (t >= keyframes_.back()->Time()) | 234 if (t >= keyframes_.back()->Time()) |
| 231 return keyframes_.back()->Value(); | 235 return keyframes_.back()->Value(); |
| 232 | 236 |
| 233 t = TransformedAnimationTime(keyframes_, timing_function_, t); | 237 t = TransformedAnimationTime(keyframes_, timing_function_, t); |
| 234 size_t i = GetActiveKeyframe(keyframes_, t); | 238 size_t i = GetActiveKeyframe(keyframes_, t); |
| 235 double progress = TransformedKeyframeProgress(keyframes_, t, i); | 239 double progress = TransformedKeyframeProgress(keyframes_, t, i); |
| 236 | 240 |
| 237 return gfx::Tween::ColorValueBetween( | 241 return gfx::Tween::ColorValueBetween( |
| 238 progress, keyframes_[i]->Value(), keyframes_[i + 1]->Value()); | 242 progress, keyframes_[i]->Value(), keyframes_[i + 1]->Value()); |
| 239 } | 243 } |
| 240 | 244 |
| 241 // KeyframedFloatAnimationCurve | 245 // KeyframedFloatAnimationCurve |
| 242 | 246 |
| 243 scoped_ptr<KeyframedFloatAnimationCurve> KeyframedFloatAnimationCurve:: | 247 std::unique_ptr<KeyframedFloatAnimationCurve> |
| 244 Create() { | 248 KeyframedFloatAnimationCurve::Create() { |
| 245 return make_scoped_ptr(new KeyframedFloatAnimationCurve); | 249 return base::WrapUnique(new KeyframedFloatAnimationCurve); |
| 246 } | 250 } |
| 247 | 251 |
| 248 KeyframedFloatAnimationCurve::KeyframedFloatAnimationCurve() {} | 252 KeyframedFloatAnimationCurve::KeyframedFloatAnimationCurve() {} |
| 249 | 253 |
| 250 KeyframedFloatAnimationCurve::~KeyframedFloatAnimationCurve() {} | 254 KeyframedFloatAnimationCurve::~KeyframedFloatAnimationCurve() {} |
| 251 | 255 |
| 252 void KeyframedFloatAnimationCurve::AddKeyframe( | 256 void KeyframedFloatAnimationCurve::AddKeyframe( |
| 253 scoped_ptr<FloatKeyframe> keyframe) { | 257 std::unique_ptr<FloatKeyframe> keyframe) { |
| 254 InsertKeyframe(std::move(keyframe), &keyframes_); | 258 InsertKeyframe(std::move(keyframe), &keyframes_); |
| 255 } | 259 } |
| 256 | 260 |
| 257 base::TimeDelta KeyframedFloatAnimationCurve::Duration() const { | 261 base::TimeDelta KeyframedFloatAnimationCurve::Duration() const { |
| 258 return keyframes_.back()->Time() - keyframes_.front()->Time(); | 262 return keyframes_.back()->Time() - keyframes_.front()->Time(); |
| 259 } | 263 } |
| 260 | 264 |
| 261 scoped_ptr<AnimationCurve> KeyframedFloatAnimationCurve::Clone() const { | 265 std::unique_ptr<AnimationCurve> KeyframedFloatAnimationCurve::Clone() const { |
| 262 scoped_ptr<KeyframedFloatAnimationCurve> to_return = | 266 std::unique_ptr<KeyframedFloatAnimationCurve> to_return = |
| 263 KeyframedFloatAnimationCurve::Create(); | 267 KeyframedFloatAnimationCurve::Create(); |
| 264 for (size_t i = 0; i < keyframes_.size(); ++i) | 268 for (size_t i = 0; i < keyframes_.size(); ++i) |
| 265 to_return->AddKeyframe(keyframes_[i]->Clone()); | 269 to_return->AddKeyframe(keyframes_[i]->Clone()); |
| 266 | 270 |
| 267 if (timing_function_) | 271 if (timing_function_) |
| 268 to_return->SetTimingFunction(timing_function_->Clone()); | 272 to_return->SetTimingFunction(timing_function_->Clone()); |
| 269 | 273 |
| 270 return std::move(to_return); | 274 return std::move(to_return); |
| 271 } | 275 } |
| 272 | 276 |
| 273 float KeyframedFloatAnimationCurve::GetValue(base::TimeDelta t) const { | 277 float KeyframedFloatAnimationCurve::GetValue(base::TimeDelta t) const { |
| 274 if (t <= keyframes_.front()->Time()) | 278 if (t <= keyframes_.front()->Time()) |
| 275 return keyframes_.front()->Value(); | 279 return keyframes_.front()->Value(); |
| 276 | 280 |
| 277 if (t >= keyframes_.back()->Time()) | 281 if (t >= keyframes_.back()->Time()) |
| 278 return keyframes_.back()->Value(); | 282 return keyframes_.back()->Value(); |
| 279 | 283 |
| 280 t = TransformedAnimationTime(keyframes_, timing_function_, t); | 284 t = TransformedAnimationTime(keyframes_, timing_function_, t); |
| 281 size_t i = GetActiveKeyframe(keyframes_, t); | 285 size_t i = GetActiveKeyframe(keyframes_, t); |
| 282 double progress = TransformedKeyframeProgress(keyframes_, t, i); | 286 double progress = TransformedKeyframeProgress(keyframes_, t, i); |
| 283 | 287 |
| 284 return keyframes_[i]->Value() + | 288 return keyframes_[i]->Value() + |
| 285 (keyframes_[i+1]->Value() - keyframes_[i]->Value()) * progress; | 289 (keyframes_[i+1]->Value() - keyframes_[i]->Value()) * progress; |
| 286 } | 290 } |
| 287 | 291 |
| 288 scoped_ptr<KeyframedTransformAnimationCurve> KeyframedTransformAnimationCurve:: | 292 std::unique_ptr<KeyframedTransformAnimationCurve> |
| 289 Create() { | 293 KeyframedTransformAnimationCurve::Create() { |
| 290 return make_scoped_ptr(new KeyframedTransformAnimationCurve); | 294 return base::WrapUnique(new KeyframedTransformAnimationCurve); |
| 291 } | 295 } |
| 292 | 296 |
| 293 KeyframedTransformAnimationCurve::KeyframedTransformAnimationCurve() {} | 297 KeyframedTransformAnimationCurve::KeyframedTransformAnimationCurve() {} |
| 294 | 298 |
| 295 KeyframedTransformAnimationCurve::~KeyframedTransformAnimationCurve() {} | 299 KeyframedTransformAnimationCurve::~KeyframedTransformAnimationCurve() {} |
| 296 | 300 |
| 297 void KeyframedTransformAnimationCurve::AddKeyframe( | 301 void KeyframedTransformAnimationCurve::AddKeyframe( |
| 298 scoped_ptr<TransformKeyframe> keyframe) { | 302 std::unique_ptr<TransformKeyframe> keyframe) { |
| 299 InsertKeyframe(std::move(keyframe), &keyframes_); | 303 InsertKeyframe(std::move(keyframe), &keyframes_); |
| 300 } | 304 } |
| 301 | 305 |
| 302 base::TimeDelta KeyframedTransformAnimationCurve::Duration() const { | 306 base::TimeDelta KeyframedTransformAnimationCurve::Duration() const { |
| 303 return keyframes_.back()->Time() - keyframes_.front()->Time(); | 307 return keyframes_.back()->Time() - keyframes_.front()->Time(); |
| 304 } | 308 } |
| 305 | 309 |
| 306 scoped_ptr<AnimationCurve> KeyframedTransformAnimationCurve::Clone() const { | 310 std::unique_ptr<AnimationCurve> KeyframedTransformAnimationCurve::Clone() |
| 307 scoped_ptr<KeyframedTransformAnimationCurve> to_return = | 311 const { |
| 312 std::unique_ptr<KeyframedTransformAnimationCurve> to_return = |
| 308 KeyframedTransformAnimationCurve::Create(); | 313 KeyframedTransformAnimationCurve::Create(); |
| 309 for (size_t i = 0; i < keyframes_.size(); ++i) | 314 for (size_t i = 0; i < keyframes_.size(); ++i) |
| 310 to_return->AddKeyframe(keyframes_[i]->Clone()); | 315 to_return->AddKeyframe(keyframes_[i]->Clone()); |
| 311 | 316 |
| 312 if (timing_function_) | 317 if (timing_function_) |
| 313 to_return->SetTimingFunction(timing_function_->Clone()); | 318 to_return->SetTimingFunction(timing_function_->Clone()); |
| 314 | 319 |
| 315 return std::move(to_return); | 320 return std::move(to_return); |
| 316 } | 321 } |
| 317 | 322 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 return false; | 423 return false; |
| 419 float max_scale_for_segment = | 424 float max_scale_for_segment = |
| 420 fmax(std::abs(target_scale_for_segment.x()), | 425 fmax(std::abs(target_scale_for_segment.x()), |
| 421 fmax(std::abs(target_scale_for_segment.y()), | 426 fmax(std::abs(target_scale_for_segment.y()), |
| 422 std::abs(target_scale_for_segment.z()))); | 427 std::abs(target_scale_for_segment.z()))); |
| 423 *max_scale = fmax(*max_scale, max_scale_for_segment); | 428 *max_scale = fmax(*max_scale, max_scale_for_segment); |
| 424 } | 429 } |
| 425 return true; | 430 return true; |
| 426 } | 431 } |
| 427 | 432 |
| 428 scoped_ptr<KeyframedFilterAnimationCurve> KeyframedFilterAnimationCurve:: | 433 std::unique_ptr<KeyframedFilterAnimationCurve> |
| 429 Create() { | 434 KeyframedFilterAnimationCurve::Create() { |
| 430 return make_scoped_ptr(new KeyframedFilterAnimationCurve); | 435 return base::WrapUnique(new KeyframedFilterAnimationCurve); |
| 431 } | 436 } |
| 432 | 437 |
| 433 KeyframedFilterAnimationCurve::KeyframedFilterAnimationCurve() {} | 438 KeyframedFilterAnimationCurve::KeyframedFilterAnimationCurve() {} |
| 434 | 439 |
| 435 KeyframedFilterAnimationCurve::~KeyframedFilterAnimationCurve() {} | 440 KeyframedFilterAnimationCurve::~KeyframedFilterAnimationCurve() {} |
| 436 | 441 |
| 437 void KeyframedFilterAnimationCurve::AddKeyframe( | 442 void KeyframedFilterAnimationCurve::AddKeyframe( |
| 438 scoped_ptr<FilterKeyframe> keyframe) { | 443 std::unique_ptr<FilterKeyframe> keyframe) { |
| 439 InsertKeyframe(std::move(keyframe), &keyframes_); | 444 InsertKeyframe(std::move(keyframe), &keyframes_); |
| 440 } | 445 } |
| 441 | 446 |
| 442 base::TimeDelta KeyframedFilterAnimationCurve::Duration() const { | 447 base::TimeDelta KeyframedFilterAnimationCurve::Duration() const { |
| 443 return keyframes_.back()->Time() - keyframes_.front()->Time(); | 448 return keyframes_.back()->Time() - keyframes_.front()->Time(); |
| 444 } | 449 } |
| 445 | 450 |
| 446 scoped_ptr<AnimationCurve> KeyframedFilterAnimationCurve::Clone() const { | 451 std::unique_ptr<AnimationCurve> KeyframedFilterAnimationCurve::Clone() const { |
| 447 scoped_ptr<KeyframedFilterAnimationCurve> to_return = | 452 std::unique_ptr<KeyframedFilterAnimationCurve> to_return = |
| 448 KeyframedFilterAnimationCurve::Create(); | 453 KeyframedFilterAnimationCurve::Create(); |
| 449 for (size_t i = 0; i < keyframes_.size(); ++i) | 454 for (size_t i = 0; i < keyframes_.size(); ++i) |
| 450 to_return->AddKeyframe(keyframes_[i]->Clone()); | 455 to_return->AddKeyframe(keyframes_[i]->Clone()); |
| 451 | 456 |
| 452 if (timing_function_) | 457 if (timing_function_) |
| 453 to_return->SetTimingFunction(timing_function_->Clone()); | 458 to_return->SetTimingFunction(timing_function_->Clone()); |
| 454 | 459 |
| 455 return std::move(to_return); | 460 return std::move(to_return); |
| 456 } | 461 } |
| 457 | 462 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 473 bool KeyframedFilterAnimationCurve::HasFilterThatMovesPixels() const { | 478 bool KeyframedFilterAnimationCurve::HasFilterThatMovesPixels() const { |
| 474 for (size_t i = 0; i < keyframes_.size(); ++i) { | 479 for (size_t i = 0; i < keyframes_.size(); ++i) { |
| 475 if (keyframes_[i]->Value().HasFilterThatMovesPixels()) { | 480 if (keyframes_[i]->Value().HasFilterThatMovesPixels()) { |
| 476 return true; | 481 return true; |
| 477 } | 482 } |
| 478 } | 483 } |
| 479 return false; | 484 return false; |
| 480 } | 485 } |
| 481 | 486 |
| 482 } // namespace cc | 487 } // namespace cc |
| OLD | NEW |