Chromium Code Reviews| 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 3e781b39b5701f7e6e04ea8a14a629e3d36b1102..2894197ee3b730b029b0017d64b8d259ee798aa8 100644 |
| --- a/cc/trees/layer_tree_host_impl.cc |
| +++ b/cc/trees/layer_tree_host_impl.cc |
| @@ -3055,6 +3055,7 @@ InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( |
| MainThreadScrollingReason::kNotScrollingOnMain; |
| ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree; |
| ScrollNode* scroll_node = scroll_tree.CurrentlyScrollingNode(); |
| + bool x_dominated = (std::abs(scroll_delta.x()) > std::abs(scroll_delta.y())); |
|
bokan
2017/06/30 15:44:11
nit: no need for outer parentheses
sunyunjia
2017/06/30 18:26:57
Done.
|
| if (scroll_node) { |
| // Flash the overlay scrollbar even if the scroll dalta is 0. |
| @@ -3134,6 +3135,14 @@ InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( |
| } |
| pending_delta -= scroll_delta; |
| + |
| + if ((x_dominated && |
| + scroll_node->scroll_boundary_behavior.x != |
| + ScrollBoundaryBehavior::kScrollBoundaryBehaviorTypeAuto) || |
| + (!x_dominated && |
| + scroll_node->scroll_boundary_behavior.y != |
| + ScrollBoundaryBehavior::kScrollBoundaryBehaviorTypeAuto)) |
| + break; |
| } |
| } |
| scroll_state.set_is_ending(true); |
| @@ -3369,6 +3378,12 @@ void LayerTreeHostImpl::DistributeScrollDelta(ScrollState* scroll_state) { |
| viewport()->MainScrollLayer() |
| ? scroll_tree.Node(viewport()->MainScrollLayer()->scroll_tree_index()) |
| : nullptr; |
| + bool x_dominated = |
| + (std::abs(scroll_state->delta_x()) > std::abs(scroll_state->delta_y())); |
|
bokan
2017/06/30 15:44:11
ditto
sunyunjia
2017/06/30 18:26:58
Done.
|
| + if (scroll_state->is_beginning()) { |
| + x_dominated = (std::abs(scroll_state->delta_x_hint()) > |
| + std::abs(scroll_state->delta_y_hint())); |
| + } |
| if (scroll_node) { |
| // TODO(bokan): The loop checks for a null parent but don't we still want to |
| // distribute to the root scroll node? |
| @@ -3383,11 +3398,17 @@ void LayerTreeHostImpl::DistributeScrollDelta(ScrollState* scroll_state) { |
| break; |
| } |
| - if (!scroll_node->scrollable) |
| - continue; |
| - |
| - if (CanConsumeDelta(scroll_node, *scroll_state)) |
| + if (scroll_node->scrollable && |
| + CanConsumeDelta(scroll_node, *scroll_state)) |
| current_scroll_chain.push_front(scroll_node); |
| + |
| + if ((x_dominated && |
| + scroll_node->scroll_boundary_behavior.x != |
| + ScrollBoundaryBehavior::kScrollBoundaryBehaviorTypeAuto) || |
| + (!x_dominated && |
| + scroll_node->scroll_boundary_behavior.y != |
| + ScrollBoundaryBehavior::kScrollBoundaryBehaviorTypeAuto)) |
| + break; |
| } |
| } |
| active_tree_->SetCurrentlyScrollingNode( |