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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 105393003: Always fall back to root scroll layer for otherwise ignored scrolls (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updates Created 7 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host_impl.cc
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index f9076fb9be87def8080895959ff2be042118032b..5bc1fc618cad8b8d5ba01f504b278e7f6665c04b 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -2009,15 +2009,6 @@ LayerImpl* LayerTreeHostImpl::FindScrollLayerForDeviceViewportPoint(
potentially_scrolling_layer_impl = scroll_layer_impl;
}
- // When hiding top controls is enabled and the controls are hidden or
- // overlaying the content, force scrolls to be enabled on the root layer to
- // allow bringing the top controls back into view.
- if (!potentially_scrolling_layer_impl && top_controls_manager_ &&
- top_controls_manager_->content_top_offset() !=
- settings_.top_controls_height) {
- potentially_scrolling_layer_impl = RootScrollLayer();
- }
-
return potentially_scrolling_layer_impl;
}
@@ -2049,8 +2040,7 @@ InputHandler::ScrollStatus LayerTreeHostImpl::ScrollBegin(
return ScrollOnMainThread;
}
- // If we want to send a DidOverscroll for this scroll it can't be ignored.
- if (!potentially_scrolling_layer_impl && settings_.always_overscroll)
+ if (!potentially_scrolling_layer_impl)
potentially_scrolling_layer_impl = RootScrollLayer();
if (potentially_scrolling_layer_impl) {
@@ -2158,8 +2148,19 @@ bool LayerTreeHostImpl::ScrollBy(gfx::Point viewport_point,
gfx::Vector2dF unused_root_delta;
bool did_scroll_x = false;
bool did_scroll_y = false;
- bool consume_by_top_controls = top_controls_manager_ &&
- (CurrentlyScrollingLayer() == RootScrollLayer() || scroll_delta.y() < 0);
+ bool consume_by_top_controls = false;
+ if (top_controls_manager_) {
+ gfx::PointF screen_space_point =
+ gfx::ScalePoint(viewport_point, device_scale_factor_);
aelias_OOO_until_Jul13 2013/12/26 20:38:00 This would be incorrect when the transformation is
jdduke (slow) 2014/01/09 20:37:29 What if we simply use the |max_scroll_offset()|?
+ bool root_layer_gesture_scroll_active_and_possible =
+ CurrentlyScrollingLayer() == RootScrollLayer() &&
+ RootScrollLayer()->TryScroll(screen_space_point, Gesture)
+ != ScrollIgnored;
+ // Showing the top controls should always be possible, while hiding them
+ // should be possible only if the root layer can be scrolled.
+ consume_by_top_controls =
+ (scroll_delta.y() < 0 || root_layer_gesture_scroll_active_and_possible);
+ }
for (LayerImpl* layer_impl = CurrentlyScrollingLayer();
layer_impl;
@@ -2170,7 +2171,7 @@ bool LayerTreeHostImpl::ScrollBy(gfx::Point viewport_point,
if (layer_impl == RootScrollLayer()) {
// Only allow bubble scrolling when the scroll is in the direction to make
// the top controls visible.
- if (consume_by_top_controls && layer_impl == RootScrollLayer()) {
+ if (consume_by_top_controls) {
pending_delta = top_controls_manager_->ScrollBy(pending_delta);
UpdateMaxScrollOffset();
}
« no previous file with comments | « no previous file | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698