| OLD | NEW |
| 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 27 matching lines...) Expand all Loading... |
| 60 } // namespace | 58 } // namespace |
| 61 | 59 |
| 62 #if defined(OS_WIN) | 60 #if defined(OS_WIN) |
| 63 // On Windows, we can just use the builtin WebKit factory methods to fully | 61 // On Windows, we can just use the builtin WebKit factory methods to fully |
| 64 // construct our pre-translated events. | 62 // construct our pre-translated events. |
| 65 | 63 |
| 66 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( | 64 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( |
| 67 const base::NativeEvent& native_event, | 65 const base::NativeEvent& native_event, |
| 68 const base::TimeTicks& time_stamp, | 66 const base::TimeTicks& time_stamp, |
| 69 blink::WebPointerProperties::PointerType pointer_type) { | 67 blink::WebPointerProperties::PointerType pointer_type) { |
| 70 return WebMouseEventBuilder::Build(native_event.hwnd, native_event.message, | 68 return WebMouseEventBuilder::Build( |
| 71 native_event.wParam, native_event.lParam, | 69 native_event.hwnd, native_event.message, native_event.wParam, |
| 72 ui::EventTimeStampToSeconds(time_stamp), | 70 native_event.lParam, EventTimeStampToSeconds(time_stamp), pointer_type); |
| 73 pointer_type); | |
| 74 } | 71 } |
| 75 | 72 |
| 76 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent( | 73 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent( |
| 77 const base::NativeEvent& native_event, | 74 const base::NativeEvent& native_event, |
| 78 const base::TimeTicks& time_stamp, | 75 const base::TimeTicks& time_stamp, |
| 79 blink::WebPointerProperties::PointerType pointer_type) { | 76 blink::WebPointerProperties::PointerType pointer_type) { |
| 80 return WebMouseWheelEventBuilder::Build( | 77 return WebMouseWheelEventBuilder::Build( |
| 81 native_event.hwnd, native_event.message, native_event.wParam, | 78 native_event.hwnd, native_event.message, native_event.wParam, |
| 82 native_event.lParam, ui::EventTimeStampToSeconds(time_stamp), | 79 native_event.lParam, EventTimeStampToSeconds(time_stamp), pointer_type); |
| 83 pointer_type); | |
| 84 } | 80 } |
| 85 | 81 |
| 86 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( | 82 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( |
| 87 const base::NativeEvent& native_event, | 83 const base::NativeEvent& native_event, |
| 88 const base::TimeTicks& time_stamp) { | 84 const base::TimeTicks& time_stamp) { |
| 89 return WebKeyboardEventBuilder::Build( | 85 return WebKeyboardEventBuilder::Build( |
| 90 native_event.hwnd, native_event.message, native_event.wParam, | 86 native_event.hwnd, native_event.message, native_event.wParam, |
| 91 native_event.lParam, ui::EventTimeStampToSeconds(time_stamp)); | 87 native_event.lParam, EventTimeStampToSeconds(time_stamp)); |
| 92 } | 88 } |
| 93 #endif // defined(OS_WIN) | 89 #endif // defined(OS_WIN) |
| 94 | 90 |
| 95 blink::WebKeyboardEvent MakeWebKeyboardEventFromUiEvent(const KeyEvent& event) { | 91 blink::WebKeyboardEvent MakeWebKeyboardEventFromUiEvent(const KeyEvent& event) { |
| 96 blink::WebKeyboardEvent webkit_event; | 92 blink::WebKeyboardEvent webkit_event; |
| 97 | 93 |
| 98 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); | 94 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); |
| 99 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()) | | 95 webkit_event.modifiers = EventFlagsToWebEventModifiers(event.flags()) | |
| 100 DomCodeToWebInputEventModifiers(event.code()); | 96 DomCodeToWebInputEventModifiers(event.code()); |
| 101 | 97 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 offset_ordinal_y = event.x_offset_ordinal(); | 144 offset_ordinal_y = event.x_offset_ordinal(); |
| 149 } else { | 145 } else { |
| 150 webkit_event.deltaX = event.x_offset(); | 146 webkit_event.deltaX = event.x_offset(); |
| 151 webkit_event.deltaY = event.y_offset(); | 147 webkit_event.deltaY = event.y_offset(); |
| 152 offset_ordinal_x = event.x_offset_ordinal(); | 148 offset_ordinal_x = event.x_offset_ordinal(); |
| 153 offset_ordinal_y = event.y_offset_ordinal(); | 149 offset_ordinal_y = event.y_offset_ordinal(); |
| 154 } | 150 } |
| 155 | 151 |
| 156 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f) | 152 if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f) |
| 157 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX; | 153 webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX; |
| 158 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; | 154 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta; |
| 159 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; | 155 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta; |
| 160 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f) | 156 if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f) |
| 161 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY; | 157 webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY; |
| 162 | 158 |
| 163 webkit_event.pointerType = | 159 webkit_event.pointerType = |
| 164 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); | 160 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); |
| 165 return webkit_event; | 161 return webkit_event; |
| 166 } | 162 } |
| 167 | 163 |
| 168 blink::WebGestureEvent MakeWebGestureEventFromUiEvent( | 164 blink::WebGestureEvent MakeWebGestureEventFromUiEvent( |
| 169 const ScrollEvent& event) { | 165 const ScrollEvent& event) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 // | 210 // |
| 215 // The exception is mouse events on linux. The MouseEvent contains enough | 211 // The exception is mouse events on linux. The MouseEvent contains enough |
| 216 // necessary information to construct a WebMouseEvent. So instead of extracting | 212 // necessary information to construct a WebMouseEvent. So instead of extracting |
| 217 // the information from the XEvent, which can be tricky when supporting both | 213 // the information from the XEvent, which can be tricky when supporting both |
| 218 // XInput2 and XInput, the WebMouseEvent is constructed from the | 214 // XInput2 and XInput, the WebMouseEvent is constructed from the |
| 219 // MouseEvent. This will not be necessary once only XInput2 is supported. | 215 // MouseEvent. This will not be necessary once only XInput2 is supported. |
| 220 // | 216 // |
| 221 | 217 |
| 222 blink::WebMouseEvent MakeWebMouseEvent( | 218 blink::WebMouseEvent MakeWebMouseEvent( |
| 223 const MouseEvent& event, | 219 const MouseEvent& event, |
| 224 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& | 220 const base::Callback<gfx::Point(const LocatedEvent& event)>& |
| 225 screen_location_callback) { | 221 screen_location_callback) { |
| 226 // Construct an untranslated event from the platform event data. | 222 // Construct an untranslated event from the platform event data. |
| 227 blink::WebMouseEvent webkit_event = | 223 blink::WebMouseEvent webkit_event = |
| 228 #if defined(OS_WIN) | 224 #if defined(OS_WIN) |
| 229 // On Windows we have WM_ events comming from desktop and pure ui::Events | 225 // On Windows we have WM_ events comming from desktop and pure Events |
| 230 // comming from metro mode. | 226 // comming from metro mode. |
| 231 event.native_event().message && (event.type() != ET_MOUSE_EXITED) | 227 event.native_event().message && (event.type() != ET_MOUSE_EXITED) |
| 232 ? MakeUntranslatedWebMouseEventFromNativeEvent( | 228 ? MakeUntranslatedWebMouseEventFromNativeEvent( |
| 233 event.native_event(), event.time_stamp(), | 229 event.native_event(), event.time_stamp(), |
| 234 EventPointerTypeToWebPointerType( | 230 EventPointerTypeToWebPointerType( |
| 235 event.pointer_details().pointer_type)) | 231 event.pointer_details().pointer_type)) |
| 236 : MakeWebMouseEventFromUiEvent(event); | 232 : MakeWebMouseEventFromUiEvent(event); |
| 237 #else | 233 #else |
| 238 MakeWebMouseEventFromUiEvent(event); | 234 MakeWebMouseEventFromUiEvent(event); |
| 239 #endif | 235 #endif |
| (...skipping 10 matching lines...) Expand all Loading... |
| 250 const gfx::Point screen_point = | 246 const gfx::Point screen_point = |
| 251 GetScreenLocationFromEvent(event, screen_location_callback); | 247 GetScreenLocationFromEvent(event, screen_location_callback); |
| 252 webkit_event.globalX = screen_point.x(); | 248 webkit_event.globalX = screen_point.x(); |
| 253 webkit_event.globalY = screen_point.y(); | 249 webkit_event.globalY = screen_point.y(); |
| 254 | 250 |
| 255 return webkit_event; | 251 return webkit_event; |
| 256 } | 252 } |
| 257 | 253 |
| 258 blink::WebMouseWheelEvent MakeWebMouseWheelEvent( | 254 blink::WebMouseWheelEvent MakeWebMouseWheelEvent( |
| 259 const MouseWheelEvent& event, | 255 const MouseWheelEvent& event, |
| 260 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& | 256 const base::Callback<gfx::Point(const LocatedEvent& event)>& |
| 261 screen_location_callback) { | 257 screen_location_callback) { |
| 262 #if defined(OS_WIN) | 258 #if defined(OS_WIN) |
| 263 // Construct an untranslated event from the platform event data. | 259 // Construct an untranslated event from the platform event data. |
| 264 blink::WebMouseWheelEvent webkit_event = | 260 blink::WebMouseWheelEvent webkit_event = |
| 265 event.native_event().message | 261 event.native_event().message |
| 266 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( | 262 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( |
| 267 event.native_event(), event.time_stamp(), | 263 event.native_event(), event.time_stamp(), |
| 268 EventPointerTypeToWebPointerType( | 264 EventPointerTypeToWebPointerType( |
| 269 event.pointer_details().pointer_type)) | 265 event.pointer_details().pointer_type)) |
| 270 : MakeWebMouseWheelEventFromUiEvent(event); | 266 : MakeWebMouseWheelEventFromUiEvent(event); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 281 const gfx::Point screen_point = | 277 const gfx::Point screen_point = |
| 282 GetScreenLocationFromEvent(event, screen_location_callback); | 278 GetScreenLocationFromEvent(event, screen_location_callback); |
| 283 webkit_event.globalX = screen_point.x(); | 279 webkit_event.globalX = screen_point.x(); |
| 284 webkit_event.globalY = screen_point.y(); | 280 webkit_event.globalY = screen_point.y(); |
| 285 | 281 |
| 286 return webkit_event; | 282 return webkit_event; |
| 287 } | 283 } |
| 288 | 284 |
| 289 blink::WebMouseWheelEvent MakeWebMouseWheelEvent( | 285 blink::WebMouseWheelEvent MakeWebMouseWheelEvent( |
| 290 const ScrollEvent& event, | 286 const ScrollEvent& event, |
| 291 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& | 287 const base::Callback<gfx::Point(const LocatedEvent& event)>& |
| 292 screen_location_callback) { | 288 screen_location_callback) { |
| 293 #if defined(OS_WIN) | 289 #if defined(OS_WIN) |
| 294 // Construct an untranslated event from the platform event data. | 290 // Construct an untranslated event from the platform event data. |
| 295 blink::WebMouseWheelEvent webkit_event = | 291 blink::WebMouseWheelEvent webkit_event = |
| 296 event.native_event().message | 292 event.native_event().message |
| 297 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( | 293 ? MakeUntranslatedWebMouseWheelEventFromNativeEvent( |
| 298 event.native_event(), event.time_stamp(), | 294 event.native_event(), event.time_stamp(), |
| 299 EventPointerTypeToWebPointerType( | 295 EventPointerTypeToWebPointerType( |
| 300 event.pointer_details().pointer_type)) | 296 event.pointer_details().pointer_type)) |
| 301 : MakeWebMouseWheelEventFromUiEvent(event); | 297 : MakeWebMouseWheelEventFromUiEvent(event); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 webkit_event.domCode = static_cast<int>(event.code()); | 329 webkit_event.domCode = static_cast<int>(event.code()); |
| 334 webkit_event.domKey = static_cast<int>(event.GetDomKey()); | 330 webkit_event.domKey = static_cast<int>(event.GetDomKey()); |
| 335 return webkit_event; | 331 return webkit_event; |
| 336 } | 332 } |
| 337 #endif | 333 #endif |
| 338 return MakeWebKeyboardEventFromUiEvent(event); | 334 return MakeWebKeyboardEventFromUiEvent(event); |
| 339 } | 335 } |
| 340 | 336 |
| 341 blink::WebGestureEvent MakeWebGestureEvent( | 337 blink::WebGestureEvent MakeWebGestureEvent( |
| 342 const GestureEvent& event, | 338 const GestureEvent& event, |
| 343 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& | 339 const base::Callback<gfx::Point(const LocatedEvent& event)>& |
| 344 screen_location_callback) { | 340 screen_location_callback) { |
| 345 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUIEvent(event); | 341 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUIEvent(event); |
| 346 | 342 |
| 347 gesture_event.x = event.x(); | 343 gesture_event.x = event.x(); |
| 348 gesture_event.y = event.y(); | 344 gesture_event.y = event.y(); |
| 349 | 345 |
| 350 const gfx::Point screen_point = | 346 const gfx::Point screen_point = |
| 351 GetScreenLocationFromEvent(event, screen_location_callback); | 347 GetScreenLocationFromEvent(event, screen_location_callback); |
| 352 gesture_event.globalX = screen_point.x(); | 348 gesture_event.globalX = screen_point.x(); |
| 353 gesture_event.globalY = screen_point.y(); | 349 gesture_event.globalY = screen_point.y(); |
| 354 | 350 |
| 355 return gesture_event; | 351 return gesture_event; |
| 356 } | 352 } |
| 357 | 353 |
| 358 blink::WebGestureEvent MakeWebGestureEvent( | 354 blink::WebGestureEvent MakeWebGestureEvent( |
| 359 const ScrollEvent& event, | 355 const ScrollEvent& event, |
| 360 const base::Callback<gfx::Point(const ui::LocatedEvent& event)>& | 356 const base::Callback<gfx::Point(const LocatedEvent& event)>& |
| 361 screen_location_callback) { | 357 screen_location_callback) { |
| 362 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUiEvent(event); | 358 blink::WebGestureEvent gesture_event = MakeWebGestureEventFromUiEvent(event); |
| 363 gesture_event.x = event.x(); | 359 gesture_event.x = event.x(); |
| 364 gesture_event.y = event.y(); | 360 gesture_event.y = event.y(); |
| 365 | 361 |
| 366 const gfx::Point screen_point = | 362 const gfx::Point screen_point = |
| 367 GetScreenLocationFromEvent(event, screen_location_callback); | 363 GetScreenLocationFromEvent(event, screen_location_callback); |
| 368 gesture_event.globalX = screen_point.x(); | 364 gesture_event.globalX = screen_point.x(); |
| 369 gesture_event.globalY = screen_point.y(); | 365 gesture_event.globalY = screen_point.y(); |
| 370 | 366 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); | 437 webkit_event.timeStampSeconds = EventTimeStampToSeconds(event.time_stamp()); |
| 442 | 438 |
| 443 if ((event.flags() & EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) { | 439 if ((event.flags() & EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) { |
| 444 webkit_event.deltaX = event.y_offset(); | 440 webkit_event.deltaX = event.y_offset(); |
| 445 webkit_event.deltaY = 0; | 441 webkit_event.deltaY = 0; |
| 446 } else { | 442 } else { |
| 447 webkit_event.deltaX = event.x_offset(); | 443 webkit_event.deltaX = event.x_offset(); |
| 448 webkit_event.deltaY = event.y_offset(); | 444 webkit_event.deltaY = event.y_offset(); |
| 449 } | 445 } |
| 450 | 446 |
| 451 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; | 447 webkit_event.wheelTicksX = webkit_event.deltaX / MouseWheelEvent::kWheelDelta; |
| 452 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; | 448 webkit_event.wheelTicksY = webkit_event.deltaY / MouseWheelEvent::kWheelDelta; |
| 453 | 449 |
| 454 webkit_event.tiltX = roundf(event.pointer_details().tilt_x); | 450 webkit_event.tiltX = roundf(event.pointer_details().tilt_x); |
| 455 webkit_event.tiltY = roundf(event.pointer_details().tilt_y); | 451 webkit_event.tiltY = roundf(event.pointer_details().tilt_y); |
| 456 webkit_event.force = event.pointer_details().force; | 452 webkit_event.force = event.pointer_details().force; |
| 457 webkit_event.pointerType = | 453 webkit_event.pointerType = |
| 458 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); | 454 EventPointerTypeToWebPointerType(event.pointer_details().pointer_type); |
| 459 | 455 |
| 460 return webkit_event; | 456 return webkit_event; |
| 461 } | 457 } |
| 462 | 458 |
| 463 } // namespace ui | 459 } // namespace ui |
| OLD | NEW |