15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifndef UI_GFX_ANIMATION_THROB_ANIMATION_H_
6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define UI_GFX_ANIMATION_THROB_ANIMATION_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/animation/slide_animation.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace gfx {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A subclass of SlideAnimation that can continually slide. All of the Animation
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// methods behave like that of SlideAnimation: transition to the next state.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The StartThrobbing method causes the ThrobAnimation to cycle between hidden
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and shown for a set number of cycles.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A ThrobAnimation has two durations: the duration used when behavior like
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a SlideAnimation, and the duration used when throbbing.
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class GFX_EXPORT ThrobAnimation : public SlideAnimation {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ThrobAnimation(AnimationDelegate* target);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ThrobAnimation() {}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Starts throbbing. cycles_til_stop gives the number of cycles to do before
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // stopping. A negative value means "throb indefinitely".
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StartThrobbing(int cycles_til_stop);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the duration of the slide animation when throbbing.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetThrobDuration(int duration) { throb_duration_ = duration; }
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden to reset to the slide duration.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Reset() OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Reset(double value) OVERRIDE;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Show() OVERRIDE;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Hide() OVERRIDE;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden to maintain the slide duration.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetSlideDuration(int duration) OVERRIDE;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The number of cycles remaining until the animation stops.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_cycles_remaining(int value) { cycles_remaining_ = value; }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int cycles_remaining() const { return cycles_remaining_; }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overriden to continually throb (assuming we're throbbing).
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Step(base::TimeTicks time_now) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resets state such that we behave like SlideAnimation.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ResetForSlide();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Duration of the slide animation.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int slide_duration_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Duration of the slide animation when throbbing.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int throb_duration_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If throbbing, this is the number of cycles left.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int cycles_remaining_;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Are we throbbing?
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool throbbing_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ThrobAnimation);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace gfx
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif  // UI_GFX_ANIMATION_THROB_ANIMATION_H_
70