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 |