summaryrefslogtreecommitdiffstats
path: root/ui/views/animation/bounds_animator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/views/animation/bounds_animator.cc')
-rw-r--r--ui/views/animation/bounds_animator.cc28
1 files changed, 21 insertions, 7 deletions
diff --git a/ui/views/animation/bounds_animator.cc b/ui/views/animation/bounds_animator.cc
index 2e4b0c1..3e7c93e 100644
--- a/ui/views/animation/bounds_animator.cc
+++ b/ui/views/animation/bounds_animator.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// 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.
@@ -10,7 +10,7 @@
#include "ui/views/view.h"
// Duration in milliseconds for animations.
-static const int kAnimationDuration = 200;
+static const int kDefaultAnimationDuration = 200;
using ui::Animation;
using ui::AnimationContainer;
@@ -21,8 +21,8 @@ namespace views {
BoundsAnimator::BoundsAnimator(View* parent)
: parent_(parent),
- observer_(NULL),
- container_(new AnimationContainer()) {
+ container_(new AnimationContainer()),
+ animation_duration_ms_(kDefaultAnimationDuration) {
container_->set_observer(this);
}
@@ -137,10 +137,22 @@ void BoundsAnimator::Cancel() {
AnimationContainerProgressed(container_.get());
}
+void BoundsAnimator::SetAnimationDuration(int duration_ms) {
+ animation_duration_ms_ = duration_ms;
+}
+
+void BoundsAnimator::AddObserver(BoundsAnimatorObserver* observer) {
+ observers_.AddObserver(observer);
+}
+
+void BoundsAnimator::RemoveObserver(BoundsAnimatorObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
SlideAnimation* BoundsAnimator::CreateAnimation() {
SlideAnimation* animation = new SlideAnimation(this);
animation->SetContainer(container_.get());
- animation->SetSlideDuration(kAnimationDuration);
+ animation->SetSlideDuration(animation_duration_ms_);
animation->SetTweenType(Tween::EASE_OUT);
return animation;
}
@@ -249,10 +261,12 @@ void BoundsAnimator::AnimationContainerProgressed(
repaint_bounds_.SetRect(0, 0, 0, 0);
}
- if (observer_ && !IsAnimating()) {
+ if (!IsAnimating()) {
// Notify here rather than from AnimationXXX to avoid deleting the animation
// while the animation is calling us.
- observer_->OnBoundsAnimatorDone(this);
+ FOR_EACH_OBSERVER(BoundsAnimatorObserver,
+ observers_,
+ OnBoundsAnimatorDone(this));
}
}