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