diff options
Diffstat (limited to 'chromium/ui/gfx/animation/throb_animation.h')
-rw-r--r-- | chromium/ui/gfx/animation/throb_animation.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/chromium/ui/gfx/animation/throb_animation.h b/chromium/ui/gfx/animation/throb_animation.h new file mode 100644 index 00000000000..8bea7f8799c --- /dev/null +++ b/chromium/ui/gfx/animation/throb_animation.h @@ -0,0 +1,69 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_GFX_ANIMATION_THROB_ANIMATION_H_ +#define UI_GFX_ANIMATION_THROB_ANIMATION_H_ + +#include "ui/gfx/animation/slide_animation.h" + +namespace gfx { + +// A subclass of SlideAnimation that can continually slide. All of the Animation +// methods behave like that of SlideAnimation: transition to the next state. +// The StartThrobbing method causes the ThrobAnimation to cycle between hidden +// and shown for a set number of cycles. +// +// A ThrobAnimation has two durations: the duration used when behavior like +// a SlideAnimation, and the duration used when throbbing. +class GFX_EXPORT ThrobAnimation : public SlideAnimation { + public: + explicit ThrobAnimation(AnimationDelegate* target); + virtual ~ThrobAnimation() {} + + // Starts throbbing. cycles_til_stop gives the number of cycles to do before + // stopping. A negative value means "throb indefinitely". + void StartThrobbing(int cycles_til_stop); + + // Sets the duration of the slide animation when throbbing. + void SetThrobDuration(int duration) { throb_duration_ = duration; } + + // Overridden to reset to the slide duration. + virtual void Reset() OVERRIDE; + virtual void Reset(double value) OVERRIDE; + virtual void Show() OVERRIDE; + virtual void Hide() OVERRIDE; + + // Overridden to maintain the slide duration. + virtual void SetSlideDuration(int duration) OVERRIDE; + + // The number of cycles remaining until the animation stops. + void set_cycles_remaining(int value) { cycles_remaining_ = value; } + int cycles_remaining() const { return cycles_remaining_; } + + protected: + // Overriden to continually throb (assuming we're throbbing). + virtual void Step(base::TimeTicks time_now) OVERRIDE; + + private: + // Resets state such that we behave like SlideAnimation. + void ResetForSlide(); + + // Duration of the slide animation. + int slide_duration_; + + // Duration of the slide animation when throbbing. + int throb_duration_; + + // If throbbing, this is the number of cycles left. + int cycles_remaining_; + + // Are we throbbing? + bool throbbing_; + + DISALLOW_COPY_AND_ASSIGN(ThrobAnimation); +}; + +} // namespace gfx + +#endif // UI_GFX_ANIMATION_THROB_ANIMATION_H_ |