| 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 "base/time/time.h" | 
| 11 #include "cc/base/cc_export.h" | 11 #include "cc/base/cc_export.h" | 
| 12 | 12 | 
| 13 namespace cc { | 13 namespace cc { | 
| 14 | 14 | 
| 15 class AnimationCurve; | 15 class AnimationCurve; | 
| 16 | 16 | 
| 17 // An Animation contains all the state required to play an AnimationCurve. | 17 // An Animation contains all the state required to play an AnimationCurve. | 
| 18 // Specifically, the affected property, the run state (paused, finished, etc.), | 18 // Specifically, the affected property, the run state (paused, finished, etc.), | 
| 19 // loop count, last pause time, and the total time spent paused. | 19 // loop count, last pause time, and the total time spent paused. | 
| 20 class CC_EXPORT Animation { | 20 class CC_EXPORT Animation { | 
| 21  public: | 21  public: | 
| 22   // Animations begin in the 'WaitingForTargetAvailability' state. An Animation | 22   // Animations begin in the 'WAITING_FOR_TARGET_AVAILABILITY' state. An | 
| 23   // waiting for target availibility will run as soon as its target property | 23   // Animation waiting for target availibility will run as soon as its target | 
| 24   // is free (and all the animations animating with it are also able to run). | 24   // property is free (and all the animations animating with it are also able to | 
| 25   // When this time arrives, the controller will move the animation into the | 25   // run). When this time arrives, the controller will move the animation into | 
| 26   // Starting state, and then into the Running state. Running animations may | 26   // the STARTING state, and then into the RUNNING state. RUNNING animations may | 
| 27   // toggle between Running and Paused, and may be stopped by moving into either | 27   // toggle between RUNNING and PAUSED, and may be stopped by moving into either | 
| 28   // the Aborted or Finished states. A Finished animation was allowed to run to | 28   // the ABORTED or FINISHED states. A FINISHED animation was allowed to run to | 
| 29   // completion, but an Aborted animation was not. | 29   // completion, but an ABORTED animation was not. | 
| 30   enum RunState { | 30   enum RunState { | 
| 31     WaitingForTargetAvailability = 0, | 31     WAITING_FOR_TARGET_AVAILABILITY = 0, | 
| 32     WaitingForDeletion, | 32     WAITING_FOR_DELETION, | 
| 33     Starting, | 33     STARTING, | 
| 34     Running, | 34     RUNNING, | 
| 35     Paused, | 35     PAUSED, | 
| 36     Finished, | 36     FINISHED, | 
| 37     Aborted, | 37     ABORTED, | 
| 38     // This sentinel must be last. | 38     // This sentinel must be last. | 
| 39     RunStateEnumSize | 39     LAST_RUN_STATE = ABORTED | 
| 40   }; | 40   }; | 
| 41 | 41 | 
| 42   enum TargetProperty { | 42   enum TargetProperty { | 
| 43     Transform = 0, | 43     TRANSFORM = 0, | 
| 44     Opacity, | 44     OPACITY, | 
| 45     Filter, | 45     FILTER, | 
| 46     ScrollOffset, | 46     SCROLL_OFFSET, | 
| 47     BackgroundColor, | 47     BACKGROUND_COLOR, | 
| 48     // This sentinel must be last. | 48     // This sentinel must be last. | 
| 49     TargetPropertyEnumSize | 49     LAST_TARGET_PROPERTY = BACKGROUND_COLOR | 
| 50   }; | 50   }; | 
| 51 | 51 | 
| 52   enum Direction { Normal, Reverse, Alternate, AlternateReverse }; | 52   enum Direction { | 
|  | 53     DIRECTION_NORMAL, | 
|  | 54     DIRECTION_REVERSE, | 
|  | 55     DIRECTION_ALTERNATE, | 
|  | 56     DIRECTION_ALTERNATE_REVERSE | 
|  | 57   }; | 
| 53 | 58 | 
| 54   enum FillMode { | 59   enum FillMode { | 
| 55     FillModeNone, | 60     FILL_MODE_NONE, | 
| 56     FillModeForwards, | 61     FILL_MODE_FORWARDS, | 
| 57     FillModeBackwards, | 62     FILL_MODE_BACKWARDS, | 
| 58     FillModeBoth | 63     FILL_MODE_BOTH | 
| 59   }; | 64   }; | 
| 60 | 65 | 
| 61   static scoped_ptr<Animation> Create(scoped_ptr<AnimationCurve> curve, | 66   static scoped_ptr<Animation> Create(scoped_ptr<AnimationCurve> curve, | 
| 62                                       int animation_id, | 67                                       int animation_id, | 
| 63                                       int group_id, | 68                                       int group_id, | 
| 64                                       TargetProperty target_property); | 69                                       TargetProperty target_property); | 
| 65 | 70 | 
| 66   virtual ~Animation(); | 71   virtual ~Animation(); | 
| 67 | 72 | 
| 68   int id() const { return id_; } | 73   int id() const { return id_; } | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 104   FillMode fill_mode() { return fill_mode_; } | 109   FillMode fill_mode() { return fill_mode_; } | 
| 105   void set_fill_mode(FillMode fill_mode) { fill_mode_ = fill_mode; } | 110   void set_fill_mode(FillMode fill_mode) { fill_mode_ = fill_mode; } | 
| 106 | 111 | 
| 107   double playback_rate() { return playback_rate_; } | 112   double playback_rate() { return playback_rate_; } | 
| 108   void set_playback_rate(double playback_rate) { | 113   void set_playback_rate(double playback_rate) { | 
| 109     playback_rate_ = playback_rate; | 114     playback_rate_ = playback_rate; | 
| 110   } | 115   } | 
| 111 | 116 | 
| 112   bool IsFinishedAt(base::TimeTicks monotonic_time) const; | 117   bool IsFinishedAt(base::TimeTicks monotonic_time) const; | 
| 113   bool is_finished() const { | 118   bool is_finished() const { | 
| 114     return run_state_ == Finished || | 119     return run_state_ == FINISHED || run_state_ == ABORTED || | 
| 115         run_state_ == Aborted || | 120            run_state_ == WAITING_FOR_DELETION; | 
| 116         run_state_ == WaitingForDeletion; |  | 
| 117   } | 121   } | 
| 118 | 122 | 
| 119   bool InEffect(base::TimeTicks monotonic_time) const; | 123   bool InEffect(base::TimeTicks monotonic_time) const; | 
| 120 | 124 | 
| 121   AnimationCurve* curve() { return curve_.get(); } | 125   AnimationCurve* curve() { return curve_.get(); } | 
| 122   const AnimationCurve* curve() const { return curve_.get(); } | 126   const AnimationCurve* curve() const { return curve_.get(); } | 
| 123 | 127 | 
| 124   // If this is true, even if the animation is running, it will not be tickable | 128   // If this is true, even if the animation is running, it will not be tickable | 
| 125   // until it is given a start time. This is true for animations running on the | 129   // until it is given a start time. This is true for animations running on the | 
| 126   // main thread. | 130   // main thread. | 
| 127   bool needs_synchronized_start_time() const { | 131   bool needs_synchronized_start_time() const { | 
| 128     return needs_synchronized_start_time_; | 132     return needs_synchronized_start_time_; | 
| 129   } | 133   } | 
| 130   void set_needs_synchronized_start_time(bool needs_synchronized_start_time) { | 134   void set_needs_synchronized_start_time(bool needs_synchronized_start_time) { | 
| 131     needs_synchronized_start_time_ = needs_synchronized_start_time; | 135     needs_synchronized_start_time_ = needs_synchronized_start_time; | 
| 132   } | 136   } | 
| 133 | 137 | 
| 134   // This is true for animations running on the main thread when the Finished | 138   // This is true for animations running on the main thread when the FINISHED | 
| 135   // event sent by the corresponding impl animation has been received. | 139   // event sent by the corresponding impl animation has been received. | 
| 136   bool received_finished_event() const { | 140   bool received_finished_event() const { | 
| 137     return received_finished_event_; | 141     return received_finished_event_; | 
| 138   } | 142   } | 
| 139   void set_received_finished_event(bool received_finished_event) { | 143   void set_received_finished_event(bool received_finished_event) { | 
| 140     received_finished_event_ = received_finished_event; | 144     received_finished_event_ = received_finished_event; | 
| 141   } | 145   } | 
| 142 | 146 | 
| 143   // Takes the given absolute time, and using the start time and the number | 147   // Takes the given absolute time, and using the start time and the number | 
| 144   // of iterations, returns the relative time in the current iteration. | 148   // of iterations, returns the relative time in the current iteration. | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 220   // uniquely identify an animation). The instance on the impl thread is the | 224   // uniquely identify an animation). The instance on the impl thread is the | 
| 221   // instance that ultimately controls the values of the animating layer and so | 225   // instance that ultimately controls the values of the animating layer and so | 
| 222   // we will refer to it as the 'controlling instance'. | 226   // we will refer to it as the 'controlling instance'. | 
| 223   bool is_controlling_instance_; | 227   bool is_controlling_instance_; | 
| 224 | 228 | 
| 225   bool is_impl_only_; | 229   bool is_impl_only_; | 
| 226 | 230 | 
| 227   // When pushed from a main-thread controller to a compositor-thread | 231   // When pushed from a main-thread controller to a compositor-thread | 
| 228   // controller, an animation will initially only affect pending observers | 232   // controller, an animation will initially only affect pending observers | 
| 229   // (corresponding to layers in the pending tree). Animations that only | 233   // (corresponding to layers in the pending tree). Animations that only | 
| 230   // affect pending observers are able to reach the Starting state and tick | 234   // affect pending observers are able to reach the STARTING state and tick | 
| 231   // pending observers, but cannot proceed any further and do not tick active | 235   // pending observers, but cannot proceed any further and do not tick active | 
| 232   // observers. After activation, such animations affect both kinds of observers | 236   // observers. After activation, such animations affect both kinds of observers | 
| 233   // and are able to proceed past the Starting state. When the removal of | 237   // and are able to proceed past the STARTING state. When the removal of | 
| 234   // an animation is pushed from a main-thread controller to a | 238   // an animation is pushed from a main-thread controller to a | 
| 235   // compositor-thread controller, this initially only makes the animation | 239   // compositor-thread controller, this initially only makes the animation | 
| 236   // stop affecting pending observers. After activation, such animations no | 240   // stop affecting pending observers. After activation, such animations no | 
| 237   // longer affect any observers, and are deleted. | 241   // longer affect any observers, and are deleted. | 
| 238   bool affects_active_observers_; | 242   bool affects_active_observers_; | 
| 239   bool affects_pending_observers_; | 243   bool affects_pending_observers_; | 
| 240 | 244 | 
| 241   DISALLOW_COPY_AND_ASSIGN(Animation); | 245   DISALLOW_COPY_AND_ASSIGN(Animation); | 
| 242 }; | 246 }; | 
| 243 | 247 | 
| 244 }  // namespace cc | 248 }  // namespace cc | 
| 245 | 249 | 
| 246 #endif  // CC_ANIMATION_ANIMATION_H_ | 250 #endif  // CC_ANIMATION_ANIMATION_H_ | 
| OLD | NEW | 
|---|