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

Side by Side Diff: ui/events/blink/input_handler_proxy.cc

Issue 1646663002: Refactor Scroll Customization to share cc::ScrollStateData with blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix linking. Created 4 years, 10 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
« no previous file with comments | « third_party/WebKit/public/platform/WebScrollStateData.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ui/events/blink/input_handler_proxy.h" 5 #include "ui/events/blink/input_handler_proxy.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 116
117 WebGestureEvent ObtainGestureScrollBegin(const WebGestureEvent& event) { 117 WebGestureEvent ObtainGestureScrollBegin(const WebGestureEvent& event) {
118 WebGestureEvent scroll_begin_event = event; 118 WebGestureEvent scroll_begin_event = event;
119 scroll_begin_event.type = WebInputEvent::GestureScrollBegin; 119 scroll_begin_event.type = WebInputEvent::GestureScrollBegin;
120 scroll_begin_event.data.scrollBegin.deltaXHint = 0; 120 scroll_begin_event.data.scrollBegin.deltaXHint = 0;
121 scroll_begin_event.data.scrollBegin.deltaYHint = 0; 121 scroll_begin_event.data.scrollBegin.deltaYHint = 0;
122 return scroll_begin_event; 122 return scroll_begin_event;
123 } 123 }
124 124
125 cc::ScrollState CreateScrollStateForGesture(const WebGestureEvent& event) { 125 cc::ScrollState CreateScrollStateForGesture(const WebGestureEvent& event) {
126 cc::ScrollStateData scroll_state_data;
126 switch (event.type) { 127 switch (event.type) {
127 case WebInputEvent::GestureScrollBegin: 128 case WebInputEvent::GestureScrollBegin:
128 return cc::ScrollState(0, 0, event.x, event.y, 0, 0, true, false, false); 129 scroll_state_data.start_position_x = event.x;
130 scroll_state_data.start_position_y = event.y;
131 scroll_state_data.is_beginning = true;
132 break;
129 case WebInputEvent::GestureFlingStart: 133 case WebInputEvent::GestureFlingStart:
130 return cc::ScrollState( 134 scroll_state_data.velocity_x = event.data.flingStart.velocityX;
131 0, 0, event.x, event.y, event.data.flingStart.velocityX, 135 scroll_state_data.velocity_y = event.data.flingStart.velocityY;
132 event.data.flingStart.velocityX, true, true, false); 136 scroll_state_data.is_in_inertial_phase = true;
137 break;
133 case WebInputEvent::GestureScrollUpdate: 138 case WebInputEvent::GestureScrollUpdate:
134 return cc::ScrollState(-event.data.scrollUpdate.deltaX, 139 scroll_state_data.delta_x = -event.data.scrollUpdate.deltaX;
135 -event.data.scrollUpdate.deltaY, event.x, event.y, 140 scroll_state_data.delta_y = -event.data.scrollUpdate.deltaY;
136 event.data.scrollUpdate.velocityX, 141 scroll_state_data.velocity_x = event.data.scrollUpdate.velocityX;
137 event.data.scrollUpdate.velocityY, 142 scroll_state_data.velocity_y = event.data.scrollUpdate.velocityY;
138 event.data.scrollUpdate.inertial, false, false); 143 scroll_state_data.is_in_inertial_phase = event.data.scrollUpdate.inertial;
144 break;
139 case WebInputEvent::GestureScrollEnd: 145 case WebInputEvent::GestureScrollEnd:
140 return cc::ScrollState(0, 0, event.x, event.y, 0, 0, false, false, true);
141 case WebInputEvent::GestureFlingCancel: 146 case WebInputEvent::GestureFlingCancel:
142 return cc::ScrollState(0, 0, event.x, event.y, 0, 0, false, true, true); 147 scroll_state_data.is_ending = true;
143 148 break;
144 default: 149 default:
145 NOTREACHED(); 150 NOTREACHED();
146 return cc::ScrollState(0, 0, 0, 0, 0, 0, false, false, false); 151 break;
147 } 152 }
153 return cc::ScrollState(scroll_state_data);
148 } 154 }
149 155
150 void ReportInputEventLatencyUma(const WebInputEvent& event, 156 void ReportInputEventLatencyUma(const WebInputEvent& event,
151 const ui::LatencyInfo& latency_info) { 157 const ui::LatencyInfo& latency_info) {
152 if (!(event.type == WebInputEvent::GestureScrollBegin || 158 if (!(event.type == WebInputEvent::GestureScrollBegin ||
153 event.type == WebInputEvent::GestureScrollUpdate || 159 event.type == WebInputEvent::GestureScrollUpdate ||
154 event.type == WebInputEvent::GesturePinchBegin || 160 event.type == WebInputEvent::GesturePinchBegin ||
155 event.type == WebInputEvent::GesturePinchUpdate || 161 event.type == WebInputEvent::GesturePinchUpdate ||
156 event.type == WebInputEvent::GestureFlingStart)) { 162 event.type == WebInputEvent::GestureFlingStart)) {
157 return; 163 return;
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 result = DID_HANDLE; 463 result = DID_HANDLE;
458 break; 464 break;
459 case cc::InputHandler::SCROLL_IGNORED: 465 case cc::InputHandler::SCROLL_IGNORED:
460 result = DROP_EVENT; 466 result = DROP_EVENT;
461 break; 467 break;
462 default: 468 default:
463 result = DID_NOT_HANDLE; 469 result = DID_NOT_HANDLE;
464 break; 470 break;
465 } 471 }
466 } else { 472 } else {
467 cc::ScrollState scroll_state_begin(0, 0, wheel_event.x, wheel_event.y, 0, 0, 473 cc::ScrollStateData scroll_state_begin_data;
468 true, false, false); 474 scroll_state_begin_data.start_position_x = wheel_event.x;
475 scroll_state_begin_data.start_position_y = wheel_event.y;
476 scroll_state_begin_data.is_beginning = true;
477 cc::ScrollState scroll_state_begin(scroll_state_begin_data);
469 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin( 478 cc::InputHandler::ScrollStatus scroll_status = input_handler_->ScrollBegin(
470 &scroll_state_begin, cc::InputHandler::WHEEL); 479 &scroll_state_begin, cc::InputHandler::WHEEL);
471 480
472 RecordMainThreadScrollingReasons( 481 RecordMainThreadScrollingReasons(
473 wheel_event.type, scroll_status.main_thread_scrolling_reasons); 482 wheel_event.type, scroll_status.main_thread_scrolling_reasons);
474 483
475 switch (scroll_status.thread) { 484 switch (scroll_status.thread) {
476 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: { 485 case cc::InputHandler::SCROLL_ON_IMPL_THREAD: {
477 TRACE_EVENT_INSTANT2("input", 486 TRACE_EVENT_INSTANT2("input",
478 "InputHandlerProxy::handle_input wheel scroll", 487 "InputHandlerProxy::handle_input wheel scroll",
479 TRACE_EVENT_SCOPE_THREAD, "deltaX", 488 TRACE_EVENT_SCOPE_THREAD, "deltaX",
480 scroll_delta.x(), "deltaY", scroll_delta.y()); 489 scroll_delta.x(), "deltaY", scroll_delta.y());
481 cc::ScrollState scroll_state_update(scroll_delta.x(), scroll_delta.y(), 490
482 wheel_event.x, wheel_event.y, 0, 0, 491 cc::ScrollStateData scroll_state_update_data;
483 false, false, false); 492 scroll_state_update_data.delta_x = scroll_delta.x();
493 scroll_state_update_data.delta_y = scroll_delta.y();
494 scroll_state_update_data.start_position_x = wheel_event.x;
495 scroll_state_update_data.start_position_y = wheel_event.y;
496 cc::ScrollState scroll_state_update(scroll_state_update_data);
484 497
485 scroll_result = input_handler_->ScrollBy(&scroll_state_update); 498 scroll_result = input_handler_->ScrollBy(&scroll_state_update);
486 HandleOverscroll(gfx::Point(wheel_event.x, wheel_event.y), 499 HandleOverscroll(gfx::Point(wheel_event.x, wheel_event.y),
487 scroll_result); 500 scroll_result);
488 501
489 cc::ScrollState scroll_state_end(0, 0, wheel_event.x, wheel_event.y, 502 cc::ScrollStateData scroll_state_end_data;
490 0, 0, false, false, true); 503 scroll_state_end_data.is_ending = true;
504 cc::ScrollState scroll_state_end(scroll_state_end_data);
491 input_handler_->ScrollEnd(&scroll_state_end); 505 input_handler_->ScrollEnd(&scroll_state_end);
492 506
493 result = scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT; 507 result = scroll_result.did_scroll ? DID_HANDLE : DROP_EVENT;
494 break; 508 break;
495 } 509 }
496 case cc::InputHandler::SCROLL_IGNORED: 510 case cc::InputHandler::SCROLL_IGNORED:
497 // TODO(jamesr): This should be DROP_EVENT, but in cases where we fail 511 // TODO(jamesr): This should be DROP_EVENT, but in cases where we fail
498 // to properly sync scrollability it's safer to send the event to the 512 // to properly sync scrollability it's safer to send the event to the
499 // main thread. Change back to DROP_EVENT once we have synchronization 513 // main thread. Change back to DROP_EVENT once we have synchronization
500 // bugs sorted out. 514 // bugs sorted out.
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 client_->DidStopFlinging(); 1033 client_->DidStopFlinging();
1020 return true; 1034 return true;
1021 } 1035 }
1022 return false; 1036 return false;
1023 } 1037 }
1024 1038
1025 bool InputHandlerProxy::CancelCurrentFlingWithoutNotifyingClient() { 1039 bool InputHandlerProxy::CancelCurrentFlingWithoutNotifyingClient() {
1026 bool had_fling_animation = !!fling_curve_; 1040 bool had_fling_animation = !!fling_curve_;
1027 if (had_fling_animation && 1041 if (had_fling_animation &&
1028 fling_parameters_.sourceDevice == blink::WebGestureDeviceTouchscreen) { 1042 fling_parameters_.sourceDevice == blink::WebGestureDeviceTouchscreen) {
1029 cc::ScrollState scroll_state(0, 0, fling_parameters_.point.x, 1043 cc::ScrollStateData scroll_state_data;
1030 fling_parameters_.point.y, 0, 0, false, true, 1044 scroll_state_data.is_ending = true;
1031 true); 1045 cc::ScrollState scroll_state(scroll_state_data);
1032 input_handler_->ScrollEnd(&scroll_state); 1046 input_handler_->ScrollEnd(&scroll_state);
1033 TRACE_EVENT_ASYNC_END0( 1047 TRACE_EVENT_ASYNC_END0(
1034 "input", 1048 "input",
1035 "InputHandlerProxy::HandleGestureFling::started", 1049 "InputHandlerProxy::HandleGestureFling::started",
1036 this); 1050 this);
1037 } 1051 }
1038 1052
1039 TRACE_EVENT_INSTANT1("input", 1053 TRACE_EVENT_INSTANT1("input",
1040 "InputHandlerProxy::CancelCurrentFling", 1054 "InputHandlerProxy::CancelCurrentFling",
1041 TRACE_EVENT_SCOPE_THREAD, 1055 TRACE_EVENT_SCOPE_THREAD,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 clipped_increment.height); 1155 clipped_increment.height);
1142 1156
1143 bool did_scroll = false; 1157 bool did_scroll = false;
1144 1158
1145 switch (fling_parameters_.sourceDevice) { 1159 switch (fling_parameters_.sourceDevice) {
1146 case blink::WebGestureDeviceTouchpad: 1160 case blink::WebGestureDeviceTouchpad:
1147 did_scroll = TouchpadFlingScroll(clipped_increment); 1161 did_scroll = TouchpadFlingScroll(clipped_increment);
1148 break; 1162 break;
1149 case blink::WebGestureDeviceTouchscreen: { 1163 case blink::WebGestureDeviceTouchscreen: {
1150 clipped_increment = ToClientScrollIncrement(clipped_increment); 1164 clipped_increment = ToClientScrollIncrement(clipped_increment);
1151 cc::ScrollState scroll_state( 1165 cc::ScrollStateData scroll_state_data;
1152 clipped_increment.width, clipped_increment.height, 1166 scroll_state_data.delta_x = clipped_increment.width;
1153 fling_parameters_.point.x, fling_parameters_.point.y, 1167 scroll_state_data.delta_y = clipped_increment.height;
1154 clipped_velocity.width, clipped_velocity.height, false, true, false); 1168 scroll_state_data.velocity_x = clipped_velocity.width;
1169 scroll_state_data.velocity_y = clipped_velocity.height;
1170 scroll_state_data.is_in_inertial_phase = true;
1171 cc::ScrollState scroll_state(scroll_state_data);
1155 cc::InputHandlerScrollResult scroll_result = 1172 cc::InputHandlerScrollResult scroll_result =
1156 input_handler_->ScrollBy(&scroll_state); 1173 input_handler_->ScrollBy(&scroll_state);
1157 HandleOverscroll(fling_parameters_.point, scroll_result); 1174 HandleOverscroll(fling_parameters_.point, scroll_result);
1158 did_scroll = scroll_result.did_scroll; 1175 did_scroll = scroll_result.did_scroll;
1159 } break; 1176 } break;
1160 case blink::WebGestureDeviceUninitialized: 1177 case blink::WebGestureDeviceUninitialized:
1161 NOTREACHED(); 1178 NOTREACHED();
1162 return false; 1179 return false;
1163 } 1180 }
1164 1181
1165 if (did_scroll) { 1182 if (did_scroll) {
1166 fling_parameters_.cumulativeScroll.width += clipped_increment.width; 1183 fling_parameters_.cumulativeScroll.width += clipped_increment.width;
1167 fling_parameters_.cumulativeScroll.height += clipped_increment.height; 1184 fling_parameters_.cumulativeScroll.height += clipped_increment.height;
1168 } 1185 }
1169 1186
1170 // It's possible the provided |increment| is sufficiently small as to not 1187 // It's possible the provided |increment| is sufficiently small as to not
1171 // trigger a scroll, e.g., with a trivial time delta between fling updates. 1188 // trigger a scroll, e.g., with a trivial time delta between fling updates.
1172 // Return true in this case to prevent early fling termination. 1189 // Return true in this case to prevent early fling termination.
1173 if (std::abs(clipped_increment.width) < kScrollEpsilon && 1190 if (std::abs(clipped_increment.width) < kScrollEpsilon &&
1174 std::abs(clipped_increment.height) < kScrollEpsilon) 1191 std::abs(clipped_increment.height) < kScrollEpsilon)
1175 return true; 1192 return true;
1176 1193
1177 return did_scroll; 1194 return did_scroll;
1178 } 1195 }
1179 1196
1180 } // namespace ui 1197 } // namespace ui
OLDNEW
« no previous file with comments | « third_party/WebKit/public/platform/WebScrollStateData.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698