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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 136173004: Early terminate flings when scrolling impossible (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 2316 matching lines...) Expand 10 before | Expand all | Expand 10 after
2327 2327
2328 // Scrolling along an axis resets accumulated root overscroll for that axis. 2328 // Scrolling along an axis resets accumulated root overscroll for that axis.
2329 if (did_scroll_x) 2329 if (did_scroll_x)
2330 accumulated_root_overscroll_.set_x(0); 2330 accumulated_root_overscroll_.set_x(0);
2331 if (did_scroll_y) 2331 if (did_scroll_y)
2332 accumulated_root_overscroll_.set_y(0); 2332 accumulated_root_overscroll_.set_y(0);
2333 2333
2334 accumulated_root_overscroll_ += unused_root_delta; 2334 accumulated_root_overscroll_ += unused_root_delta;
2335 bool did_overscroll = !unused_root_delta.IsZero(); 2335 bool did_overscroll = !unused_root_delta.IsZero();
2336 if (did_overscroll && input_handler_client_) { 2336 if (did_overscroll && input_handler_client_) {
2337 DidOverscrollParams params; 2337 input_handler_client_->DidOverscroll(accumulated_root_overscroll_,
2338 params.accumulated_overscroll = accumulated_root_overscroll_; 2338 unused_root_delta);
2339 params.latest_overscroll_delta = unused_root_delta;
2340 params.current_fling_velocity = current_fling_velocity_;
2341 input_handler_client_->DidOverscroll(params);
2342 } 2339 }
2343 2340
2344 return did_scroll_content || did_scroll_top_controls; 2341 return did_scroll_content || did_scroll_top_controls;
2345 } 2342 }
2346 2343
2347 // This implements scrolling by page as described here: 2344 // This implements scrolling by page as described here:
2348 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms645601(v=vs.85).asp x#_win32_The_Mouse_Wheel 2345 // http://msdn.microsoft.com/en-us/library/windows/desktop/ms645601(v=vs.85).asp x#_win32_The_Mouse_Wheel
2349 // for events with WHEEL_PAGESCROLL set. 2346 // for events with WHEEL_PAGESCROLL set.
2350 bool LayerTreeHostImpl::ScrollVerticallyByPage(const gfx::Point& viewport_point, 2347 bool LayerTreeHostImpl::ScrollVerticallyByPage(const gfx::Point& viewport_point,
2351 ScrollDirection direction) { 2348 ScrollDirection direction) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2395 void LayerTreeHostImpl::OnRootLayerDelegatedScrollOffsetChanged() { 2392 void LayerTreeHostImpl::OnRootLayerDelegatedScrollOffsetChanged() {
2396 DCHECK(root_layer_scroll_offset_delegate_ != NULL); 2393 DCHECK(root_layer_scroll_offset_delegate_ != NULL);
2397 client_->SetNeedsCommitOnImplThread(); 2394 client_->SetNeedsCommitOnImplThread();
2398 } 2395 }
2399 2396
2400 void LayerTreeHostImpl::ClearCurrentlyScrollingLayer() { 2397 void LayerTreeHostImpl::ClearCurrentlyScrollingLayer() {
2401 active_tree_->ClearCurrentlyScrollingLayer(); 2398 active_tree_->ClearCurrentlyScrollingLayer();
2402 did_lock_scrolling_layer_ = false; 2399 did_lock_scrolling_layer_ = false;
2403 scroll_affects_scroll_handler_ = false; 2400 scroll_affects_scroll_handler_ = false;
2404 accumulated_root_overscroll_ = gfx::Vector2dF(); 2401 accumulated_root_overscroll_ = gfx::Vector2dF();
2405 current_fling_velocity_ = gfx::Vector2dF();
2406 } 2402 }
2407 2403
2408 void LayerTreeHostImpl::ScrollEnd() { 2404 void LayerTreeHostImpl::ScrollEnd() {
2409 if (top_controls_manager_) 2405 if (top_controls_manager_)
2410 top_controls_manager_->ScrollEnd(); 2406 top_controls_manager_->ScrollEnd();
2411 ClearCurrentlyScrollingLayer(); 2407 ClearCurrentlyScrollingLayer();
2412 StartScrollbarAnimation(); 2408 StartScrollbarAnimation();
2413 } 2409 }
2414 2410
2415 InputHandler::ScrollStatus LayerTreeHostImpl::FlingScrollBegin() { 2411 InputHandler::ScrollStatus LayerTreeHostImpl::FlingScrollBegin() {
(...skipping 10 matching lines...) Expand all
2426 if (!wheel_scrolling_) { 2422 if (!wheel_scrolling_) {
2427 // Allow the fling to lock to the first layer that moves after the initial 2423 // Allow the fling to lock to the first layer that moves after the initial
2428 // fling |ScrollBy()| event. 2424 // fling |ScrollBy()| event.
2429 did_lock_scrolling_layer_ = false; 2425 did_lock_scrolling_layer_ = false;
2430 should_bubble_scrolls_ = false; 2426 should_bubble_scrolls_ = false;
2431 } 2427 }
2432 2428
2433 return ScrollStarted; 2429 return ScrollStarted;
2434 } 2430 }
2435 2431
2436 void LayerTreeHostImpl::NotifyCurrentFlingVelocity(
2437 const gfx::Vector2dF& velocity) {
2438 current_fling_velocity_ = velocity;
2439 }
2440
2441 float LayerTreeHostImpl::DeviceSpaceDistanceToLayer( 2432 float LayerTreeHostImpl::DeviceSpaceDistanceToLayer(
2442 const gfx::PointF& device_viewport_point, 2433 const gfx::PointF& device_viewport_point,
2443 LayerImpl* layer_impl) { 2434 LayerImpl* layer_impl) {
2444 if (!layer_impl) 2435 if (!layer_impl)
2445 return std::numeric_limits<float>::max(); 2436 return std::numeric_limits<float>::max();
2446 2437
2447 gfx::Rect layer_impl_bounds( 2438 gfx::Rect layer_impl_bounds(
2448 layer_impl->content_bounds()); 2439 layer_impl->content_bounds());
2449 2440
2450 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect( 2441 gfx::RectF device_viewport_layer_impl_bounds = MathUtil::MapClippedRect(
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
3040 swap_promise_monitor_.erase(monitor); 3031 swap_promise_monitor_.erase(monitor);
3041 } 3032 }
3042 3033
3043 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { 3034 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() {
3044 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); 3035 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin();
3045 for (; it != swap_promise_monitor_.end(); it++) 3036 for (; it != swap_promise_monitor_.end(); it++)
3046 (*it)->OnSetNeedsRedrawOnImpl(); 3037 (*it)->OnSetNeedsRedrawOnImpl();
3047 } 3038 }
3048 3039
3049 } // namespace cc 3040 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698