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 d47f504871741c890f5daf7280c13c7412cf7e2e..14f8208a35fcb032a554d4c2b8af6ef9f5e538dd 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -209,6 +209,7 @@ LayerTreeHostImpl::LayerTreeHostImpl( |
wheel_scrolling_(false), |
scroll_affects_scroll_handler_(false), |
scroll_layer_id_when_mouse_over_scrollbar_(Layer::INVALID_ID), |
+ scroll_layer_id_when_mouse_near_scrollbar_(Layer::INVALID_ID), |
captured_scrollbar_layer_id_(Layer::INVALID_ID), |
tile_priorities_dirty_(false), |
settings_(settings), |
@@ -3237,6 +3238,7 @@ void LayerTreeHostImpl::MouseUp() { |
} |
void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { |
+ scroll_layer_id_when_mouse_near_scrollbar_ = Layer::INVALID_ID; |
gfx::PointF device_viewport_point = gfx::ScalePoint( |
gfx::PointF(viewport_point), active_tree_->device_scale_factor()); |
LayerImpl* layer_impl = |
@@ -3261,6 +3263,8 @@ void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { |
if (!animation_controller) |
return; |
+ scroll_layer_id_when_mouse_near_scrollbar_ = scroll_layer_impl->id(); |
+ |
float distance_to_scrollbar = std::numeric_limits<float>::max(); |
for (ScrollbarLayerImplBase* scrollbar : |
ScrollbarsFor(scroll_layer_impl->id())) |
@@ -3272,6 +3276,26 @@ void LayerTreeHostImpl::MouseMoveAt(const gfx::Point& viewport_point) { |
active_tree_->device_scale_factor()); |
} |
+void LayerTreeHostImpl::MouseLeave() { |
+ // scroll_layer_id_when_mouse_near_scrollbar_ and |
+ // scroll_layer_id_when_mouse_over_scrollbar_ should not be both true |
+ DCHECK(scroll_layer_id_when_mouse_near_scrollbar_ == Layer::INVALID_ID || |
+ scroll_layer_id_when_mouse_over_scrollbar_ == Layer::INVALID_ID); |
+ |
+ int scroll_layer_id = |
+ scroll_layer_id_when_mouse_near_scrollbar_ != Layer::INVALID_ID |
+ ? scroll_layer_id_when_mouse_near_scrollbar_ |
+ : scroll_layer_id_when_mouse_over_scrollbar_; |
+ |
+ ScrollbarAnimationController* animation_controller = |
+ ScrollbarAnimationControllerForId(scroll_layer_id); |
+ |
+ if (animation_controller) |
+ animation_controller->DidMouseMoveOffScrollbar(); |
+ |
+ scroll_layer_id_when_mouse_over_scrollbar_ = Layer::INVALID_ID; |
+} |
+ |
void LayerTreeHostImpl::HandleMouseOverScrollbar(LayerImpl* layer_impl) { |
int new_id = Layer::INVALID_ID; |
if (layer_impl && layer_impl->ToScrollbarLayer()) |