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

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: browser test updated. 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 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 {
288 target = FindEventTarget( 288 if (root_view->wheel_scroll_latching_enabled()) {
289 root_view, 289 if (event->phase == blink::WebMouseWheelEvent::kPhaseBegan) {
290 gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y), 290 wheel_target_.target =
291 &transformed_point); 291 FindEventTarget(root_view,
292 gfx::Point(event->PositionInWidget().x,
293 event->PositionInWidget().y),
294 &transformed_point);
295 wheel_target_.delta =
296 transformed_point - gfx::Point(event->PositionInWidget().x,
297 event->PositionInWidget().y);
298 target = wheel_target_.target;
299 } else {
300 if (wheel_target_.target) {
301 target = wheel_target_.target;
302 transformed_point = gfx::Point(event->PositionInWidget().x,
303 event->PositionInWidget().y) +
304 wheel_target_.delta;
305 }
306 }
307
308 } else { // !root_view->wheel_scroll_latching_enabled()
309 target = FindEventTarget(
310 root_view,
311 gfx::Point(event->PositionInWidget().x, event->PositionInWidget().y),
312 &transformed_point);
313 }
292 } 314 }
293 315
294 if (!target) 316 if (!target)
295 return; 317 return;
296 318
297 event->SetPositionInWidget(transformed_point.x(), transformed_point.y()); 319 event->SetPositionInWidget(transformed_point.x(), transformed_point.y());
298 target->ProcessMouseWheelEvent(*event, latency); 320 target->ProcessMouseWheelEvent(*event, latency);
321 if (root_view->wheel_scroll_latching_enabled() &&
322 (event->phase == blink::WebMouseWheelEvent::kPhaseEnded ||
323 event->momentum_phase == blink::WebMouseWheelEvent::kPhaseEnded)) {
324 wheel_target_.target = nullptr;
tdresser 2017/06/09 18:13:11 This isn't needed, is it?
sahel 2017/06/13 15:43:20 By resetting the target on end events we won't sen
tdresser 2017/06/13 15:48:50 Maybe leave it, and add a DCHECK that the target i
sahel 2017/06/14 19:09:43 We agreed to leave it as it is since sometimes Fin
325 }
299 } 326 }
300 327
301 void RenderWidgetHostInputEventRouter::RouteGestureEvent( 328 void RenderWidgetHostInputEventRouter::RouteGestureEvent(
302 RenderWidgetHostViewBase* root_view, 329 RenderWidgetHostViewBase* root_view,
303 blink::WebGestureEvent* event, 330 blink::WebGestureEvent* event,
304 const ui::LatencyInfo& latency) { 331 const ui::LatencyInfo& latency) {
305 if (event->IsTargetViewport()) { 332 if (event->IsTargetViewport()) {
306 root_view->ProcessGestureEvent(*event, latency); 333 root_view->ProcessGestureEvent(*event, latency);
307 return; 334 return;
308 } 335 }
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 std::vector<RenderWidgetHostView*> 874 std::vector<RenderWidgetHostView*>
848 RenderWidgetHostInputEventRouter::GetRenderWidgetHostViewsForTests() const { 875 RenderWidgetHostInputEventRouter::GetRenderWidgetHostViewsForTests() const {
849 std::vector<RenderWidgetHostView*> hosts; 876 std::vector<RenderWidgetHostView*> hosts;
850 for (auto entry : owner_map_) 877 for (auto entry : owner_map_)
851 hosts.push_back(entry.second); 878 hosts.push_back(entry.second);
852 879
853 return hosts; 880 return hosts;
854 } 881 }
855 882
856 } // namespace content 883 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698