1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_GFX_ANIMATION_THROB_ANIMATION_H_ 6 #define UI_GFX_ANIMATION_THROB_ANIMATION_H_ 7 8 #include "ui/gfx/animation/slide_animation.h" 9 10 namespace gfx { 11 12 // A subclass of SlideAnimation that can continually slide. All of the Animation 13 // methods behave like that of SlideAnimation: transition to the next state. 14 // The StartThrobbing method causes the ThrobAnimation to cycle between hidden 15 // and shown for a set number of cycles. 16 // 17 // A ThrobAnimation has two durations: the duration used when behavior like 18 // a SlideAnimation, and the duration used when throbbing. 19 class GFX_EXPORT ThrobAnimation : public SlideAnimation { 20 public: 21 explicit ThrobAnimation(AnimationDelegate* target); 22 virtual ~ThrobAnimation() {} 23 24 // Starts throbbing. cycles_til_stop gives the number of cycles to do before 25 // stopping. A negative value means "throb indefinitely". 26 void StartThrobbing(int cycles_til_stop); 27 28 // Sets the duration of the slide animation when throbbing. 29 void SetThrobDuration(int duration) { throb_duration_ = duration; } 30 31 // Overridden to reset to the slide duration. 32 virtual void Reset() OVERRIDE; 33 virtual void Reset(double value) OVERRIDE; 34 virtual void Show() OVERRIDE; 35 virtual void Hide() OVERRIDE; 36 37 // Overridden to maintain the slide duration. 38 virtual void SetSlideDuration(int duration) OVERRIDE; 39 40 // The number of cycles remaining until the animation stops. 41 void set_cycles_remaining(int value) { cycles_remaining_ = value; } 42 int cycles_remaining() const { return cycles_remaining_; } 43 44 protected: 45 // Overriden to continually throb (assuming we're throbbing). 46 virtual void Step(base::TimeTicks time_now) OVERRIDE; 47 48 private: 49 // Resets state such that we behave like SlideAnimation. 50 void ResetForSlide(); 51 52 // Duration of the slide animation. 53 int slide_duration_; 54 55 // Duration of the slide animation when throbbing. 56 int throb_duration_; 57 58 // If throbbing, this is the number of cycles left. 59 int cycles_remaining_; 60 61 // Are we throbbing? 62 bool throbbing_; 63 64 DISALLOW_COPY_AND_ASSIGN(ThrobAnimation); 65 }; 66 67 } // namespace gfx 68 69 #endif // UI_GFX_ANIMATION_THROB_ANIMATION_H_ 70