| 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 9d04554dcc57cf6d22f6eb4c4bfcac65ad194d65..c3005c8a4bfaa15b1db877b8618f0f341f2d64fc 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -575,21 +575,20 @@ bool LayerTreeHostImpl::IsCurrentlyScrollingLayerAt(
|
|
|
| bool scroll_on_main_thread = false;
|
| uint32_t main_thread_scrolling_reasons;
|
| - LayerImpl* test_layer_impl = FindScrollLayerForDeviceViewportPoint(
|
| + auto* test_scroll_node = FindScrollNodeForDeviceViewportPoint(
|
| device_viewport_point, type, layer_impl, &scroll_on_main_thread,
|
| &main_thread_scrolling_reasons);
|
|
|
| if (scroll_on_main_thread)
|
| return false;
|
|
|
| - int test_scroll_tree_index = test_layer_impl->scroll_tree_index();
|
| - if (scrolling_node->id == test_scroll_tree_index)
|
| + if (scrolling_node == test_scroll_node)
|
| return true;
|
|
|
| // For active scrolling state treat the inner/outer viewports interchangeably.
|
| if (scrolling_node->scrolls_inner_viewport ||
|
| scrolling_node->scrolls_outer_viewport) {
|
| - return test_layer_impl == viewport()->MainScrollLayer();
|
| + return test_scroll_node == OuterViewportScrollNode();
|
| }
|
|
|
| return false;
|
| @@ -2626,7 +2625,7 @@ static bool IsMainThreadScrolling(const InputHandler::ScrollStatus& status,
|
| return false;
|
| }
|
|
|
| -LayerImpl* LayerTreeHostImpl::FindScrollLayerForDeviceViewportPoint(
|
| +ScrollNode* LayerTreeHostImpl::FindScrollNodeForDeviceViewportPoint(
|
| const gfx::PointF& device_viewport_point,
|
| InputHandler::ScrollInputType type,
|
| LayerImpl* layer_impl,
|
| @@ -2651,7 +2650,7 @@ LayerImpl* LayerTreeHostImpl::FindScrollLayerForDeviceViewportPoint(
|
| if (IsMainThreadScrolling(status, scroll_node)) {
|
| *scroll_on_main_thread = true;
|
| *main_thread_scrolling_reasons = status.main_thread_scrolling_reasons;
|
| - return active_tree_->LayerById(scroll_node->owning_layer_id);
|
| + return scroll_node;
|
| }
|
|
|
| if (status.thread == InputHandler::SCROLL_ON_IMPL_THREAD &&
|
| @@ -2681,11 +2680,7 @@ LayerImpl* LayerTreeHostImpl::FindScrollLayerForDeviceViewportPoint(
|
| }
|
| }
|
|
|
| - // TODO(pdr): Refactor this function to directly return |impl_scroll_node|
|
| - // instead of using ScrollNode's owning_layer_id to return a LayerImpl.
|
| - if (!impl_scroll_node)
|
| - return nullptr;
|
| - return active_tree_->LayerById(impl_scroll_node->owning_layer_id);
|
| + return impl_scroll_node;
|
| }
|
|
|
| InputHandler::ScrollStatus LayerTreeHostImpl::ScrollBeginImpl(
|
| @@ -2770,13 +2765,9 @@ InputHandler::ScrollStatus LayerTreeHostImpl::ScrollBegin(
|
| }
|
| }
|
|
|
| - auto* scrolling_layer = FindScrollLayerForDeviceViewportPoint(
|
| + scrolling_node = FindScrollNodeForDeviceViewportPoint(
|
| device_viewport_point, type, layer_impl, &scroll_on_main_thread,
|
| &scroll_status.main_thread_scrolling_reasons);
|
| - ScrollTree& scroll_tree = active_tree_->property_trees()->scroll_tree;
|
| - scrolling_node =
|
| - scrolling_layer ? scroll_tree.Node(scrolling_layer->scroll_tree_index())
|
| - : nullptr;
|
| }
|
|
|
| if (scroll_on_main_thread) {
|
| @@ -3418,44 +3409,44 @@ void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) {
|
|
|
| // Check if mouse is over a scrollbar or not.
|
| // TODO(sahel): get rid of this extera checking when
|
| - // FindScrollLayerForDeviceViewportPoint finds the proper layer for
|
| - // scrolling on main thread when mouse is over scrollbar as well.
|
| - ElementId new_element_id;
|
| + // FindScrollNodeForDeviceViewportPoint finds the proper node for scrolling on
|
| + // the main thread when the mouse is over a scrollbar as well.
|
| + ElementId scroll_element_id;
|
| if (layer_impl && layer_impl->ToScrollbarLayer())
|
| - new_element_id = layer_impl->ToScrollbarLayer()->scroll_element_id();
|
| - if (!new_element_id) {
|
| + scroll_element_id = layer_impl->ToScrollbarLayer()->scroll_element_id();
|
| + if (!scroll_element_id) {
|
| bool scroll_on_main_thread = false;
|
| uint32_t main_thread_scrolling_reasons;
|
| - LayerImpl* scroll_layer_impl = FindScrollLayerForDeviceViewportPoint(
|
| + auto* scroll_node = FindScrollNodeForDeviceViewportPoint(
|
| device_viewport_point, InputHandler::TOUCHSCREEN, layer_impl,
|
| &scroll_on_main_thread, &main_thread_scrolling_reasons);
|
| + if (scroll_node)
|
| + scroll_element_id = scroll_node->element_id;
|
|
|
| // Scrollbars for the viewport are registered with the outer viewport layer.
|
| - if (scroll_layer_impl == InnerViewportScrollLayer())
|
| - scroll_layer_impl = OuterViewportScrollLayer();
|
| -
|
| - if (scroll_layer_impl)
|
| - new_element_id = scroll_layer_impl->element_id();
|
| + if (InnerViewportScrollLayer() && OuterViewportScrollLayer() &&
|
| + scroll_element_id == InnerViewportScrollLayer()->element_id())
|
| + scroll_element_id = OuterViewportScrollLayer()->element_id();
|
| }
|
|
|
| - if (new_element_id != scroll_element_id_mouse_currently_over_) {
|
| + if (scroll_element_id != scroll_element_id_mouse_currently_over_) {
|
| ScrollbarAnimationController* old_animation_controller =
|
| ScrollbarAnimationControllerForElementId(
|
| scroll_element_id_mouse_currently_over_);
|
| if (old_animation_controller) {
|
| old_animation_controller->DidMouseLeave();
|
| }
|
| - scroll_element_id_mouse_currently_over_ = new_element_id;
|
| + scroll_element_id_mouse_currently_over_ = scroll_element_id;
|
| }
|
|
|
| ScrollbarAnimationController* new_animation_controller =
|
| - ScrollbarAnimationControllerForElementId(new_element_id);
|
| + ScrollbarAnimationControllerForElementId(scroll_element_id);
|
| if (!new_animation_controller)
|
| return;
|
|
|
| - int new_layer_id = active_tree_->LayerIdByElementId(new_element_id);
|
| + int scroll_layer_id = active_tree_->LayerIdByElementId(scroll_element_id);
|
| for (ScrollbarLayerImplBase* scrollbar :
|
| - active_tree_->ScrollbarsFor(new_layer_id)) {
|
| + active_tree_->ScrollbarsFor(scroll_layer_id)) {
|
| new_animation_controller->DidMouseMoveNear(
|
| scrollbar->orientation(),
|
| DeviceSpaceDistanceToLayer(device_viewport_point, scrollbar) /
|
|
|