Home | History | Annotate | Download | only in animation
      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_SLIDE_ANIMATION_H_
      6 #define UI_GFX_ANIMATION_SLIDE_ANIMATION_H_
      7 
      8 #include "ui/gfx/animation/linear_animation.h"
      9 #include "ui/gfx/animation/tween.h"
     10 
     11 namespace gfx {
     12 
     13 // Slide Animation
     14 //
     15 // Used for reversible animations and as a general helper class. Typical usage:
     16 //
     17 // #include "ui/gfx/animation/slide_animation.h"
     18 //
     19 // class MyClass : public AnimationDelegate {
     20 //  public:
     21 //   MyClass() {
     22 //     animation_.reset(new SlideAnimation(this));
     23 //     animation_->SetSlideDuration(500);
     24 //   }
     25 //   void OnMouseOver() {
     26 //     animation_->Show();
     27 //   }
     28 //   void OnMouseOut() {
     29 //     animation_->Hide();
     30 //   }
     31 //   void AnimationProgressed(const Animation* animation) {
     32 //     if (animation == animation_.get()) {
     33 //       Layout();
     34 //       SchedulePaint();
     35 //     } else if (animation == other_animation_.get()) {
     36 //       ...
     37 //     }
     38 //   }
     39 //   void Layout() {
     40 //     if (animation_->is_animating()) {
     41 //       hover_image_.SetOpacity(animation_->GetCurrentValue());
     42 //     }
     43 //   }
     44 //  private:
     45 //   scoped_ptr<SlideAnimation> animation_;
     46 // }
     47 class GFX_EXPORT SlideAnimation : public LinearAnimation {
     48  public:
     49   explicit SlideAnimation(AnimationDelegate* target);
     50   virtual ~SlideAnimation();
     51 
     52   // Set the animation back to the 0 state.
     53   virtual void Reset();
     54   virtual void Reset(double value);
     55 
     56   // Begin a showing animation or reverse a hiding animation in progress.
     57   virtual void Show();
     58 
     59   // Begin a hiding animation or reverse a showing animation in progress.
     60   virtual void Hide();
     61 
     62   // Sets the time a slide will take. Note that this isn't actually
     63   // the amount of time an animation will take as the current value of
     64   // the slide is considered.
     65   virtual void SetSlideDuration(int duration);
     66   int GetSlideDuration() const { return slide_duration_; }
     67   void SetTweenType(Tween::Type tween_type) { tween_type_ = tween_type; }
     68 
     69   virtual double GetCurrentValue() const OVERRIDE;
     70   bool IsShowing() const { return showing_; }
     71   bool IsClosing() const { return !showing_ && value_end_ < value_current_; }
     72 
     73   class TestApi;
     74 
     75  private:
     76   // Overridden from Animation.
     77   virtual void AnimateToState(double state) OVERRIDE;
     78 
     79   AnimationDelegate* target_;
     80 
     81   Tween::Type tween_type_;
     82 
     83   // Used to determine which way the animation is going.
     84   bool showing_;
     85 
     86   // Animation values. These are a layer on top of Animation::state_ to
     87   // provide the reversability.
     88   double value_start_;
     89   double value_end_;
     90   double value_current_;
     91 
     92   // How long a hover in/out animation will last for. This defaults to
     93   // kHoverFadeDurationMS, but can be overridden with SetDuration.
     94   int slide_duration_;
     95 
     96   DISALLOW_COPY_AND_ASSIGN(SlideAnimation);
     97 };
     98 
     99 }  // namespace gfx
    100 
    101 #endif  // UI_GFX_ANIMATION_SLIDE_ANIMATION_H_
    102