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 #ifndef CC_ANIMATION_ANIMATION_H_ | 5 #ifndef CC_ANIMATION_ANIMATION_H_ |
6 #define CC_ANIMATION_ANIMATION_H_ | 6 #define CC_ANIMATION_ANIMATION_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/time/time.h" | |
10 #include "cc/base/cc_export.h" | 11 #include "cc/base/cc_export.h" |
11 | 12 |
12 namespace cc { | 13 namespace cc { |
13 | 14 |
14 class AnimationCurve; | 15 class AnimationCurve; |
15 | 16 |
16 // An Animation contains all the state required to play an AnimationCurve. | 17 // An Animation contains all the state required to play an AnimationCurve. |
17 // Specifically, the affected property, the run state (paused, finished, etc.), | 18 // Specifically, the affected property, the run state (paused, finished, etc.), |
18 // loop count, last pause time, and the total time spent paused. | 19 // loop count, last pause time, and the total time spent paused. |
19 class CC_EXPORT Animation { | 20 class CC_EXPORT Animation { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
53 int group_id, | 54 int group_id, |
54 TargetProperty target_property); | 55 TargetProperty target_property); |
55 | 56 |
56 virtual ~Animation(); | 57 virtual ~Animation(); |
57 | 58 |
58 int id() const { return id_; } | 59 int id() const { return id_; } |
59 int group() const { return group_; } | 60 int group() const { return group_; } |
60 TargetProperty target_property() const { return target_property_; } | 61 TargetProperty target_property() const { return target_property_; } |
61 | 62 |
62 RunState run_state() const { return run_state_; } | 63 RunState run_state() const { return run_state_; } |
63 void SetRunState(RunState run_state, double monotonic_time); | 64 void SetRunState(RunState run_state, base::TimeTicks monotonic_time); |
64 | 65 |
65 // This is the number of times that the animation will play. If this | 66 // This is the number of times that the animation will play. If this |
66 // value is zero the animation will not play. If it is negative, then | 67 // value is zero the animation will not play. If it is negative, then |
67 // the animation will loop indefinitely. | 68 // the animation will loop indefinitely. |
68 int iterations() const { return iterations_; } | 69 int iterations() const { return iterations_; } |
69 void set_iterations(int n) { iterations_ = n; } | 70 void set_iterations(int n) { iterations_ = n; } |
70 | 71 |
71 double start_time() const { return start_time_; } | 72 base::TimeTicks start_time() const { return start_time_; } |
72 void set_start_time(double monotonic_time) { start_time_ = monotonic_time; } | 73 double ticks_inseconds(base::TimeTicks base_time) const { |
enne (OOO)
2014/04/11 14:41:10
I don't think this merits a member function. Just
| |
73 bool has_set_start_time() const { return !!start_time_; } | 74 return (base_time - base::TimeTicks()).InSecondsF(); |
75 } | |
76 double delta_inseconds(base::TimeDelta delta) const { | |
enne (OOO)
2014/04/11 14:41:10
This doesn't need to be a member function either.
| |
77 return delta.InSecondsF(); | |
78 } | |
79 void set_start_time(base::TimeTicks monotonic_time) { | |
80 start_time_ = monotonic_time; | |
81 } | |
82 bool has_set_start_time() const { return (start_time_ != base::TimeTicks()); } | |
74 | 83 |
75 double time_offset() const { return time_offset_; } | 84 base::TimeDelta time_offset() const { return time_offset_; } |
76 void set_time_offset(double monotonic_time) { time_offset_ = monotonic_time; } | 85 void set_time_offset(base::TimeDelta monotonic_time) { |
86 time_offset_ = monotonic_time; | |
87 } | |
77 | 88 |
78 void Suspend(double monotonic_time); | 89 void Suspend(base::TimeTicks monotonic_time); |
79 void Resume(double monotonic_time); | 90 void Resume(base::TimeTicks monotonic_time); |
80 | 91 |
81 // If alternates_direction is true, on odd numbered iterations we reverse the | 92 // If alternates_direction is true, on odd numbered iterations we reverse the |
82 // curve. | 93 // curve. |
83 bool alternates_direction() const { return alternates_direction_; } | 94 bool alternates_direction() const { return alternates_direction_; } |
84 void set_alternates_direction(bool alternates) { | 95 void set_alternates_direction(bool alternates) { |
85 alternates_direction_ = alternates; | 96 alternates_direction_ = alternates; |
86 } | 97 } |
87 | 98 |
88 bool IsFinishedAt(double monotonic_time) const; | 99 bool IsFinishedAt(base::TimeTicks monotonic_time) const; |
89 bool is_finished() const { | 100 bool is_finished() const { |
90 return run_state_ == Finished || | 101 return run_state_ == Finished || |
91 run_state_ == Aborted || | 102 run_state_ == Aborted || |
92 run_state_ == WaitingForDeletion; | 103 run_state_ == WaitingForDeletion; |
93 } | 104 } |
94 | 105 |
95 AnimationCurve* curve() { return curve_.get(); } | 106 AnimationCurve* curve() { return curve_.get(); } |
96 const AnimationCurve* curve() const { return curve_.get(); } | 107 const AnimationCurve* curve() const { return curve_.get(); } |
97 | 108 |
98 // If this is true, even if the animation is running, it will not be tickable | 109 // If this is true, even if the animation is running, it will not be tickable |
(...skipping 10 matching lines...) Expand all Loading... | |
109 // event sent by the corresponding impl animation has been received. | 120 // event sent by the corresponding impl animation has been received. |
110 bool received_finished_event() const { | 121 bool received_finished_event() const { |
111 return received_finished_event_; | 122 return received_finished_event_; |
112 } | 123 } |
113 void set_received_finished_event(bool received_finished_event) { | 124 void set_received_finished_event(bool received_finished_event) { |
114 received_finished_event_ = received_finished_event; | 125 received_finished_event_ = received_finished_event; |
115 } | 126 } |
116 | 127 |
117 // Takes the given absolute time, and using the start time and the number | 128 // Takes the given absolute time, and using the start time and the number |
118 // of iterations, returns the relative time in the current iteration. | 129 // of iterations, returns the relative time in the current iteration. |
119 double TrimTimeToCurrentIteration(double monotonic_time) const; | 130 double TrimTimeToCurrentIteration(base::TimeTicks monotonic_time) const; |
120 | 131 |
121 scoped_ptr<Animation> CloneAndInitialize(RunState initial_run_state) const; | 132 scoped_ptr<Animation> CloneAndInitialize(RunState initial_run_state) const; |
133 | |
122 bool is_controlling_instance() const { return is_controlling_instance_; } | 134 bool is_controlling_instance() const { return is_controlling_instance_; } |
123 | 135 |
124 void PushPropertiesTo(Animation* other) const; | 136 void PushPropertiesTo(Animation* other) const; |
125 | 137 |
126 void set_is_impl_only(bool is_impl_only) { is_impl_only_ = is_impl_only; } | 138 void set_is_impl_only(bool is_impl_only) { is_impl_only_ = is_impl_only; } |
127 bool is_impl_only() const { return is_impl_only_; } | 139 bool is_impl_only() const { return is_impl_only_; } |
128 | 140 |
129 private: | 141 private: |
130 Animation(scoped_ptr<AnimationCurve> curve, | 142 Animation(scoped_ptr<AnimationCurve> curve, |
131 int animation_id, | 143 int animation_id, |
132 int group_id, | 144 int group_id, |
133 TargetProperty target_property); | 145 TargetProperty target_property); |
134 | 146 |
135 scoped_ptr<AnimationCurve> curve_; | 147 scoped_ptr<AnimationCurve> curve_; |
136 | 148 |
137 // IDs are not necessarily unique. | 149 // IDs are not necessarily unique. |
138 int id_; | 150 int id_; |
139 | 151 |
140 // Animations that must be run together are called 'grouped' and have the same | 152 // Animations that must be run together are called 'grouped' and have the same |
141 // group id. Grouped animations are guaranteed to start at the same time and | 153 // group id. Grouped animations are guaranteed to start at the same time and |
142 // no other animations may animate any of the group's target properties until | 154 // no other animations may animate any of the group's target properties until |
143 // all animations in the group have finished animating. Note: an active | 155 // all animations in the group have finished animating. Note: an active |
144 // animation's group id and target property uniquely identify that animation. | 156 // animation's group id and target property uniquely identify that animation. |
145 int group_; | 157 int group_; |
146 | 158 |
147 TargetProperty target_property_; | 159 TargetProperty target_property_; |
148 RunState run_state_; | 160 RunState run_state_; |
149 int iterations_; | 161 int iterations_; |
150 double start_time_; | 162 base::TimeTicks start_time_; |
151 bool alternates_direction_; | 163 bool alternates_direction_; |
152 | 164 |
153 // The time offset effectively pushes the start of the animation back in time. | 165 // The time offset effectively pushes the start of the animation back in time. |
154 // This is used for resuming paused animations -- an animation is added with a | 166 // This is used for resuming paused animations -- an animation is added with a |
155 // non-zero time offset, causing the animation to skip ahead to the desired | 167 // non-zero time offset, causing the animation to skip ahead to the desired |
156 // point in time. | 168 // point in time. |
157 double time_offset_; | 169 base::TimeDelta time_offset_; |
158 | 170 |
159 bool needs_synchronized_start_time_; | 171 bool needs_synchronized_start_time_; |
160 bool received_finished_event_; | 172 bool received_finished_event_; |
161 | 173 |
162 // When an animation is suspended, it behaves as if it is paused and it also | 174 // When an animation is suspended, it behaves as if it is paused and it also |
163 // ignores all run state changes until it is resumed. This is used for testing | 175 // ignores all run state changes until it is resumed. This is used for testing |
164 // purposes. | 176 // purposes. |
165 bool suspended_; | 177 bool suspended_; |
166 | 178 |
167 // These are used in TrimTimeToCurrentIteration to account for time | 179 // These are used in TrimTimeToCurrentIteration to account for time |
168 // spent while paused. This is not included in AnimationState since it | 180 // spent while paused. This is not included in AnimationState since it |
169 // there is absolutely no need for clients of this controller to know | 181 // there is absolutely no need for clients of this controller to know |
170 // about these values. | 182 // about these values. |
171 double pause_time_; | 183 base::TimeTicks pause_time_; |
172 double total_paused_time_; | 184 base::TimeTicks total_paused_time_; |
enne (OOO)
2014/04/11 14:41:10
total_paused_time_ seems like it should be a delta
| |
173 | 185 |
174 // Animations lead dual lives. An active animation will be conceptually owned | 186 // Animations lead dual lives. An active animation will be conceptually owned |
175 // by two controllers, one on the impl thread and one on the main. In reality, | 187 // by two controllers, one on the impl thread and one on the main. In reality, |
176 // there will be two separate Animation instances for the same animation. They | 188 // there will be two separate Animation instances for the same animation. They |
177 // will have the same group id and the same target property (these two values | 189 // will have the same group id and the same target property (these two values |
178 // uniquely identify an animation). The instance on the impl thread is the | 190 // uniquely identify an animation). The instance on the impl thread is the |
179 // instance that ultimately controls the values of the animating layer and so | 191 // instance that ultimately controls the values of the animating layer and so |
180 // we will refer to it as the 'controlling instance'. | 192 // we will refer to it as the 'controlling instance'. |
181 bool is_controlling_instance_; | 193 bool is_controlling_instance_; |
182 | 194 |
183 bool is_impl_only_; | 195 bool is_impl_only_; |
184 | 196 |
185 DISALLOW_COPY_AND_ASSIGN(Animation); | 197 DISALLOW_COPY_AND_ASSIGN(Animation); |
186 }; | 198 }; |
187 | 199 |
188 } // namespace cc | 200 } // namespace cc |
189 | 201 |
190 #endif // CC_ANIMATION_ANIMATION_H_ | 202 #endif // CC_ANIMATION_ANIMATION_H_ |
OLD | NEW |