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

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

Issue 2270953002: Merge the mojo blink type converter into ui/events/blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/web_input_event.h" 5 #include "ui/events/blink/web_input_event.h"
6 6
7 #include "ui/events/base_event_utils.h" 7 #include "ui/events/base_event_utils.h"
8 #include "ui/events/blink/blink_event_util.h" 8 #include "ui/events/blink/blink_event_util.h"
9 #include "ui/events/event.h" 9 #include "ui/events/event.h"
10 #include "ui/events/event_utils.h" 10 #include "ui/events/event_utils.h"
11 #include "ui/events/keycodes/dom/keycode_converter.h" 11 #include "ui/events/keycodes/dom/keycode_converter.h"
12 #include "ui/events/keycodes/keyboard_code_conversion.h" 12 #include "ui/events/keycodes/keyboard_code_conversion.h"
13 13
14 #if defined(OS_WIN) 14 #if defined(OS_WIN)
15 #include "ui/events/blink/web_input_event_builders_win.h" 15 #include "ui/events/blink/web_input_event_builders_win.h"
16 #endif 16 #endif
17 17
18 namespace ui { 18 namespace ui {
19 19
20 namespace { 20 namespace {
21 // Used for scrolling. This matches Firefox behavior.
22 const int kPixelsPerTick = 53;
23 21
24 gfx::Point GetScreenLocationFromEvent( 22 gfx::Point GetScreenLocationFromEvent(
25 const LocatedEvent& event, 23 const LocatedEvent& event,
26 const base::Callback<gfx::Point(const LocatedEvent& event)>& 24 const base::Callback<gfx::Point(const LocatedEvent& event)>&
27 screen_location_callback) { 25 screen_location_callback) {
28 DCHECK(!screen_location_callback.is_null()); 26 DCHECK(!screen_location_callback.is_null());
29 return event.target() ? screen_location_callback.Run(event) 27 return event.target() ? screen_location_callback.Run(event)
30 : event.root_location(); 28 : event.root_location();
31 } 29 }
32 30
(...skipping 26 matching lines...) Expand all
59 } // namespace 57 } // namespace
60 58
61 #if defined(OS_WIN) 59 #if defined(OS_WIN)
62 // On Windows, we can just use the builtin WebKit factory methods to fully 60 // On Windows, we can just use the builtin WebKit factory methods to fully
63 // construct our pre-translated events. 61 // construct our pre-translated events.
64 62
65 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( 63 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent(
66 const base::NativeEvent& native_event, 64 const base::NativeEvent& native_event,
67 const base::TimeTicks& time_stamp, 65 const base::TimeTicks& time_stamp,
68 blink::WebPointerProperties::PointerType pointer_type) { 66 blink::WebPointerProperties::PointerType pointer_type) {
69 return WebMouseEventBuilder::Build(native_event.hwnd, native_event.message, 67 return WebMouseEventBuilder::Build(
70 native_event.wParam, native_event.lParam, 68 native_event.hwnd, native_event.message, native_event.wParam,
71 ui::EventTimeStampToSeconds(time_stamp), 69 native_event.lParam, EventTimeStampToSeconds(time_stamp), pointer_type);
72 pointer_type);
73 } 70 }
74 71
75 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent( 72 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent(
76 const base::NativeEvent& native_event, 73 const base::NativeEvent& native_event,
77 const base::TimeTicks& time_stamp, 74 const base::TimeTicks& time_stamp,
78 blink::WebPointerProperties::PointerType pointer_type) { 75 blink::WebPointerProperties::PointerType pointer_type) {
79 return WebMouseWheelEventBuilder::Build( 76 return WebMouseWheelEventBuilder::Build(
80 native_event.hwnd, native_event.message, native_event.wParam, 77 native_event.hwnd, native_event.message, native_event.wParam,
81 native_event.lParam, ui::EventTimeStampToSeconds(time_stamp), 78 native_event.lParam, EventTimeStampToSeconds(time_stamp), pointer_type);
82 pointer_type);
83 } 79 }
84 80
85 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( 81 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
86 const base::NativeEvent& native_event, 82 const base::NativeEvent& native_event,
87 const base::TimeTicks& time_stamp) { 83 const base::TimeTicks& time_stamp) {
88 return WebKeyboardEventBuilder::Build( 84 return WebKeyboardEventBuilder::Build(
89 native_event.hwnd, native_event.message, native_event.wParam, 85 native_event.hwnd, native_event.message, native_event.wParam,
90 native_event.lParam, ui::EventTimeStampToSeconds(time_stamp)); 86 native_event.lParam, EventTimeStampToSeconds(time_stamp));
91 } 87 }
92 #endif // defined(OS_WIN) 88 #endif // defined(OS_WIN)
93 89
94 blink::WebKeyboardEvent MakeWebKeyboardEventFromUiEvent(const KeyEvent& event) { 90 blink::WebKeyboardEvent MakeWebKeyboardEventFromUiEvent(const KeyEvent& event) {
95 blink::WebKeyboardEvent webkit_event; 91 blink::WebKeyboardEvent webkit_event;
96 92
97 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); 93 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
98 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()) | 94 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()) |
99 DomCodeToWebInputEventModifiers(event.code()); 95 DomCodeToWebInputEventModifiers(event.code());
100 96
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 offset_ordinal_y = event.x_offset_ordinal(); 143 offset_ordinal_y = event.x_offset_ordinal();
148 } else { 144 } else {
149 webkit_event.deltaX = event.x_offset(); 145 webkit_event.deltaX = event.x_offset();
150 webkit_event.deltaY = event.y_offset(); 146 webkit_event.deltaY = event.y_offset();
151 offset_ordinal_x = event.x_offset_ordinal(); 147 offset_ordinal_x = event.x_offset_ordinal();
152 offset_ordinal_y = event.y_offset_ordinal(); 148 offset_ordinal_y = event.y_offset_ordinal();
153 } 149 }
154 150
155 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f) 151 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f)
156 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX; 152 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX;
157 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; 153 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta;
158 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; 154 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta;
159 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f) 155 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f)
160 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY; 156 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY;
161 157
162 webkit_event.pointerType = 158 webkit_event.pointerType =
163 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 159 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
164 return webkit_event; 160 return webkit_event;
165 } 161 }
166 162
167 blink::WebGestureEvent MakeWebGestureEventFromUiEvent( 163 blink::WebGestureEvent MakeWebGestureEventFromUiEvent(
168 const ScrollEvent& event) { 164 const ScrollEvent& event) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 // 209 //
214 // The exception is mouse events on linux. The MouseEvent contains enough 210 // The exception is mouse events on linux. The MouseEvent contains enough
215 // necessary information to construct a WebMouseEvent. So instead of extracting 211 // necessary information to construct a WebMouseEvent. So instead of extracting
216 // the information from the XEvent, which can be tricky when supporting both 212 // the information from the XEvent, which can be tricky when supporting both
217 // XInput2 and XInput, the WebMouseEvent is constructed from the 213 // XInput2 and XInput, the WebMouseEvent is constructed from the
218 // MouseEvent. This will not be necessary once only XInput2 is supported. 214 // MouseEvent. This will not be necessary once only XInput2 is supported.
219 // 215 //
220 216
221 blink::WebMouseEvent MakeWebMouseEvent( 217 blink::WebMouseEvent MakeWebMouseEvent(
222 const MouseEvent& event, 218 const MouseEvent& event,
223 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& 219 const base::Callback<gfx::Point(const LocatedEvent& event)>&
224 screen_location_callback) { 220 screen_location_callback) {
225 // Construct an untranslated event from the platform event data. 221 // Construct an untranslated event from the platform event data.
226 blink::WebMouseEvent webkit_event = 222 blink::WebMouseEvent webkit_event =
227 #if defined(OS_WIN) 223 #if defined(OS_WIN)
228 // On Windows we have WM_ events comming from desktop and pure ui::Events 224 // On Windows we have WM_ events comming from desktop and pure Events
229 // comming from metro mode. 225 // comming from metro mode.
230 event.native_event().message && (event.type() != ET_MOUSE_EXITED) 226 event.native_event().message && (event.type() != ET_MOUSE_EXITED)
231 ? MakeUntranslatedWebMouseEventFromNativeEvent( 227 ? MakeUntranslatedWebMouseEventFromNativeEvent(
232 event.native_event(), event.time_stamp(), 228 event.native_event(), event.time_stamp(),
233 EventPointerTypeToWebPointerType( 229 EventPointerTypeToWebPointerType(
234 event.pointer_details().pointer_type)) 230 event.pointer_details().pointer_type))
235 : MakeWebMouseEventFromUiEvent(event); 231 : MakeWebMouseEventFromUiEvent(event);
236 #else 232 #else
237 MakeWebMouseEventFromUiEvent(event); 233 MakeWebMouseEventFromUiEvent(event);
238 #endif 234 #endif
(...skipping 10 matching lines...) Expand all
249 const gfx::Point screen_point = 245 const gfx::Point screen_point =
250 GetScreenLocationFromEvent(event, screen_location_callback); 246 GetScreenLocationFromEvent(event, screen_location_callback);
251 webkit_event.globalX = screen_point.x(); 247 webkit_event.globalX = screen_point.x();
252 webkit_event.globalY = screen_point.y(); 248 webkit_event.globalY = screen_point.y();
253 249
254 return webkit_event; 250 return webkit_event;
255 } 251 }
256 252
257 blink::WebMouseWheelEvent MakeWebMouseWheelEvent( 253 blink::WebMouseWheelEvent MakeWebMouseWheelEvent(
258 const MouseWheelEvent& event, 254 const MouseWheelEvent& event,
259 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& 255 const base::Callback<gfx::Point(const LocatedEvent& event)>&
260 screen_location_callback) { 256 screen_location_callback) {
261 #if defined(OS_WIN) 257 #if defined(OS_WIN)
262 // Construct an untranslated event from the platform event data. 258 // Construct an untranslated event from the platform event data.
263 blink::WebMouseWheelEvent webkit_event = 259 blink::WebMouseWheelEvent webkit_event =
264 event.native_event().message 260 event.native_event().message
265 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( 261 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent(
266 event.native_event(), event.time_stamp(), 262 event.native_event(), event.time_stamp(),
267 EventPointerTypeToWebPointerType( 263 EventPointerTypeToWebPointerType(
268 event.pointer_details().pointer_type)) 264 event.pointer_details().pointer_type))
269 : MakeWebMouseWheelEventFromUiEvent(event); 265 : MakeWebMouseWheelEventFromUiEvent(event);
(...skipping 10 matching lines...) Expand all
280 const gfx::Point screen_point = 276 const gfx::Point screen_point =
281 GetScreenLocationFromEvent(event, screen_location_callback); 277 GetScreenLocationFromEvent(event, screen_location_callback);
282 webkit_event.globalX = screen_point.x(); 278 webkit_event.globalX = screen_point.x();
283 webkit_event.globalY = screen_point.y(); 279 webkit_event.globalY = screen_point.y();
284 280
285 return webkit_event; 281 return webkit_event;
286 } 282 }
287 283
288 blink::WebMouseWheelEvent MakeWebMouseWheelEvent( 284 blink::WebMouseWheelEvent MakeWebMouseWheelEvent(
289 const ScrollEvent& event, 285 const ScrollEvent& event,
290 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& 286 const base::Callback<gfx::Point(const LocatedEvent& event)>&
291 screen_location_callback) { 287 screen_location_callback) {
292 #if defined(OS_WIN) 288 #if defined(OS_WIN)
293 // Construct an untranslated event from the platform event data. 289 // Construct an untranslated event from the platform event data.
294 blink::WebMouseWheelEvent webkit_event = 290 blink::WebMouseWheelEvent webkit_event =
295 event.native_event().message 291 event.native_event().message
296 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( 292 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent(
297 event.native_event(), event.time_stamp(), 293 event.native_event(), event.time_stamp(),
298 EventPointerTypeToWebPointerType( 294 EventPointerTypeToWebPointerType(
299 event.pointer_details().pointer_type)) 295 event.pointer_details().pointer_type))
300 : MakeWebMouseWheelEventFromUiEvent(event); 296 : MakeWebMouseWheelEventFromUiEvent(event);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 webkit_event.domCode = static_cast<int>(event.code()); 328 webkit_event.domCode = static_cast<int>(event.code());
333 webkit_event.domKey = static_cast<int>(event.GetDomKey()); 329 webkit_event.domKey = static_cast<int>(event.GetDomKey());
334 return webkit_event; 330 return webkit_event;
335 } 331 }
336 #endif 332 #endif
337 return MakeWebKeyboardEventFromUiEvent(event); 333 return MakeWebKeyboardEventFromUiEvent(event);
338 } 334 }
339 335
340 blink::WebGestureEvent MakeWebGestureEvent( 336 blink::WebGestureEvent MakeWebGestureEvent(
341 const GestureEvent& event, 337 const GestureEvent& event,
342 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& 338 const base::Callback<gfx::Point(const LocatedEvent& event)>&
343 screen_location_callback) { 339 screen_location_callback) {
344 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUIEvent(event); 340 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUIEvent(event);
345 341
346 gesture_event.x = event.x(); 342 gesture_event.x = event.x();
347 gesture_event.y = event.y(); 343 gesture_event.y = event.y();
348 344
349 const gfx::Point screen_point = 345 const gfx::Point screen_point =
350 GetScreenLocationFromEvent(event, screen_location_callback); 346 GetScreenLocationFromEvent(event, screen_location_callback);
351 gesture_event.globalX = screen_point.x(); 347 gesture_event.globalX = screen_point.x();
352 gesture_event.globalY = screen_point.y(); 348 gesture_event.globalY = screen_point.y();
353 349
354 return gesture_event; 350 return gesture_event;
355 } 351 }
356 352
357 blink::WebGestureEvent MakeWebGestureEvent( 353 blink::WebGestureEvent MakeWebGestureEvent(
358 const ScrollEvent& event, 354 const ScrollEvent& event,
359 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& 355 const base::Callback<gfx::Point(const LocatedEvent& event)>&
360 screen_location_callback) { 356 screen_location_callback) {
361 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUiEvent(event); 357 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUiEvent(event);
362 gesture_event.x = event.x(); 358 gesture_event.x = event.x();
363 gesture_event.y = event.y(); 359 gesture_event.y = event.y();
364 360
365 const gfx::Point screen_point = 361 const gfx::Point screen_point =
366 GetScreenLocationFromEvent(event, screen_location_callback); 362 GetScreenLocationFromEvent(event, screen_location_callback);
367 gesture_event.globalX = screen_point.x(); 363 gesture_event.globalX = screen_point.x();
368 gesture_event.globalY = screen_point.y(); 364 gesture_event.globalY = screen_point.y();
369 365
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); 436 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
441 437
442 if ((event.flags() & EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) { 438 if ((event.flags() & EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) {
443 webkit_event.deltaX = event.y_offset(); 439 webkit_event.deltaX = event.y_offset();
444 webkit_event.deltaY = 0; 440 webkit_event.deltaY = 0;
445 } else { 441 } else {
446 webkit_event.deltaX = event.x_offset(); 442 webkit_event.deltaX = event.x_offset();
447 webkit_event.deltaY = event.y_offset(); 443 webkit_event.deltaY = event.y_offset();
448 } 444 }
449 445
450 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; 446 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta;
451 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; 447 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta;
452 448
453 webkit_event.tiltX = roundf(event.pointer_details().tilt_x); 449 webkit_event.tiltX = roundf(event.pointer_details().tilt_x);
454 webkit_event.tiltY = roundf(event.pointer_details().tilt_y); 450 webkit_event.tiltY = roundf(event.pointer_details().tilt_y);
455 webkit_event.force = event.pointer_details().force; 451 webkit_event.force = event.pointer_details().force;
456 webkit_event.pointerType = 452 webkit_event.pointerType =
457 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 453 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
458 454
459 return webkit_event; 455 return webkit_event;
460 } 456 }
461 457
458 blink::WebTouchEvent MakeWebTouchEvent(
459 const PointerEvent& event,
460 const base::Callback<gfx::Point(const LocatedEvent& event)>&
461 screen_location_callback) {
sadrul 2016/08/24 18:05:36 Let's leave this out for now. Explanation: WebTou
jonross 2016/08/25 15:11:59 Done.
462 blink::WebTouchEvent web_event;
463 blink::WebTouchPoint* touch = &web_event.touches[event.pointer_id()];
464
465 // TODO(jonross): we will need to buffer input events, as blink expects all
466 // active touch points to be in each WebInputEvent (crbug.com/578160)
467 touch->position.x = event.x();
468 touch->position.y = event.y();
469 const gfx::Point screen_point =
470 GetScreenLocationFromEvent(event, screen_location_callback);
471 touch->screenPosition.x = screen_point.x();
472 touch->screenPosition.y = screen_point.y();
473
474 touch->pointerType = blink::WebPointerProperties::PointerType::Touch;
475 touch->radiusX = event.pointer_details().radius_x;
476 touch->radiusY = event.pointer_details().radius_y;
477
478 web_event.modifiers = EventFlagsToWebEventModifiers(event.flags());
479 web_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
480 web_event.uniqueTouchEventId = GetNextTouchEventId();
481
482 switch (event.type()) {
483 case ET_POINTER_DOWN:
484 web_event.type = blink::WebInputEvent::TouchStart;
485 touch->state = blink::WebTouchPoint::StatePressed;
486 break;
487 case ET_POINTER_UP:
488 web_event.type = blink::WebInputEvent::TouchEnd;
489 touch->state = blink::WebTouchPoint::StateReleased;
490 break;
491 case ET_POINTER_MOVED:
492 web_event.type = blink::WebInputEvent::TouchMove;
493 touch->state = blink::WebTouchPoint::StateMoved;
494 break;
495 case ET_POINTER_CANCELLED:
496 web_event.type = blink::WebInputEvent::TouchCancel;
497 touch->state = blink::WebTouchPoint::StateCancelled;
498 break;
499 default:
500 NOTIMPLEMENTED() << "Received non touch pointer event action: "
501 << event.type();
502 break;
503 }
504 return web_event;
505 }
506
462 } // namespace ui 507 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698