| 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 <algorithm> | 5 #include <algorithm> |
| 6 | 6 |
| 7 #include "cc/animation/keyframed_animation_curve.h" | 7 #include "cc/animation/keyframed_animation_curve.h" |
| 8 #include "cc/base/time_util.h" | 8 #include "cc/base/time_util.h" |
| 9 #include "ui/gfx/animation/tween.h" | 9 #include "ui/gfx/animation/tween.h" |
| 10 #include "ui/gfx/geometry/box_f.h" | 10 #include "ui/gfx/geometry/box_f.h" |
| 11 | 11 |
| 12 namespace cc { | 12 namespace cc { |
| 13 | 13 |
| 14 namespace { | 14 namespace { |
| 15 | 15 |
| 16 template <class KeyframeType> | 16 template <class KeyframeType> |
| 17 void InsertKeyframe(scoped_ptr<KeyframeType> keyframe, | 17 void InsertKeyframe(scoped_ptr<KeyframeType> keyframe, |
| 18 ScopedPtrVector<KeyframeType>* keyframes) { | 18 std::vector<scoped_ptr<KeyframeType>>* keyframes) { |
| 19 // Usually, the keyframes will be added in order, so this loop would be | 19 // Usually, the keyframes will be added in order, so this loop would be |
| 20 // unnecessary and we should skip it if possible. | 20 // unnecessary and we should skip it if possible. |
| 21 if (!keyframes->empty() && keyframe->Time() < keyframes->back()->Time()) { | 21 if (!keyframes->empty() && keyframe->Time() < keyframes->back()->Time()) { |
| 22 for (size_t i = 0; i < keyframes->size(); ++i) { | 22 for (size_t i = 0; i < keyframes->size(); ++i) { |
| 23 if (keyframe->Time() < keyframes->at(i)->Time()) { | 23 if (keyframe->Time() < keyframes->at(i)->Time()) { |
| 24 keyframes->insert(keyframes->begin() + i, keyframe.Pass()); | 24 keyframes->insert(keyframes->begin() + i, keyframe.Pass()); |
| 25 return; | 25 return; |
| 26 } | 26 } |
| 27 } | 27 } |
| 28 } | 28 } |
| 29 | 29 |
| 30 keyframes->push_back(keyframe.Pass()); | 30 keyframes->push_back(keyframe.Pass()); |
| 31 } | 31 } |
| 32 | 32 |
| 33 template <typename KeyframeType> | 33 template <typename KeyframeType> |
| 34 base::TimeDelta TransformedAnimationTime( | 34 base::TimeDelta TransformedAnimationTime( |
| 35 const ScopedPtrVector<KeyframeType>& keyframes, | 35 const std::vector<scoped_ptr<KeyframeType>>& keyframes, |
| 36 const scoped_ptr<TimingFunction>& timing_function, | 36 const scoped_ptr<TimingFunction>& timing_function, |
| 37 base::TimeDelta time) { | 37 base::TimeDelta time) { |
| 38 if (timing_function) { | 38 if (timing_function) { |
| 39 base::TimeDelta start_time = keyframes.front()->Time(); | 39 base::TimeDelta start_time = keyframes.front()->Time(); |
| 40 base::TimeDelta duration = | 40 base::TimeDelta duration = |
| 41 keyframes.back()->Time() - keyframes.front()->Time(); | 41 keyframes.back()->Time() - keyframes.front()->Time(); |
| 42 double progress = TimeUtil::Divide(time - start_time, duration); | 42 double progress = TimeUtil::Divide(time - start_time, duration); |
| 43 | 43 |
| 44 time = TimeUtil::Scale(duration, timing_function->GetValue(progress)) + | 44 time = TimeUtil::Scale(duration, timing_function->GetValue(progress)) + |
| 45 start_time; | 45 start_time; |
| 46 } | 46 } |
| 47 | 47 |
| 48 return time; | 48 return time; |
| 49 } | 49 } |
| 50 | 50 |
| 51 template <typename KeyframeType> | 51 template <typename KeyframeType> |
| 52 size_t GetActiveKeyframe(const ScopedPtrVector<KeyframeType>& keyframes, | 52 size_t GetActiveKeyframe(const std::vector<scoped_ptr<KeyframeType>>& keyframes, |
| 53 base::TimeDelta time) { | 53 base::TimeDelta time) { |
| 54 DCHECK_GE(keyframes.size(), 2ul); | 54 DCHECK_GE(keyframes.size(), 2ul); |
| 55 size_t i = 0; | 55 size_t i = 0; |
| 56 for (; i < keyframes.size() - 2; ++i) { // Last keyframe is never active. | 56 for (; i < keyframes.size() - 2; ++i) { // Last keyframe is never active. |
| 57 if (time < keyframes[i + 1]->Time()) | 57 if (time < keyframes[i + 1]->Time()) |
| 58 break; | 58 break; |
| 59 } | 59 } |
| 60 | 60 |
| 61 return i; | 61 return i; |
| 62 } | 62 } |
| 63 | 63 |
| 64 template <typename KeyframeType> | 64 template <typename KeyframeType> |
| 65 double TransformedKeyframeProgress( | 65 double TransformedKeyframeProgress( |
| 66 const ScopedPtrVector<KeyframeType>& keyframes, | 66 const std::vector<scoped_ptr<KeyframeType>>& keyframes, |
| 67 base::TimeDelta time, | 67 base::TimeDelta time, |
| 68 size_t i) { | 68 size_t i) { |
| 69 double progress = | 69 double progress = |
| 70 TimeUtil::Divide(time - keyframes[i]->Time(), | 70 TimeUtil::Divide(time - keyframes[i]->Time(), |
| 71 keyframes[i + 1]->Time() - keyframes[i]->Time()); | 71 keyframes[i + 1]->Time() - keyframes[i]->Time()); |
| 72 | 72 |
| 73 if (keyframes[i]->timing_function()) { | 73 if (keyframes[i]->timing_function()) { |
| 74 progress = keyframes[i]->timing_function()->GetValue(progress); | 74 progress = keyframes[i]->timing_function()->GetValue(progress); |
| 75 } | 75 } |
| 76 | 76 |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 bool KeyframedFilterAnimationCurve::HasFilterThatMovesPixels() const { | 476 bool KeyframedFilterAnimationCurve::HasFilterThatMovesPixels() const { |
| 477 for (size_t i = 0; i < keyframes_.size(); ++i) { | 477 for (size_t i = 0; i < keyframes_.size(); ++i) { |
| 478 if (keyframes_[i]->Value().HasFilterThatMovesPixels()) { | 478 if (keyframes_[i]->Value().HasFilterThatMovesPixels()) { |
| 479 return true; | 479 return true; |
| 480 } | 480 } |
| 481 } | 481 } |
| 482 return false; | 482 return false; |
| 483 } | 483 } |
| 484 | 484 |
| 485 } // namespace cc | 485 } // namespace cc |
| OLD | NEW |