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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 1146053009: Added experiment for changing viewport scroll ordering. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: aelias review Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
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 d1dc7b579c1a959638895526e29e91954c63edcf..f7465bb5765dc67b56cca0fd38ae53f56a7af701 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -2632,6 +2632,13 @@ InputHandlerScrollResult LayerTreeHostImpl::ScrollBy(
bool did_scroll_y = false;
bool did_scroll_top_controls = false;
+ if (pinch_gesture_active_ && settings().invert_viewport_scroll_order) {
+ // Scrolls during a pinch gesture should pan the visual viewport, rather
+ // than a typical bubbling scroll.
+ viewport()->Pan(pending_delta);
+ return InputHandlerScrollResult();
+ }
+
for (LayerImpl* layer_impl = CurrentlyScrollingLayer();
layer_impl;
layer_impl = layer_impl->parent()) {
@@ -2643,9 +2650,11 @@ InputHandlerScrollResult LayerTreeHostImpl::ScrollBy(
gfx::Vector2dF applied_delta;
if (layer_impl == InnerViewportScrollLayer()) {
+ bool affect_top_controls = true;
Viewport::ScrollResult result = viewport()->ScrollBy(pending_delta,
viewport_point,
- wheel_scrolling_);
+ wheel_scrolling_,
+ affect_top_controls);
applied_delta = result.applied_delta;
unused_root_delta = result.unused_scroll_delta;
did_scroll_top_controls = result.top_controls_applied_delta.y() != 0;
@@ -2934,25 +2943,26 @@ void LayerTreeHostImpl::PinchGestureUpdate(float magnify_delta,
gfx::PointF new_scale_anchor = gfx::ScalePoint(anchor, 1.f / page_scale);
gfx::Vector2dF move = previous_scale_anchor - new_scale_anchor;
+ // Scale back to viewport space since that's the coordinate space ScrollBy
+ // uses.
+ move.Scale(page_scale);
+
previous_pinch_anchor_ = anchor;
// If clamping the inner viewport scroll offset causes a change, it should
// be accounted for from the intended move.
move -= InnerViewportScrollLayer()->ClampScrollToMaxScrollOffset();
- // We manually manage the bubbling behaviour here as it is different to that
- // implemented in LayerTreeHostImpl::ScrollBy(). Specifically:
- // 1) we want to explicit limit the bubbling to the outer/inner viewports,
- // 2) we don't want the directional limitations on the unused parts that
- // ScrollBy() implements, and
- // 3) pinching should not engage the top controls manager.
- gfx::Vector2dF unused = OuterViewportScrollLayer()
- ? OuterViewportScrollLayer()->ScrollBy(move)
- : move;
-
- if (!unused.IsZero()) {
- InnerViewportScrollLayer()->ScrollBy(unused);
- InnerViewportScrollLayer()->ClampScrollToMaxScrollOffset();
+ if (settings().invert_viewport_scroll_order) {
+ viewport()->Pan(move);
+ } else {
+ gfx::Point viewport_point;
+ bool is_wheel_event = false;
+ bool affect_top_controls = false;
+ viewport()->ScrollBy(move,
+ viewport_point,
+ is_wheel_event,
+ affect_top_controls);
}
active_tree_->SetRootLayerScrollOffsetDelegate(

Powered by Google App Engine
This is Rietveld 408576698