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 ab28b3454c5a1a1f5c7e6f45047e61167d1ade96..203fa027c755f18343e84ec9d1d5f81bcbbf3df2 100644 |
| --- a/cc/trees/layer_tree_host_impl.cc |
| +++ b/cc/trees/layer_tree_host_impl.cc |
| @@ -2567,16 +2567,15 @@ LayerImpl* LayerTreeHostImpl::FindScrollLayerForDeviceViewportPoint( |
| } |
| } |
| + // The outer viewport layer represents the viewport. |
| + if (potentially_scrolling_layer_impl == InnerViewportScrollLayer()) |
| + potentially_scrolling_layer_impl = OuterViewportScrollLayer(); |
| + |
| // Falling back to the root scroll layer ensures generation of root overscroll |
| - // notifications. The inner viewport layer represents the viewport during |
| - // scrolling. |
| + // notifications. |
| if (!potentially_scrolling_layer_impl) |
| potentially_scrolling_layer_impl = InnerViewportScrollLayer(); |
|
tdresser
2016/09/23 15:59:58
Shouldn't this be OuterViewportScrollLayer?
bokan
2016/09/23 19:57:01
Yah, I wasn't sure since changing it broke some te
|
| - // The inner viewport layer represents the viewport. |
| - if (potentially_scrolling_layer_impl == OuterViewportScrollLayer()) |
| - potentially_scrolling_layer_impl = InnerViewportScrollLayer(); |
| - |
| if (potentially_scrolling_layer_impl) { |
| // Ensure that final layer scrolls on impl thread (crbug.com/625100) |
| ScrollNode* scroll_node = |
| @@ -2848,19 +2847,18 @@ InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( |
| if (scroll_node) { |
| for (; scroll_tree.parent(scroll_node); |
| scroll_node = scroll_tree.parent(scroll_node)) { |
| - if (!scroll_node->scrollable || |
| - scroll_node->is_outer_viewport_scroll_layer) |
| + if (!scroll_node->scrollable) |
| continue; |
| - if (scroll_node->is_inner_viewport_scroll_layer) { |
| + if (scroll_node->is_outer_viewport_scroll_layer || |
| + scroll_node->is_inner_viewport_scroll_layer) { |
| gfx::Vector2dF scrolled = |
| viewport()->ScrollAnimated(pending_delta, delayed_by); |
| // Viewport::ScrollAnimated returns pending_delta as long as it |
| // starts an animation. |
| if (scrolled == pending_delta) |
| return scroll_status; |
| - pending_delta -= scrolled; |
| - continue; |
| + break; |
| } |
| gfx::Vector2dF scroll_delta = |
| @@ -3003,7 +3001,7 @@ void LayerTreeHostImpl::ApplyScroll(ScrollNode* scroll_node, |
| // details. |
| const float kEpsilon = 0.1f; |
| - if (scroll_node->is_inner_viewport_scroll_layer) { |
| + if (scroll_node->is_outer_viewport_scroll_layer) { |
| bool affect_top_controls = !wheel_scrolling_; |
| Viewport::ScrollResult result = viewport()->ScrollBy( |
| delta, viewport_point, scroll_state->is_direct_manipulation(), |
| @@ -3024,7 +3022,7 @@ void LayerTreeHostImpl::ApplyScroll(ScrollNode* scroll_node, |
| bool scrolled = std::abs(applied_delta.x()) > kEpsilon; |
| scrolled = scrolled || std::abs(applied_delta.y()) > kEpsilon; |
| - if (scrolled && !scroll_node->is_inner_viewport_scroll_layer) { |
| + if (scrolled && !scroll_node->is_outer_viewport_scroll_layer) { |
| // If the applied delta is within 45 degrees of the input |
| // delta, bail out to make it easier to scroll just one layer |
| // in one direction without affecting any of its parents. |
| @@ -3061,11 +3059,9 @@ void LayerTreeHostImpl::DistributeScrollDelta(ScrollState* scroll_state) { |
| scroll_node = scroll_tree.parent(scroll_node)) { |
| if (scroll_node->is_outer_viewport_scroll_layer) { |
| // Don't chain scrolls past the outer viewport scroll layer. Once we |
| - // reach that, we should scroll the viewport, which is represented by |
| - // the inner viewport scroll layer. |
| - ScrollNode* inner_viewport_scroll_node = |
| - scroll_tree.Node(InnerViewportScrollLayer()->scroll_tree_index()); |
| - current_scroll_chain.push_front(inner_viewport_scroll_node); |
| + // reach that, we're viewport scrolling which is special and handled by |
| + // cc's Viewport class. |
| + current_scroll_chain.push_front(scroll_node); |
| break; |
| } |
| @@ -3239,8 +3235,6 @@ void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { |
| LayerImpl* scroll_layer_impl = FindScrollLayerForDeviceViewportPoint( |
| device_viewport_point, InputHandler::TOUCHSCREEN, layer_impl, |
| &scroll_on_main_thread, &main_thread_scrolling_reasons); |
| - if (scroll_layer_impl == InnerViewportScrollLayer()) |
| - scroll_layer_impl = OuterViewportScrollLayer(); |
|
tdresser
2016/09/23 15:59:58
I'm a bit confused by why this was here before, an
bokan
2016/09/23 19:57:01
I believe it's needed because the ScrollbarAnimati
|
| if (scroll_on_main_thread || !scroll_layer_impl) |
| return; |
| @@ -3288,7 +3282,7 @@ void LayerTreeHostImpl::PinchGestureBegin() { |
| client_->RenewTreePriority(); |
| pinch_gesture_end_should_clear_scrolling_layer_ = !CurrentlyScrollingLayer(); |
| active_tree_->SetCurrentlyScrollingLayer( |
| - active_tree_->InnerViewportScrollLayer()); |
| + active_tree_->OuterViewportScrollLayer()); |
| top_controls_manager_->PinchBegin(); |
| } |