Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(527)

Side by Side Diff: cc/input/scrollbar_animation_controller.cc

Issue 2611013002: Show Overlay Scrollbar when GestureScrollUpdate (Closed)
Patch Set: rebase & merge 2716453005 & fix tests Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/input/scrollbar_animation_controller.h" 5 #include "cc/input/scrollbar_animation_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "cc/trees/layer_tree_impl.h" 10 #include "cc/trees/layer_tree_impl.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 return animated; 155 return animated;
156 } 156 }
157 157
158 float ScrollbarAnimationController::AnimationProgressAtTime( 158 float ScrollbarAnimationController::AnimationProgressAtTime(
159 base::TimeTicks now) { 159 base::TimeTicks now) {
160 base::TimeDelta delta = now - last_awaken_time_; 160 base::TimeDelta delta = now - last_awaken_time_;
161 float progress = delta.InSecondsF() / fade_out_duration_.InSecondsF(); 161 float progress = delta.InSecondsF() / fade_out_duration_.InSecondsF();
162 return std::max(std::min(progress, 1.f), 0.f); 162 return std::max(std::min(progress, 1.f), 0.f);
163 } 163 }
164 164
165 void ScrollbarAnimationController::DidScrollBegin() {
166 currently_scrolling_ = true;
167 }
168
169 void ScrollbarAnimationController::RunAnimationFrame(float progress) { 165 void ScrollbarAnimationController::RunAnimationFrame(float progress) {
170 ApplyOpacityToScrollbars(1.f - progress); 166 ApplyOpacityToScrollbars(1.f - progress);
171 client_->SetNeedsRedrawForScrollbarAnimation(); 167 client_->SetNeedsRedrawForScrollbarAnimation();
172 if (progress == 1.f) 168 if (progress == 1.f)
173 StopAnimation(); 169 StopAnimation();
174 } 170 }
175 171
176 void ScrollbarAnimationController::DidScrollUpdate(bool on_resize) { 172 void ScrollbarAnimationController::DidScrollBegin() {
173 currently_scrolling_ = true;
174 }
175
176 void ScrollbarAnimationController::DidScrollEnd() {
177 bool has_scrolled = scroll_gesture_has_scrolled_;
178 scroll_gesture_has_scrolled_ = false;
179
180 currently_scrolling_ = false;
181
182 // We don't fade out scrollbar if they need thinning animation and mouse is
183 // near.
184 if (need_thinning_animation_ && mouse_is_near_any_scrollbar())
185 return;
186
187 if (has_scrolled)
188 PostDelayedFadeOut(false);
189 }
190
191 void ScrollbarAnimationController::WillUpdateScroll() {
177 if (need_thinning_animation_ && Captured()) 192 if (need_thinning_animation_ && Captured())
178 return; 193 return;
179 194
180 StopAnimation(); 195 StopAnimation();
181 196
182 // As an optimization, we avoid spamming fade delay tasks during active fast 197 // As an optimization, we avoid spamming fade delay tasks during active fast
183 // scrolls. But if we're not within one, we need to post every scroll update. 198 // scrolls. But if we're not within one, we need to post every scroll update.
184 if (!currently_scrolling_) { 199 if (!currently_scrolling_) {
185 // We don't fade out scrollbar if they need thinning animation and mouse is 200 // We don't fade out scrollbar if they need thinning animation and mouse is
186 // near. 201 // near.
187 if (!need_thinning_animation_ || !mouse_is_near_any_scrollbar()) 202 if (!need_thinning_animation_ || !mouse_is_near_any_scrollbar())
188 PostDelayedFadeOut(on_resize); 203 PostDelayedFadeOut(false);
189 } else { 204 } else {
190 scroll_gesture_has_scrolled_ = true; 205 scroll_gesture_has_scrolled_ = true;
191 } 206 }
192 207
193 FadeIn(); 208 FadeIn();
194 209
195 if (need_thinning_animation_) { 210 if (need_thinning_animation_) {
196 vertical_controller_->UpdateThumbThicknessScale(); 211 vertical_controller_->UpdateThumbThicknessScale();
197 horizontal_controller_->UpdateThumbThicknessScale(); 212 horizontal_controller_->UpdateThumbThicknessScale();
198 } 213 }
199 } 214 }
200 215
201 void ScrollbarAnimationController::DidScrollEnd() { 216 void ScrollbarAnimationController::DidResize() {
202 bool has_scrolled = scroll_gesture_has_scrolled_; 217 StopAnimation();
203 scroll_gesture_has_scrolled_ = false; 218 FadeIn();
204 219 // We should use the gesture delay rather than the resize delay if we're in a
205 currently_scrolling_ = false; 220 // gesture scroll, even if it is resizing.
206 221 PostDelayedFadeOut(!currently_scrolling_);
207 // We don't fade out scrollbar if they need thinning animation and mouse is
208 // near.
209 if (need_thinning_animation_ && mouse_is_near_any_scrollbar())
210 return;
211
212 if (has_scrolled)
213 PostDelayedFadeOut(false);
214 } 222 }
215 223
216 void ScrollbarAnimationController::DidMouseDown() { 224 void ScrollbarAnimationController::DidMouseDown() {
217 if (!need_thinning_animation_ || ScrollbarsHidden()) 225 if (!need_thinning_animation_ || ScrollbarsHidden())
218 return; 226 return;
219 227
220 vertical_controller_->DidMouseDown(); 228 vertical_controller_->DidMouseDown();
221 horizontal_controller_->DidMouseDown(); 229 horizontal_controller_->DidMouseDown();
222 } 230 }
223 231
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 bool previouslyVisible = opacity_ > 0.0f; 346 bool previouslyVisible = opacity_ > 0.0f;
339 bool currentlyVisible = opacity > 0.0f; 347 bool currentlyVisible = opacity > 0.0f;
340 348
341 opacity_ = opacity; 349 opacity_ = opacity;
342 350
343 if (previouslyVisible != currentlyVisible) 351 if (previouslyVisible != currentlyVisible)
344 client_->DidChangeScrollbarVisibility(); 352 client_->DidChangeScrollbarVisibility();
345 } 353 }
346 354
347 } // namespace cc 355 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698