Index: cc/animation/scrollbar_animation_controller.cc |
diff --git a/cc/animation/scrollbar_animation_controller.cc b/cc/animation/scrollbar_animation_controller.cc |
index ffb22870825618a4a9e6e4bff1b58c5eeebb0c1e..48b199d6e665388e0021dd80dd4c97f84c5a5d4f 100644 |
--- a/cc/animation/scrollbar_animation_controller.cc |
+++ b/cc/animation/scrollbar_animation_controller.cc |
@@ -7,15 +7,18 @@ |
#include <algorithm> |
#include "base/time/time.h" |
+#include "cc/trees/layer_tree_impl.h" |
namespace cc { |
ScrollbarAnimationController::ScrollbarAnimationController( |
+ LayerImpl* scroll_layer, |
ScrollbarAnimationControllerClient* client, |
base::TimeDelta delay_before_starting, |
base::TimeDelta resize_delay_before_starting, |
base::TimeDelta duration) |
- : client_(client), |
+ : scroll_layer_(scroll_layer), |
+ client_(client), |
delay_before_starting_(delay_before_starting), |
resize_delay_before_starting_(resize_delay_before_starting), |
duration_(duration), |
@@ -26,6 +29,8 @@ ScrollbarAnimationController::ScrollbarAnimationController( |
} |
ScrollbarAnimationController::~ScrollbarAnimationController() { |
+ if (is_animating_) |
+ client_->StopAnimatingScrollbarAnimationController(this); |
} |
void ScrollbarAnimationController::Animate(base::TimeTicks now) { |
@@ -37,11 +42,6 @@ void ScrollbarAnimationController::Animate(base::TimeTicks now) { |
float progress = AnimationProgressAtTime(now); |
RunAnimationFrame(progress); |
- |
- if (is_animating_) { |
- delayed_scrollbar_fade_.Cancel(); |
- client_->SetNeedsScrollbarAnimationFrame(); |
- } |
} |
float ScrollbarAnimationController::AnimationProgressAtTime( |
@@ -62,38 +62,40 @@ void ScrollbarAnimationController::DidScrollUpdate(bool on_resize) { |
// As an optimization, we avoid spamming fade delay tasks during active fast |
// scrolls. But if we're not within one, we need to post every scroll update. |
if (!currently_scrolling_) |
- PostDelayedFade(on_resize); |
+ PostDelayedAnimationTask(on_resize); |
else |
scroll_gesture_has_scrolled_ = true; |
} |
void ScrollbarAnimationController::DidScrollEnd() { |
if (scroll_gesture_has_scrolled_) { |
- PostDelayedFade(false); |
+ PostDelayedAnimationTask(false); |
scroll_gesture_has_scrolled_ = false; |
} |
currently_scrolling_ = false; |
} |
-void ScrollbarAnimationController::PostDelayedFade(bool on_resize) { |
+void ScrollbarAnimationController::PostDelayedAnimationTask(bool on_resize) { |
base::TimeDelta delay = |
on_resize ? resize_delay_before_starting_ : delay_before_starting_; |
delayed_scrollbar_fade_.Reset( |
base::Bind(&ScrollbarAnimationController::StartAnimation, |
weak_factory_.GetWeakPtr())); |
- client_->PostDelayedScrollbarFade(delayed_scrollbar_fade_.callback(), delay); |
+ client_->PostDelayedScrollbarAnimationTask(delayed_scrollbar_fade_.callback(), |
+ delay); |
} |
void ScrollbarAnimationController::StartAnimation() { |
delayed_scrollbar_fade_.Cancel(); |
is_animating_ = true; |
last_awaken_time_ = base::TimeTicks(); |
- client_->SetNeedsScrollbarAnimationFrame(); |
+ client_->StartAnimatingScrollbarAnimationController(this); |
} |
void ScrollbarAnimationController::StopAnimation() { |
is_animating_ = false; |
+ client_->StopAnimatingScrollbarAnimationController(this); |
} |
} // namespace cc |