| Index: cc/input/scrollbar_animation_controller.cc
|
| diff --git a/cc/input/scrollbar_animation_controller.cc b/cc/input/scrollbar_animation_controller.cc
|
| index c018016c8d7f93be8c052b088abf5e6fef919cfd..24a724a0a07f5c47fb32d8dc4fd0cc750774a003 100644
|
| --- a/cc/input/scrollbar_animation_controller.cc
|
| +++ b/cc/input/scrollbar_animation_controller.cc
|
| @@ -27,14 +27,16 @@ std::unique_ptr<ScrollbarAnimationController>
|
| ScrollbarAnimationController::CreateScrollbarAnimationControllerAuraOverlay(
|
| int scroll_layer_id,
|
| ScrollbarAnimationControllerClient* client,
|
| - base::TimeDelta show_delay,
|
| + base::TimeDelta fade_in_delay,
|
| base::TimeDelta fade_out_delay,
|
| base::TimeDelta fade_out_resize_delay,
|
| + base::TimeDelta fade_in_duration,
|
| base::TimeDelta fade_out_duration,
|
| base::TimeDelta thinning_duration) {
|
| return base::WrapUnique(new ScrollbarAnimationController(
|
| - scroll_layer_id, client, show_delay, fade_out_delay,
|
| - fade_out_resize_delay, fade_out_duration, thinning_duration));
|
| + scroll_layer_id, client, fade_in_delay, fade_out_delay,
|
| + fade_out_resize_delay, fade_in_duration, fade_out_duration,
|
| + thinning_duration));
|
| }
|
|
|
| ScrollbarAnimationController::ScrollbarAnimationController(
|
| @@ -46,13 +48,14 @@ ScrollbarAnimationController::ScrollbarAnimationController(
|
| : client_(client),
|
| fade_out_delay_(fade_out_delay),
|
| fade_out_resize_delay_(fade_out_resize_delay),
|
| + fade_out_duration_(fade_out_duration),
|
| need_trigger_scrollbar_show_(false),
|
| is_animating_(false),
|
| + animation_change_(NONE),
|
| scroll_layer_id_(scroll_layer_id),
|
| currently_scrolling_(false),
|
| show_in_fast_scroll_(false),
|
| opacity_(0.0f),
|
| - fade_out_duration_(fade_out_duration),
|
| show_scrollbars_on_scroll_gesture_(false),
|
| need_thinning_animation_(false),
|
| weak_factory_(this) {
|
| @@ -62,22 +65,25 @@ ScrollbarAnimationController::ScrollbarAnimationController(
|
| ScrollbarAnimationController::ScrollbarAnimationController(
|
| int scroll_layer_id,
|
| ScrollbarAnimationControllerClient* client,
|
| - base::TimeDelta show_delay,
|
| + base::TimeDelta fade_in_delay,
|
| base::TimeDelta fade_out_delay,
|
| base::TimeDelta fade_out_resize_delay,
|
| + base::TimeDelta fade_in_duration,
|
| base::TimeDelta fade_out_duration,
|
| base::TimeDelta thinning_duration)
|
| : client_(client),
|
| - show_delay_(show_delay),
|
| + fade_in_delay_(fade_in_delay),
|
| fade_out_delay_(fade_out_delay),
|
| fade_out_resize_delay_(fade_out_resize_delay),
|
| + fade_in_duration_(fade_in_duration),
|
| + fade_out_duration_(fade_out_duration),
|
| need_trigger_scrollbar_show_(false),
|
| is_animating_(false),
|
| + animation_change_(NONE),
|
| scroll_layer_id_(scroll_layer_id),
|
| currently_scrolling_(false),
|
| show_in_fast_scroll_(false),
|
| opacity_(0.0f),
|
| - fade_out_duration_(fade_out_duration),
|
| show_scrollbars_on_scroll_gesture_(true),
|
| need_thinning_animation_(true),
|
| weak_factory_(this) {
|
| @@ -107,7 +113,7 @@ ScrollbarAnimationController::GetScrollbarAnimationController(
|
| }
|
|
|
| void ScrollbarAnimationController::StartAnimation() {
|
| - delayed_scrollbar_show_.Cancel();
|
| + delayed_scrollbar_fade_in_.Cancel();
|
| delayed_scrollbar_fade_out_.Cancel();
|
| is_animating_ = true;
|
| last_awaken_time_ = base::TimeTicks();
|
| @@ -115,22 +121,26 @@ void ScrollbarAnimationController::StartAnimation() {
|
| }
|
|
|
| void ScrollbarAnimationController::StopAnimation() {
|
| - delayed_scrollbar_show_.Cancel();
|
| + delayed_scrollbar_fade_in_.Cancel();
|
| delayed_scrollbar_fade_out_.Cancel();
|
| is_animating_ = false;
|
| + animation_change_ = NONE;
|
| }
|
|
|
| -void ScrollbarAnimationController::PostDelayedShow() {
|
| +void ScrollbarAnimationController::PostDelayedFadeIn() {
|
| DCHECK(delayed_scrollbar_fade_out_.IsCancelled());
|
| - delayed_scrollbar_show_.Cancel();
|
| - delayed_scrollbar_show_.Reset(base::Bind(&ScrollbarAnimationController::Show,
|
| - weak_factory_.GetWeakPtr()));
|
| - client_->PostDelayedScrollbarAnimationTask(delayed_scrollbar_show_.callback(),
|
| - show_delay_);
|
| + animation_change_ = FADE_IN;
|
| + delayed_scrollbar_fade_in_.Cancel();
|
| + delayed_scrollbar_fade_in_.Reset(
|
| + base::Bind(&ScrollbarAnimationController::StartAnimation,
|
| + weak_factory_.GetWeakPtr()));
|
| + client_->PostDelayedScrollbarAnimationTask(
|
| + delayed_scrollbar_fade_in_.callback(), fade_in_delay_);
|
| }
|
|
|
| void ScrollbarAnimationController::PostDelayedFadeOut(bool on_resize) {
|
| - DCHECK(delayed_scrollbar_show_.IsCancelled());
|
| + DCHECK(delayed_scrollbar_fade_in_.IsCancelled());
|
| + animation_change_ = FADE_OUT;
|
| base::TimeDelta delay = on_resize ? fade_out_resize_delay_ : fade_out_delay_;
|
| delayed_scrollbar_fade_out_.Cancel();
|
| delayed_scrollbar_fade_out_.Reset(
|
| @@ -166,12 +176,23 @@ bool ScrollbarAnimationController::Animate(base::TimeTicks now) {
|
| float ScrollbarAnimationController::AnimationProgressAtTime(
|
| base::TimeTicks now) {
|
| base::TimeDelta delta = now - last_awaken_time_;
|
| - float progress = delta.InSecondsF() / fade_out_duration_.InSecondsF();
|
| + base::TimeDelta duration =
|
| + animation_change_ == FADE_IN ? fade_in_duration_ : fade_out_duration_;
|
| + float progress = delta.InSecondsF() / duration.InSecondsF();
|
| return std::max(std::min(progress, 1.f), 0.f);
|
| }
|
|
|
| void ScrollbarAnimationController::RunAnimationFrame(float progress) {
|
| - ApplyOpacityToScrollbars(1.f - progress);
|
| + DCHECK(animation_change_ != NONE);
|
| + float opacity;
|
| +
|
| + if (animation_change_ == FADE_IN) {
|
| + opacity = std::max(progress, opacity_);
|
| + } else {
|
| + opacity = std::min(1.f - progress, opacity_);
|
| + }
|
| +
|
| + ApplyOpacityToScrollbars(opacity);
|
| if (progress == 1.f)
|
| StopAnimation();
|
| }
|
| @@ -268,7 +289,7 @@ void ScrollbarAnimationController::DidMouseLeave() {
|
| vertical_controller_->DidMouseLeave();
|
| horizontal_controller_->DidMouseLeave();
|
|
|
| - delayed_scrollbar_show_.Cancel();
|
| + delayed_scrollbar_fade_in_.Cancel();
|
| need_trigger_scrollbar_show_ = false;
|
|
|
| if (ScrollbarsHidden() || Captured())
|
| @@ -296,9 +317,9 @@ void ScrollbarAnimationController::DidMouseMoveNear(
|
| if (ScrollbarsHidden()) {
|
| if (need_trigger_scrollbar_show_before != need_trigger_scrollbar_show_) {
|
| if (need_trigger_scrollbar_show_) {
|
| - PostDelayedShow();
|
| + PostDelayedFadeIn();
|
| } else {
|
| - delayed_scrollbar_show_.Cancel();
|
| + delayed_scrollbar_fade_in_.Cancel();
|
| }
|
| }
|
| } else {
|
| @@ -324,7 +345,7 @@ bool ScrollbarAnimationController::CalcNeedTriggerScrollbarShow(
|
| if (scrollbar->orientation() != orientation)
|
| continue;
|
|
|
| - if (distance < kMouseMoveDistanceToTriggerShow)
|
| + if (distance < kMouseMoveDistanceToTriggerFadeIn)
|
| return true;
|
| }
|
|
|
| @@ -359,7 +380,7 @@ bool ScrollbarAnimationController::Captured() const {
|
| }
|
|
|
| void ScrollbarAnimationController::Show() {
|
| - delayed_scrollbar_show_.Cancel();
|
| + delayed_scrollbar_fade_in_.Cancel();
|
| ApplyOpacityToScrollbars(1.0f);
|
| }
|
|
|
|
|