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

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

Issue 2569273002: Add constructors to WebInputEvents and setters so we can work at cleaning up these public structs. (Closed)
Patch Set: Rebase Created 3 years, 11 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"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( 83 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
84 const base::NativeEvent& native_event, 84 const base::NativeEvent& native_event,
85 const base::TimeTicks& time_stamp) { 85 const base::TimeTicks& time_stamp) {
86 return WebKeyboardEventBuilder::Build( 86 return WebKeyboardEventBuilder::Build(
87 native_event.hwnd, native_event.message, native_event.wParam, 87 native_event.hwnd, native_event.message, native_event.wParam,
88 native_event.lParam, EventTimeStampToSeconds(time_stamp)); 88 native_event.lParam, EventTimeStampToSeconds(time_stamp));
89 } 89 }
90 #endif // defined(OS_WIN) 90 #endif // defined(OS_WIN)
91 91
92 blink::WebKeyboardEvent MakeWebKeyboardEventFromUiEvent(const KeyEvent& event) { 92 blink::WebKeyboardEvent MakeWebKeyboardEventFromUiEvent(const KeyEvent& event) {
93 blink::WebKeyboardEvent webkit_event; 93 blink::WebInputEvent::Type type = blink::WebInputEvent::Undefined;
94
95 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
96 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()) |
97 DomCodeToWebInputEventModifiers(event.code());
98
99 switch (event.type()) { 94 switch (event.type()) {
100 case ET_KEY_PRESSED: 95 case ET_KEY_PRESSED:
101 webkit_event.type = event.is_char() ? blink::WebInputEvent::Char 96 type = event.is_char() ? blink::WebInputEvent::Char
102 : blink::WebInputEvent::RawKeyDown; 97 : blink::WebInputEvent::RawKeyDown;
103 break; 98 break;
104 case ET_KEY_RELEASED: 99 case ET_KEY_RELEASED:
105 webkit_event.type = blink::WebInputEvent::KeyUp; 100 type = blink::WebInputEvent::KeyUp;
106 break; 101 break;
107 default: 102 default:
108 NOTREACHED(); 103 NOTREACHED();
109 } 104 }
110 105
106 blink::WebKeyboardEvent webkit_event(
107 type, EventFlagsToWebEventModifiers(event.flags()) |
108 DomCodeToWebInputEventModifiers(event.code()),
109 EventTimeStampToSeconds(event.time_stamp()));
110
111 if (webkit_event.modifiers & blink::WebInputEvent::AltKey) 111 if (webkit_event.modifiers & blink::WebInputEvent::AltKey)
112 webkit_event.isSystemKey = true; 112 webkit_event.isSystemKey = true;
113 113
114 // TODO(dtapuska): crbug.com/570388. Ozone appears to deliver 114 // TODO(dtapuska): crbug.com/570388. Ozone appears to deliver
115 // key_code events that aren't "located" for the keypad like 115 // key_code events that aren't "located" for the keypad like
116 // Windows and X11 do and blink expects. 116 // Windows and X11 do and blink expects.
117 webkit_event.windowsKeyCode = 117 webkit_event.windowsKeyCode =
118 NonLocatedToLocatedKeypadKeyboardCode(event.key_code(), event.code()); 118 NonLocatedToLocatedKeypadKeyboardCode(event.key_code(), event.code());
119 webkit_event.nativeKeyCode = 119 webkit_event.nativeKeyCode =
120 KeycodeConverter::DomCodeToNativeKeycode(event.code()); 120 KeycodeConverter::DomCodeToNativeKeycode(event.code());
121 webkit_event.domCode = static_cast<int>(event.code()); 121 webkit_event.domCode = static_cast<int>(event.code());
122 webkit_event.domKey = static_cast<int>(event.GetDomKey()); 122 webkit_event.domKey = static_cast<int>(event.GetDomKey());
123 webkit_event.unmodifiedText[0] = event.GetUnmodifiedText(); 123 webkit_event.unmodifiedText[0] = event.GetUnmodifiedText();
124 webkit_event.text[0] = event.GetText(); 124 webkit_event.text[0] = event.GetText();
125 125
126 return webkit_event; 126 return webkit_event;
127 } 127 }
128 128
129 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent( 129 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent(
130 const ScrollEvent& event) { 130 const ScrollEvent& event) {
131 blink::WebMouseWheelEvent webkit_event; 131 blink::WebMouseWheelEvent webkit_event(
132 blink::WebInputEvent::MouseWheel,
133 EventFlagsToWebEventModifiers(event.flags()),
134 EventTimeStampToSeconds(event.time_stamp()));
132 135
133 webkit_event.type = blink::WebInputEvent::MouseWheel;
134 webkit_event.button = blink::WebMouseEvent::Button::NoButton; 136 webkit_event.button = blink::WebMouseEvent::Button::NoButton;
135 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags());
136 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
137 webkit_event.hasPreciseScrollingDeltas = true; 137 webkit_event.hasPreciseScrollingDeltas = true;
138 138
139 float offset_ordinal_x = event.x_offset_ordinal(); 139 float offset_ordinal_x = event.x_offset_ordinal();
140 float offset_ordinal_y = event.y_offset_ordinal(); 140 float offset_ordinal_y = event.y_offset_ordinal();
141 webkit_event.deltaX = event.x_offset(); 141 webkit_event.deltaX = event.x_offset();
142 webkit_event.deltaY = event.y_offset(); 142 webkit_event.deltaY = event.y_offset();
143 143
144 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f) 144 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f)
145 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX; 145 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX;
146 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta; 146 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta;
147 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta; 147 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta;
148 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f) 148 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f)
149 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY; 149 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY;
150 150
151 webkit_event.pointerType = 151 webkit_event.pointerType =
152 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 152 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
153 return webkit_event; 153 return webkit_event;
154 } 154 }
155 155
156 blink::WebGestureEvent MakeWebGestureEventFromUiEvent( 156 blink::WebGestureEvent MakeWebGestureEventFromUiEvent(
157 const ScrollEvent& event) { 157 const ScrollEvent& event) {
158 blink::WebGestureEvent webkit_event; 158 blink::WebInputEvent::Type type = blink::WebInputEvent::Undefined;
159
160 switch (event.type()) { 159 switch (event.type()) {
161 case ET_SCROLL_FLING_START: 160 case ET_SCROLL_FLING_START:
162 webkit_event.type = blink::WebInputEvent::GestureFlingStart; 161 type = blink::WebInputEvent::GestureFlingStart;
163 webkit_event.data.flingStart.velocityX = event.x_offset();
164 webkit_event.data.flingStart.velocityY = event.y_offset();
165 break; 162 break;
166 case ET_SCROLL_FLING_CANCEL: 163 case ET_SCROLL_FLING_CANCEL:
167 webkit_event.type = blink::WebInputEvent::GestureFlingCancel; 164 type = blink::WebInputEvent::GestureFlingCancel;
168 break; 165 break;
169 case ET_SCROLL: 166 case ET_SCROLL:
170 NOTREACHED() << "Invalid gesture type: " << event.type(); 167 NOTREACHED() << "Invalid gesture type: " << event.type();
171 break; 168 break;
172 default: 169 default:
173 NOTREACHED() << "Unknown gesture type: " << event.type(); 170 NOTREACHED() << "Unknown gesture type: " << event.type();
174 } 171 }
175 172
173 blink::WebGestureEvent webkit_event(
174 type, EventFlagsToWebEventModifiers(event.flags()),
175 EventTimeStampToSeconds(event.time_stamp()));
176 webkit_event.sourceDevice = blink::WebGestureDeviceTouchpad; 176 webkit_event.sourceDevice = blink::WebGestureDeviceTouchpad;
177 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()); 177 if (event.type() == ET_SCROLL_FLING_START) {
178 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); 178 webkit_event.data.flingStart.velocityX = event.x_offset();
179 webkit_event.data.flingStart.velocityY = event.y_offset();
180 }
181
179 return webkit_event; 182 return webkit_event;
180 } 183 }
181 184
182 blink::WebMouseEvent MakeWebMouseEventFromUiEvent(const MouseEvent& event); 185 blink::WebMouseEvent MakeWebMouseEventFromUiEvent(const MouseEvent& event);
183 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent( 186 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent(
184 const MouseWheelEvent& event); 187 const MouseWheelEvent& event);
185 188
186 // General approach: 189 // General approach:
187 // 190 //
188 // Event only carries a subset of possible event data provided to UI by the host 191 // Event only carries a subset of possible event data provided to UI by the host
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 356
354 const gfx::Point screen_point = 357 const gfx::Point screen_point =
355 GetScreenLocationFromEvent(event, screen_location_callback); 358 GetScreenLocationFromEvent(event, screen_location_callback);
356 gesture_event.globalX = screen_point.x(); 359 gesture_event.globalX = screen_point.x();
357 gesture_event.globalY = screen_point.y(); 360 gesture_event.globalY = screen_point.y();
358 361
359 return gesture_event; 362 return gesture_event;
360 } 363 }
361 364
362 blink::WebGestureEvent MakeWebGestureEventFlingCancel() { 365 blink::WebGestureEvent MakeWebGestureEventFlingCancel() {
363 blink::WebGestureEvent gesture_event; 366 blink::WebGestureEvent gesture_event(
367 blink::WebInputEvent::GestureFlingCancel,
368 blink::WebInputEvent::NoModifiers,
369 EventTimeStampToSeconds(EventTimeForNow()));
364 370
365 // All other fields are ignored on a GestureFlingCancel event. 371 // All other fields are ignored on a GestureFlingCancel event.
366 gesture_event.type = blink::WebInputEvent::GestureFlingCancel;
367 gesture_event.timeStampSeconds = EventTimeStampToSeconds(EventTimeForNow());
368 gesture_event.sourceDevice = blink::WebGestureDeviceTouchpad; 372 gesture_event.sourceDevice = blink::WebGestureDeviceTouchpad;
369 return gesture_event; 373 return gesture_event;
370 } 374 }
371 375
372 blink::WebMouseEvent MakeWebMouseEventFromUiEvent(const MouseEvent& event) { 376 blink::WebMouseEvent MakeWebMouseEventFromUiEvent(const MouseEvent& event) {
373 blink::WebMouseEvent webkit_event; 377 blink::WebInputEvent::Type type = blink::WebInputEvent::Undefined;
378 int click_count = 0;
379 switch (event.type()) {
380 case ET_MOUSE_PRESSED:
381 type = blink::WebInputEvent::MouseDown;
382 click_count = event.GetClickCount();
383 break;
384 case ET_MOUSE_RELEASED:
385 type = blink::WebInputEvent::MouseUp;
386 click_count = event.GetClickCount();
387 break;
388 case ET_MOUSE_EXITED:
389 // TODO(chaopeng) this fix only for chromeos now, should convert ET_MOUSE_EXITED
390 // to MouseLeave when crbug.com/450631 fixed.
391 #if defined(OS_CHROMEOS)
392 type = blink::WebInputEvent::MouseLeave;
393 break;
394 #endif
395 case ET_MOUSE_ENTERED:
396 case ET_MOUSE_MOVED:
397 case ET_MOUSE_DRAGGED:
398 type = blink::WebInputEvent::MouseMove;
399 break;
400 default:
401 NOTIMPLEMENTED() << "Received unexpected event: " << event.type();
402 break;
403 }
374 404
375 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()); 405 blink::WebMouseEvent webkit_event(
376 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); 406 type, EventFlagsToWebEventModifiers(event.flags()),
407 EventTimeStampToSeconds(event.time_stamp()));
377 webkit_event.button = blink::WebMouseEvent::Button::NoButton; 408 webkit_event.button = blink::WebMouseEvent::Button::NoButton;
378 int button_flags = event.flags(); 409 int button_flags = event.flags();
379 if (event.type() == ET_MOUSE_PRESSED || event.type() == ET_MOUSE_RELEASED) { 410 if (event.type() == ET_MOUSE_PRESSED || event.type() == ET_MOUSE_RELEASED) {
380 // We want to use changed_button_flags() for mouse pressed & released. 411 // We want to use changed_button_flags() for mouse pressed & released.
381 // These flags can be used only if they are set which is not always the case 412 // These flags can be used only if they are set which is not always the case
382 // (see e.g. GetChangedMouseButtonFlagsFromNative() in events_win.cc). 413 // (see e.g. GetChangedMouseButtonFlagsFromNative() in events_win.cc).
383 if (event.changed_button_flags()) 414 if (event.changed_button_flags())
384 button_flags = event.changed_button_flags(); 415 button_flags = event.changed_button_flags();
385 } 416 }
386 if (button_flags & EF_LEFT_MOUSE_BUTTON) 417 if (button_flags & EF_LEFT_MOUSE_BUTTON)
387 webkit_event.button = blink::WebMouseEvent::Button::Left; 418 webkit_event.button = blink::WebMouseEvent::Button::Left;
388 if (button_flags & EF_MIDDLE_MOUSE_BUTTON) 419 if (button_flags & EF_MIDDLE_MOUSE_BUTTON)
389 webkit_event.button = blink::WebMouseEvent::Button::Middle; 420 webkit_event.button = blink::WebMouseEvent::Button::Middle;
390 if (button_flags & EF_RIGHT_MOUSE_BUTTON) 421 if (button_flags & EF_RIGHT_MOUSE_BUTTON)
391 webkit_event.button = blink::WebMouseEvent::Button::Right; 422 webkit_event.button = blink::WebMouseEvent::Button::Right;
392 423
393 switch (event.type()) { 424 webkit_event.clickCount = click_count;
394 case ET_MOUSE_PRESSED:
395 webkit_event.type = blink::WebInputEvent::MouseDown;
396 webkit_event.clickCount = event.GetClickCount();
397 break;
398 case ET_MOUSE_RELEASED:
399 webkit_event.type = blink::WebInputEvent::MouseUp;
400 webkit_event.clickCount = event.GetClickCount();
401 break;
402 case ET_MOUSE_EXITED:
403 // TODO(chaopeng) this fix only for chromeos now, should convert ET_MOUSE_EXITED
404 // to MouseLeave when crbug.com/450631 fixed.
405 #if defined(OS_CHROMEOS)
406 webkit_event.type = blink::WebInputEvent::MouseLeave;
407 break;
408 #endif
409 case ET_MOUSE_ENTERED:
410 case ET_MOUSE_MOVED:
411 case ET_MOUSE_DRAGGED:
412 webkit_event.type = blink::WebInputEvent::MouseMove;
413 break;
414 default:
415 NOTIMPLEMENTED() << "Received unexpected event: " << event.type();
416 break;
417 }
418
419 webkit_event.tiltX = roundf(event.pointer_details().tilt_x); 425 webkit_event.tiltX = roundf(event.pointer_details().tilt_x);
420 webkit_event.tiltY = roundf(event.pointer_details().tilt_y); 426 webkit_event.tiltY = roundf(event.pointer_details().tilt_y);
421 webkit_event.force = event.pointer_details().force; 427 webkit_event.force = event.pointer_details().force;
422 webkit_event.pointerType = 428 webkit_event.pointerType =
423 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 429 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
424 430
425 return webkit_event; 431 return webkit_event;
426 } 432 }
427 433
428 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent( 434 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent(
429 const MouseWheelEvent& event) { 435 const MouseWheelEvent& event) {
430 blink::WebMouseWheelEvent webkit_event; 436 blink::WebMouseWheelEvent webkit_event(
437 blink::WebInputEvent::MouseWheel,
438 EventFlagsToWebEventModifiers(event.flags()),
439 EventTimeStampToSeconds(event.time_stamp()));
431 440
432 webkit_event.type = blink::WebInputEvent::MouseWheel;
433 webkit_event.button = blink::WebMouseEvent::Button::NoButton; 441 webkit_event.button = blink::WebMouseEvent::Button::NoButton;
434 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags());
435 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp());
436 442
437 webkit_event.deltaX = event.x_offset(); 443 webkit_event.deltaX = event.x_offset();
438 webkit_event.deltaY = event.y_offset(); 444 webkit_event.deltaY = event.y_offset();
439 445
440 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta; 446 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta;
441 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta; 447 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta;
442 448
443 webkit_event.tiltX = roundf(event.pointer_details().tilt_x); 449 webkit_event.tiltX = roundf(event.pointer_details().tilt_x);
444 webkit_event.tiltY = roundf(event.pointer_details().tilt_y); 450 webkit_event.tiltY = roundf(event.pointer_details().tilt_y);
445 webkit_event.force = event.pointer_details().force; 451 webkit_event.force = event.pointer_details().force;
446 webkit_event.pointerType = 452 webkit_event.pointerType =
447 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); 453 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
448 454
449 return webkit_event; 455 return webkit_event;
450 } 456 }
451 457
452 } // namespace ui 458 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698