summaryrefslogtreecommitdiff
path: root/chromium/ui/gfx/animation/throb_animation.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/gfx/animation/throb_animation.h')
-rw-r--r--chromium/ui/gfx/animation/throb_animation.h69
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_