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

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

Issue 2841943002: Overlay scrollbars expand only when mouse is near thumb (Closed)
Patch Set: add tests Created 3 years, 8 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"
11 11
12 namespace cc { 12 namespace cc {
13 13
14 namespace {
15
16 float DistanceToScrollbarTrack(const gfx::PointF& device_viewport_point,
17 const ScrollbarLayerImplBase* scrollbar) {
18 if (!scrollbar)
19 return std::numeric_limits<float>::max();
20
21 gfx::Rect scrollbar_bounds(scrollbar->bounds());
22
23 gfx::RectF device_viewport_scrollbar_bounds = MathUtil::MapClippedRect(
24 scrollbar->ScreenSpaceTransform(), gfx::RectF(scrollbar_bounds));
25
26 return device_viewport_scrollbar_bounds.ManhattanDistanceToPoint(
27 device_viewport_point) /
28 scrollbar->layer_tree_impl()->device_scale_factor();
29 }
30
31 float DistanceToScrollbarThumb(const gfx::PointF& device_viewport_point,
32 const ScrollbarLayerImplBase* scrollbar) {
33 if (!scrollbar)
34 return std::numeric_limits<float>::max();
35
36 gfx::Rect thumb_bounds(scrollbar->ComputeExpandedThumbQuadRect());
37
38 gfx::RectF device_viewport_scrollbar_thumb_bounds = MathUtil::MapClippedRect(
39 scrollbar->ScreenSpaceTransform(), gfx::RectF(thumb_bounds));
40
41 return device_viewport_scrollbar_thumb_bounds.ManhattanDistanceToPoint(
42 device_viewport_point) /
43 scrollbar->layer_tree_impl()->device_scale_factor();
44 }
45
46 const ScrollbarOrientation orientations[] = {HORIZONTAL, VERTICAL};
bokan 2017/04/28 14:15:17 This is only used for one loop. Move this into the
47
48 } // namespace
49
14 std::unique_ptr<ScrollbarAnimationController> 50 std::unique_ptr<ScrollbarAnimationController>
15 ScrollbarAnimationController::CreateScrollbarAnimationControllerAndroid( 51 ScrollbarAnimationController::CreateScrollbarAnimationControllerAndroid(
16 ElementId scroll_element_id, 52 ElementId scroll_element_id,
17 ScrollbarAnimationControllerClient* client, 53 ScrollbarAnimationControllerClient* client,
18 base::TimeDelta fade_delay, 54 base::TimeDelta fade_delay,
19 base::TimeDelta fade_out_resize_delay, 55 base::TimeDelta fade_out_resize_delay,
20 base::TimeDelta fade_duration) { 56 base::TimeDelta fade_duration) {
21 return base::WrapUnique( 57 return base::WrapUnique(
22 new ScrollbarAnimationController(scroll_element_id, client, fade_delay, 58 new ScrollbarAnimationController(scroll_element_id, client, fade_delay,
23 fade_out_resize_delay, fade_duration)); 59 fade_out_resize_delay, fade_duration));
(...skipping 15 matching lines...) Expand all
39 ScrollbarAnimationController::ScrollbarAnimationController( 75 ScrollbarAnimationController::ScrollbarAnimationController(
40 ElementId scroll_element_id, 76 ElementId scroll_element_id,
41 ScrollbarAnimationControllerClient* client, 77 ScrollbarAnimationControllerClient* client,
42 base::TimeDelta fade_delay, 78 base::TimeDelta fade_delay,
43 base::TimeDelta fade_out_resize_delay, 79 base::TimeDelta fade_out_resize_delay,
44 base::TimeDelta fade_duration) 80 base::TimeDelta fade_duration)
45 : client_(client), 81 : client_(client),
46 fade_delay_(fade_delay), 82 fade_delay_(fade_delay),
47 fade_out_resize_delay_(fade_out_resize_delay), 83 fade_out_resize_delay_(fade_out_resize_delay),
48 fade_duration_(fade_duration), 84 fade_duration_(fade_duration),
49 need_trigger_scrollbar_show_(false), 85 need_trigger_scrollbar_fade_in_(false),
50 is_animating_(false), 86 is_animating_(false),
51 animation_change_(NONE), 87 animation_change_(NONE),
52 scroll_element_id_(scroll_element_id), 88 scroll_element_id_(scroll_element_id),
53 currently_scrolling_(false), 89 currently_scrolling_(false),
54 show_in_fast_scroll_(false), 90 show_in_fast_scroll_(false),
55 opacity_(0.0f), 91 opacity_(0.0f),
56 show_scrollbars_on_scroll_gesture_(false), 92 show_scrollbars_on_scroll_gesture_(false),
57 need_thinning_animation_(false), 93 need_thinning_animation_(false),
58 weak_factory_(this) { 94 weak_factory_(this) {
59 ApplyOpacityToScrollbars(0.0f); 95 ApplyOpacityToScrollbars(0.0f);
60 } 96 }
61 97
62 ScrollbarAnimationController::ScrollbarAnimationController( 98 ScrollbarAnimationController::ScrollbarAnimationController(
63 ElementId scroll_element_id, 99 ElementId scroll_element_id,
64 ScrollbarAnimationControllerClient* client, 100 ScrollbarAnimationControllerClient* client,
65 base::TimeDelta fade_delay, 101 base::TimeDelta fade_delay,
66 base::TimeDelta fade_out_resize_delay, 102 base::TimeDelta fade_out_resize_delay,
67 base::TimeDelta fade_duration, 103 base::TimeDelta fade_duration,
68 base::TimeDelta thinning_duration) 104 base::TimeDelta thinning_duration)
69 : client_(client), 105 : client_(client),
70 fade_delay_(fade_delay), 106 fade_delay_(fade_delay),
71 fade_out_resize_delay_(fade_out_resize_delay), 107 fade_out_resize_delay_(fade_out_resize_delay),
72 fade_duration_(fade_duration), 108 fade_duration_(fade_duration),
73 need_trigger_scrollbar_show_(false), 109 need_trigger_scrollbar_fade_in_(false),
74 is_animating_(false), 110 is_animating_(false),
75 animation_change_(NONE), 111 animation_change_(NONE),
76 scroll_element_id_(scroll_element_id), 112 scroll_element_id_(scroll_element_id),
77 currently_scrolling_(false), 113 currently_scrolling_(false),
78 show_in_fast_scroll_(false), 114 show_in_fast_scroll_(false),
79 opacity_(0.0f), 115 opacity_(0.0f),
80 show_scrollbars_on_scroll_gesture_(true), 116 show_scrollbars_on_scroll_gesture_(true),
81 need_thinning_animation_(true), 117 need_thinning_animation_(true),
82 weak_factory_(this) { 118 weak_factory_(this) {
83 vertical_controller_ = SingleScrollbarAnimationControllerThinning::Create( 119 scrollbar_controllers_[ScrollbarOrientation::HORIZONTAL] =
84 scroll_element_id, ScrollbarOrientation::VERTICAL, client, 120 SingleScrollbarAnimationControllerThinning::Create(
85 thinning_duration); 121 scroll_element_id, ScrollbarOrientation::HORIZONTAL, client,
86 horizontal_controller_ = SingleScrollbarAnimationControllerThinning::Create( 122 thinning_duration);
87 scroll_element_id, ScrollbarOrientation::HORIZONTAL, client, 123 scrollbar_controllers_[ScrollbarOrientation::VERTICAL] =
88 thinning_duration); 124 SingleScrollbarAnimationControllerThinning::Create(
125 scroll_element_id, ScrollbarOrientation::VERTICAL, client,
126 thinning_duration);
127
128 mouse_is_near_scrollbar_[ScrollbarOrientation::HORIZONTAL] = false;
129 mouse_is_near_scrollbar_[ScrollbarOrientation::VERTICAL] = false;
130
89 ApplyOpacityToScrollbars(0.0f); 131 ApplyOpacityToScrollbars(0.0f);
90 } 132 }
91 133
92 ScrollbarAnimationController::~ScrollbarAnimationController() {} 134 ScrollbarAnimationController::~ScrollbarAnimationController() {}
93 135
94 ScrollbarSet ScrollbarAnimationController::Scrollbars() const { 136 ScrollbarSet ScrollbarAnimationController::Scrollbars() const {
95 return client_->ScrollbarsFor(scroll_element_id_); 137 return client_->ScrollbarsFor(scroll_element_id_);
96 } 138 }
97 139
140 ScrollbarLayerImplBase* ScrollbarAnimationController::GetScrollbar(
141 ScrollbarOrientation orientation) const {
142 for (ScrollbarLayerImplBase* scrollbar : Scrollbars()) {
143 if (!scrollbar->is_overlay_scrollbar())
144 continue;
145
146 if (scrollbar->orientation() == orientation)
147 return scrollbar;
148 }
149
150 return nullptr;
151 }
152
98 SingleScrollbarAnimationControllerThinning& 153 SingleScrollbarAnimationControllerThinning&
99 ScrollbarAnimationController::GetScrollbarAnimationController( 154 ScrollbarAnimationController::GetScrollbarAnimationController(
100 ScrollbarOrientation orientation) const { 155 ScrollbarOrientation orientation) const {
101 DCHECK(need_thinning_animation_); 156 DCHECK(need_thinning_animation_);
102 if (orientation == ScrollbarOrientation::VERTICAL) 157 return *scrollbar_controllers_[orientation].get();
103 return *(vertical_controller_.get());
104 else
105 return *(horizontal_controller_.get());
106 } 158 }
107 159
108 void ScrollbarAnimationController::StartAnimation() { 160 void ScrollbarAnimationController::StartAnimation() {
109 DCHECK(animation_change_ != NONE); 161 DCHECK(animation_change_ != NONE);
110 delayed_scrollbar_animation_.Cancel(); 162 delayed_scrollbar_animation_.Cancel();
111 is_animating_ = true; 163 is_animating_ = true;
112 last_awaken_time_ = base::TimeTicks(); 164 last_awaken_time_ = base::TimeTicks();
113 client_->SetNeedsAnimateForScrollbarAnimation(); 165 client_->SetNeedsAnimateForScrollbarAnimation();
114 } 166 }
115 167
(...skipping 28 matching lines...) Expand all
144 196
145 float progress = AnimationProgressAtTime(now); 197 float progress = AnimationProgressAtTime(now);
146 RunAnimationFrame(progress); 198 RunAnimationFrame(progress);
147 199
148 if (is_animating_) 200 if (is_animating_)
149 client_->SetNeedsAnimateForScrollbarAnimation(); 201 client_->SetNeedsAnimateForScrollbarAnimation();
150 animated = true; 202 animated = true;
151 } 203 }
152 204
153 if (need_thinning_animation_) { 205 if (need_thinning_animation_) {
154 animated |= vertical_controller_->Animate(now); 206 for (auto& controller : scrollbar_controllers_)
155 animated |= horizontal_controller_->Animate(now); 207 animated |= controller->Animate(now);
156 } 208 }
157 209
158 return animated; 210 return animated;
159 } 211 }
160 212
161 float ScrollbarAnimationController::AnimationProgressAtTime( 213 float ScrollbarAnimationController::AnimationProgressAtTime(
162 base::TimeTicks now) { 214 base::TimeTicks now) {
163 base::TimeDelta delta = now - last_awaken_time_; 215 base::TimeDelta delta = now - last_awaken_time_;
164 float progress = delta.InSecondsF() / fade_duration_.InSecondsF(); 216 float progress = delta.InSecondsF() / fade_duration_.InSecondsF();
165 return std::max(std::min(progress, 1.f), 0.f); 217 return std::max(std::min(progress, 1.f), 0.f);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 if (!currently_scrolling_) { 264 if (!currently_scrolling_) {
213 // We don't fade out scrollbar if they need thinning animation and mouse is 265 // We don't fade out scrollbar if they need thinning animation and mouse is
214 // near. 266 // near.
215 if (!need_thinning_animation_ || !MouseIsNearAnyScrollbar()) 267 if (!need_thinning_animation_ || !MouseIsNearAnyScrollbar())
216 PostDelayedAnimation(FADE_OUT, false); 268 PostDelayedAnimation(FADE_OUT, false);
217 } else { 269 } else {
218 show_in_fast_scroll_ = true; 270 show_in_fast_scroll_ = true;
219 } 271 }
220 272
221 if (need_thinning_animation_) { 273 if (need_thinning_animation_) {
222 vertical_controller_->UpdateThumbThicknessScale(); 274 for (auto& controller : scrollbar_controllers_)
223 horizontal_controller_->UpdateThumbThicknessScale(); 275 controller->UpdateThumbThicknessScale();
224 } 276 }
225 } 277 }
226 278
227 void ScrollbarAnimationController::WillUpdateScroll() { 279 void ScrollbarAnimationController::WillUpdateScroll() {
228 if (show_scrollbars_on_scroll_gesture_) 280 if (show_scrollbars_on_scroll_gesture_)
229 DidScrollUpdate(); 281 DidScrollUpdate();
230 } 282 }
231 283
232 void ScrollbarAnimationController::DidRequestShowFromMainThread() { 284 void ScrollbarAnimationController::DidRequestShowFromMainThread() {
233 // TODO(skobes): Call DidScrollUpdate here (suppressed for crbug.com/706927). 285 // TODO(skobes): Call DidScrollUpdate here (suppressed for crbug.com/706927).
234 } 286 }
235 287
236 void ScrollbarAnimationController::DidResize() { 288 void ScrollbarAnimationController::DidResize() {
237 StopAnimation(); 289 StopAnimation();
238 Show(); 290 Show();
239 291
240 // As an optimization, we avoid spamming fade delay tasks during active fast 292 // As an optimization, we avoid spamming fade delay tasks during active fast
241 // scrolls. 293 // scrolls.
242 if (!currently_scrolling_) { 294 if (!currently_scrolling_) {
243 PostDelayedAnimation(FADE_OUT, true); 295 PostDelayedAnimation(FADE_OUT, true);
244 } else { 296 } else {
245 show_in_fast_scroll_ = true; 297 show_in_fast_scroll_ = true;
246 } 298 }
247 } 299 }
248 300
249 void ScrollbarAnimationController::DidMouseDown() { 301 void ScrollbarAnimationController::DidMouseDown() {
250 if (!need_thinning_animation_ || ScrollbarsHidden()) 302 if (!need_thinning_animation_ || ScrollbarsHidden())
251 return; 303 return;
252 304
253 vertical_controller_->DidMouseDown(); 305 for (auto& controller : scrollbar_controllers_)
254 horizontal_controller_->DidMouseDown(); 306 controller->DidMouseDown();
255 } 307 }
256 308
257 void ScrollbarAnimationController::DidMouseUp() { 309 void ScrollbarAnimationController::DidMouseUp() {
258 if (!need_thinning_animation_ || !Captured()) 310 if (!need_thinning_animation_ || !Captured())
259 return; 311 return;
260 312
261 vertical_controller_->DidMouseUp(); 313 for (auto& controller : scrollbar_controllers_)
262 horizontal_controller_->DidMouseUp(); 314 controller->DidMouseUp();
263 315
264 if (!MouseIsNearAnyScrollbar()) 316 if (!MouseIsNearAnyScrollbar())
265 PostDelayedAnimation(FADE_OUT, false); 317 PostDelayedAnimation(FADE_OUT, false);
266 } 318 }
267 319
268 void ScrollbarAnimationController::DidMouseLeave() { 320 void ScrollbarAnimationController::DidMouseLeave() {
269 if (!need_thinning_animation_) 321 if (!need_thinning_animation_)
270 return; 322 return;
271 323
272 vertical_controller_->DidMouseLeave(); 324 for (auto& controller : scrollbar_controllers_)
273 horizontal_controller_->DidMouseLeave(); 325 controller->DidMouseLeave();
326
327 for (bool& mouse_is_near_scrollbar : mouse_is_near_scrollbar_)
328 mouse_is_near_scrollbar = false;
274 329
275 delayed_scrollbar_animation_.Cancel(); 330 delayed_scrollbar_animation_.Cancel();
276 need_trigger_scrollbar_show_ = false; 331 need_trigger_scrollbar_fade_in_ = false;
277 332
278 if (ScrollbarsHidden() || Captured()) 333 if (ScrollbarsHidden() || Captured())
279 return; 334 return;
280 335
281 PostDelayedAnimation(FADE_OUT, false); 336 PostDelayedAnimation(FADE_OUT, false);
282 } 337 }
283 338
284 void ScrollbarAnimationController::DidMouseMoveNear( 339 void ScrollbarAnimationController::DidMouseMove(
285 ScrollbarOrientation orientation, 340 const gfx::PointF& device_viewport_point) {
286 float distance) {
287 if (!need_thinning_animation_) 341 if (!need_thinning_animation_)
288 return; 342 return;
289 343
290 bool need_trigger_scrollbar_show_before = need_trigger_scrollbar_show_; 344 bool need_trigger_scrollbar_fade_in_before = need_trigger_scrollbar_fade_in_;
291 345
292 GetScrollbarAnimationController(orientation).DidMouseMoveNear(distance); 346 for (ScrollbarOrientation orientation : orientations) {
347 ScrollbarLayerImplBase* scrollbar = GetScrollbar(orientation);
348 float distance_to_scrollbar_track =
349 DistanceToScrollbarTrack(device_viewport_point, scrollbar);
350 float distance_to_scrollbar_thumb =
351 DistanceToScrollbarThumb(device_viewport_point, scrollbar);
293 352
294 need_trigger_scrollbar_show_ = 353 GetScrollbarAnimationController(orientation)
295 CalcNeedTriggerScrollbarShow(orientation, distance); 354 .DidMouseMove(distance_to_scrollbar_thumb);
355
356 mouse_is_near_scrollbar_[orientation] =
357 distance_to_scrollbar_track < kMouseMoveDistanceToTriggerFadeIn;
358 }
359
360 need_trigger_scrollbar_fade_in_ = MouseIsNearAnyScrollbar();
296 361
297 if (Captured()) 362 if (Captured())
298 return; 363 return;
299 364
300 if (ScrollbarsHidden()) { 365 if (ScrollbarsHidden()) {
301 if (need_trigger_scrollbar_show_before != need_trigger_scrollbar_show_) { 366 if (need_trigger_scrollbar_fade_in_before !=
302 if (need_trigger_scrollbar_show_) { 367 need_trigger_scrollbar_fade_in_) {
368 if (need_trigger_scrollbar_fade_in_) {
303 PostDelayedAnimation(FADE_IN, false); 369 PostDelayedAnimation(FADE_IN, false);
304 } else { 370 } else {
305 delayed_scrollbar_animation_.Cancel(); 371 delayed_scrollbar_animation_.Cancel();
306 } 372 }
307 } 373 }
308 } else { 374 } else {
309 if (MouseIsNearAnyScrollbar()) { 375 if (MouseIsNearAnyScrollbar()) {
310 Show(); 376 Show();
311 StopAnimation(); 377 StopAnimation();
312 } else if (!is_animating_) { 378 } else if (!is_animating_) {
313 PostDelayedAnimation(FADE_OUT, false); 379 PostDelayedAnimation(FADE_OUT, false);
314 } 380 }
315 } 381 }
316 } 382 }
317 383
318 bool ScrollbarAnimationController::CalcNeedTriggerScrollbarShow( 384 bool ScrollbarAnimationController::MouseIsOverScrollbarThumb(
319 ScrollbarOrientation orientation, 385 ScrollbarOrientation orientation) const {
320 float distance) const {
321 DCHECK(need_thinning_animation_); 386 DCHECK(need_thinning_animation_);
322 387 return GetScrollbarAnimationController(orientation)
323 if (vertical_controller_->mouse_is_over_scrollbar() || 388 .mouse_is_over_scrollbar_thumb();
324 horizontal_controller_->mouse_is_over_scrollbar())
325 return true;
326
327 for (ScrollbarLayerImplBase* scrollbar : Scrollbars()) {
328 if (scrollbar->orientation() != orientation)
329 continue;
330
331 if (distance < kMouseMoveDistanceToTriggerFadeIn)
332 return true;
333 }
334
335 return false;
336 } 389 }
337 390
338 bool ScrollbarAnimationController::MouseIsOverScrollbar( 391 bool ScrollbarAnimationController::MouseIsNearScrollbarThumb(
339 ScrollbarOrientation orientation) const { 392 ScrollbarOrientation orientation) const {
340 DCHECK(need_thinning_animation_); 393 DCHECK(need_thinning_animation_);
341 return GetScrollbarAnimationController(orientation).mouse_is_over_scrollbar(); 394 return GetScrollbarAnimationController(orientation)
395 .mouse_is_near_scrollbar_thumb();
342 } 396 }
343 397
344 bool ScrollbarAnimationController::MouseIsNearScrollbar( 398 bool ScrollbarAnimationController::MouseIsNearScrollbar(
345 ScrollbarOrientation orientation) const { 399 ScrollbarOrientation orientation) const {
346 DCHECK(need_thinning_animation_); 400 DCHECK(need_thinning_animation_);
347 return GetScrollbarAnimationController(orientation).mouse_is_near_scrollbar(); 401 return mouse_is_near_scrollbar_[orientation];
348 } 402 }
349 403
350 bool ScrollbarAnimationController::MouseIsNearAnyScrollbar() const { 404 bool ScrollbarAnimationController::MouseIsNearAnyScrollbar() const {
351 DCHECK(need_thinning_animation_); 405 DCHECK(need_thinning_animation_);
352 return vertical_controller_->mouse_is_near_scrollbar() || 406 return MouseIsNearScrollbar(VERTICAL) || MouseIsNearScrollbar(HORIZONTAL);
353 horizontal_controller_->mouse_is_near_scrollbar();
354 } 407 }
355 408
356 bool ScrollbarAnimationController::ScrollbarsHidden() const { 409 bool ScrollbarAnimationController::ScrollbarsHidden() const {
357 return opacity_ == 0.0f; 410 return opacity_ == 0.0f;
358 } 411 }
359 412
360 bool ScrollbarAnimationController::Captured() const { 413 bool ScrollbarAnimationController::Captured() const {
361 DCHECK(need_thinning_animation_); 414 DCHECK(need_thinning_animation_);
362 return vertical_controller_->captured() || horizontal_controller_->captured(); 415 return GetScrollbarAnimationController(VERTICAL).captured() ||
416 GetScrollbarAnimationController(HORIZONTAL).captured();
363 } 417 }
364 418
365 void ScrollbarAnimationController::Show() { 419 void ScrollbarAnimationController::Show() {
366 delayed_scrollbar_animation_.Cancel(); 420 delayed_scrollbar_animation_.Cancel();
367 ApplyOpacityToScrollbars(1.0f); 421 ApplyOpacityToScrollbars(1.0f);
368 } 422 }
369 423
370 void ScrollbarAnimationController::ApplyOpacityToScrollbars(float opacity) { 424 void ScrollbarAnimationController::ApplyOpacityToScrollbars(float opacity) {
371 for (ScrollbarLayerImplBase* scrollbar : Scrollbars()) { 425 for (ScrollbarLayerImplBase* scrollbar : Scrollbars()) {
372 if (!scrollbar->is_overlay_scrollbar()) 426 if (!scrollbar->is_overlay_scrollbar())
373 continue; 427 continue;
374 float effective_opacity = scrollbar->CanScrollOrientation() ? opacity : 0; 428 float effective_opacity = scrollbar->CanScrollOrientation() ? opacity : 0;
375 scrollbar->SetOverlayScrollbarLayerOpacityAnimated(effective_opacity); 429 scrollbar->SetOverlayScrollbarLayerOpacityAnimated(effective_opacity);
376 } 430 }
377 431
378 bool previouslyVisible = opacity_ > 0.0f; 432 bool previouslyVisible = opacity_ > 0.0f;
379 bool currentlyVisible = opacity > 0.0f; 433 bool currentlyVisible = opacity > 0.0f;
380 434
381 if (opacity_ != opacity) 435 if (opacity_ != opacity)
382 client_->SetNeedsRedrawForScrollbarAnimation(); 436 client_->SetNeedsRedrawForScrollbarAnimation();
383 437
384 opacity_ = opacity; 438 opacity_ = opacity;
385 439
386 if (previouslyVisible != currentlyVisible) 440 if (previouslyVisible != currentlyVisible)
387 client_->DidChangeScrollbarVisibility(); 441 client_->DidChangeScrollbarVisibility();
388 } 442 }
389 443
390 } // namespace cc 444 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698