• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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);
GetSlideDuration()66   int GetSlideDuration() const { return slide_duration_; }
SetTweenType(Tween::Type tween_type)67   void SetTweenType(Tween::Type tween_type) { tween_type_ = tween_type; }
68 
69   virtual double GetCurrentValue() const OVERRIDE;
IsShowing()70   bool IsShowing() const { return showing_; }
IsClosing()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