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..9a96ea2bfad674b8f7603afbee704627df059a2f 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()); |
|
majidvp
2017/07/05 21:30:03
nit: x_dominant is more appropriate. Also we shoul
sunyunjia
2017/07/14 02:59:00
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; |
|
majidvp
2017/07/05 21:30:03
Please move this to its own function e.g., CanBubb
sunyunjia
2017/07/14 02:59:00
Done.
|
| } |
| } |
| 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()); |
| + 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); |
|
majidvp
2017/07/05 21:30:03
Do I understand this correctly that the reason the
sunyunjia
2017/07/14 02:59:00
Done.
|
| + |
| + if ((x_dominated && |
| + scroll_node->scroll_boundary_behavior.x != |
| + ScrollBoundaryBehavior::kScrollBoundaryBehaviorTypeAuto) || |
| + (!x_dominated && |
| + scroll_node->scroll_boundary_behavior.y != |
| + ScrollBoundaryBehavior::kScrollBoundaryBehaviorTypeAuto)) |
| + break; |
|
majidvp
2017/07/05 21:30:03
ditto. This should be a function called from both
sunyunjia
2017/07/14 02:59:00
Done.
|
| } |
| } |
| active_tree_->SetCurrentlyScrollingNode( |