Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(414)

Side by Side Diff: content/browser/renderer_host/render_widget_host_input_event_router.cc

Issue 2928793003: Re-target wheel events only when a new scroll sequence has started. (Closed)
Patch Set: review comments addressed. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" 5 #include "content/browser/renderer_host/render_widget_host_input_event_router.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "cc/quads/surface_draw_quad.h" 10 #include "cc/quads/surface_draw_quad.h"
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 if (root_view->IsMouseLocked()) { 277 if (root_view->IsMouseLocked()) {
278 target = RenderWidgetHostImpl::From(root_view->GetRenderWidgetHost()) 278 target = RenderWidgetHostImpl::From(root_view->GetRenderWidgetHost())
279 ->delegate() 279 ->delegate()
280 ->GetMouseLockWidget() 280 ->GetMouseLockWidget()
281 ->GetView(); 281 ->GetView();
282 if (!root_view->TransformPointToCoordSpaceForView( 282 if (!root_view->TransformPointToCoordSpaceForView(
283 gfx::Point(event->PositionInWidget().x, 283 gfx::Point(event->PositionInWidget().x,
284 event->PositionInWidget().y), 284 event->PositionInWidget().y),
285 target, &transformed_point)) 285 target, &transformed_point))
286 return; 286 return;
287 } else { 287 } else if (root_view->wheel_scroll_latching_enabled()) {
288 if (event->phase == blink::WebMouseWheelEvent::kPhaseBegan) {
289 wheel_target_.target = FindEventTarget(
290 root_view,
291 gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y),
292 &transformed_point);
293 wheel_target_.delta =
294 transformed_point -
295 gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y);
296 target = wheel_target_.target;
297 } else {
298 if (wheel_target_.target) {
299 target = wheel_target_.target;
300 transformed_point = gfx::Point(event->PositionInWidget().x,
301 event->PositionInWidget().y) +
302 wheel_target_.delta;
303 }
304 }
305
306 } else { // !root_view->IsMouseLocked() &&
307 // !root_view->wheel_scroll_latching_enabled()
288 target = FindEventTarget( 308 target = FindEventTarget(
289 root_view, 309 root_view,
290 gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y), 310 gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y),
291 &transformed_point); 311 &transformed_point);
292 } 312 }
293 313
294 if (!target) 314 if (!target)
295 return; 315 return;
296 316
297 event->SetPositionInWidget(transformed_point.x(), transformed_point.y()); 317 event->SetPositionInWidget(transformed_point.x(), transformed_point.y());
298 target->ProcessMouseWheelEvent(*event, latency); 318 target->ProcessMouseWheelEvent(*event, latency);
319
320 DCHECK(root_view->wheel_scroll_latching_enabled() || !wheel_target_.target);
321 if (event->phase == blink::WebMouseWheelEvent::kPhaseEnded ||
322 event->momentum_phase == blink::WebMouseWheelEvent::kPhaseEnded) {
323 wheel_target_.target = nullptr;
324 }
299 } 325 }
300 326
301 void RenderWidgetHostInputEventRouter::RouteGestureEvent( 327 void RenderWidgetHostInputEventRouter::RouteGestureEvent(
302 RenderWidgetHostViewBase* root_view, 328 RenderWidgetHostViewBase* root_view,
303 blink::WebGestureEvent* event, 329 blink::WebGestureEvent* event,
304 const ui::LatencyInfo& latency) { 330 const ui::LatencyInfo& latency) {
305 if (event->IsTargetViewport()) { 331 if (event->IsTargetViewport()) {
306 root_view->ProcessGestureEvent(*event, latency); 332 root_view->ProcessGestureEvent(*event, latency);
307 return; 333 return;
308 } 334 }
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 std::vector<RenderWidgetHostView*> 873 std::vector<RenderWidgetHostView*>
848 RenderWidgetHostInputEventRouter::GetRenderWidgetHostViewsForTests() const { 874 RenderWidgetHostInputEventRouter::GetRenderWidgetHostViewsForTests() const {
849 std::vector<RenderWidgetHostView*> hosts; 875 std::vector<RenderWidgetHostView*> hosts;
850 for (auto entry : owner_map_) 876 for (auto entry : owner_map_)
851 hosts.push_back(entry.second); 877 hosts.push_back(entry.second);
852 878
853 return hosts; 879 return hosts;
854 } 880 }
855 881
856 } // namespace content 882 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_input_event_router.h ('k') | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698