| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/web_input_event_aura.h" | 5 #include "content/browser/renderer_host/web_input_event_aura.h" |
| 6 | 6 |
| 7 #include "content/browser/renderer_host/ui_events_helper.h" | 7 #include "content/browser/renderer_host/ui_events_helper.h" |
| 8 #include "ui/aura/window.h" | 8 #include "ui/aura/window.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 | 11 |
| 12 #if defined(USE_OZONE) | 12 #if defined(USE_OZONE) |
| 13 #include "ui/events/keycodes/keyboard_code_conversion.h" | 13 #include "ui/events/keycodes/keyboard_code_conversion.h" |
| 14 #endif | 14 #endif |
| 15 | 15 |
| 16 namespace content { | 16 namespace content { |
| 17 | 17 |
| 18 #if defined(OS_WIN) | 18 #if defined(OS_WIN) |
| 19 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( | 19 blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( |
| 20 const base::NativeEvent& native_event); | 20 const base::NativeEvent& native_event); |
| 21 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent( | 21 blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent( |
| 22 const base::NativeEvent& native_event); | 22 const base::NativeEvent& native_event); |
| 23 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( | 23 blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( |
| 24 const base::NativeEvent& native_event); | 24 const base::NativeEvent& native_event); |
| 25 blink::WebGestureEvent MakeWebGestureEventFromNativeEvent( | 25 blink::WebGestureEvent MakeWebGestureEventFromNativeEvent( |
| 26 const base::NativeEvent& native_event); | 26 const base::NativeEvent& native_event); |
| 27 #endif | 27 #elif defined(USE_X11) |
| 28 #if defined(USE_X11) || defined(USE_OZONE) | 28 blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( |
| 29 ui::KeyEvent* event); |
| 30 #elif defined(USE_OZONE) |
| 29 blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( | 31 blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( |
| 30 ui::KeyEvent* event) { | 32 ui::KeyEvent* event) { |
| 33 const base::NativeEvent& native_event = event->native_event(); |
| 34 ui::EventType type = ui::EventTypeFromNative(native_event); |
| 31 blink::WebKeyboardEvent webkit_event; | 35 blink::WebKeyboardEvent webkit_event; |
| 32 | 36 |
| 33 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); | 37 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
| 34 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); | 38 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
| 35 | 39 |
| 36 switch (event->type()) { | 40 switch (type) { |
| 37 case ui::ET_KEY_PRESSED: | 41 case ui::ET_KEY_PRESSED: |
| 38 webkit_event.type = event->is_char() ? blink::WebInputEvent::Char : | 42 webkit_event.type = event->is_char() ? blink::WebInputEvent::Char : |
| 39 blink::WebInputEvent::RawKeyDown; | 43 blink::WebInputEvent::RawKeyDown; |
| 40 break; | 44 break; |
| 41 case ui::ET_KEY_RELEASED: | 45 case ui::ET_KEY_RELEASED: |
| 42 webkit_event.type = blink::WebInputEvent::KeyUp; | 46 webkit_event.type = blink::WebInputEvent::KeyUp; |
| 43 break; | 47 break; |
| 44 default: | 48 default: |
| 45 NOTREACHED(); | 49 NOTREACHED(); |
| 46 } | 50 } |
| 47 | 51 |
| 48 if (webkit_event.modifiers & blink::WebInputEvent::AltKey) | 52 if (webkit_event.modifiers & blink::WebInputEvent::AltKey) |
| 49 webkit_event.isSystemKey = true; | 53 webkit_event.isSystemKey = true; |
| 50 | 54 |
| 51 webkit_event.windowsKeyCode = event->GetLocatedWindowsKeyboardCode(); | 55 wchar_t character = ui::KeyboardCodeFromNative(native_event); |
| 52 webkit_event.nativeKeyCode = event->platform_keycode(); | 56 webkit_event.windowsKeyCode = character; |
| 53 webkit_event.unmodifiedText[0] = event->GetUnmodifiedText(); | 57 webkit_event.nativeKeyCode = character; |
| 54 webkit_event.text[0] = event->GetText(); | 58 |
| 59 if (webkit_event.windowsKeyCode == ui::VKEY_RETURN) |
| 60 webkit_event.unmodifiedText[0] = '\r'; |
| 61 else |
| 62 webkit_event.unmodifiedText[0] = ui::GetCharacterFromKeyCode( |
| 63 ui::KeyboardCodeFromNative(native_event), |
| 64 ui::EventFlagsFromNative(native_event)); |
| 65 |
| 66 if (webkit_event.modifiers & blink::WebInputEvent::ControlKey) { |
| 67 webkit_event.text[0] = ui::GetControlCharacterForKeycode( |
| 68 webkit_event.windowsKeyCode, |
| 69 webkit_event.modifiers & blink::WebInputEvent::ShiftKey); |
| 70 } else { |
| 71 webkit_event.text[0] = webkit_event.unmodifiedText[0]; |
| 72 } |
| 55 | 73 |
| 56 webkit_event.setKeyIdentifierFromWindowsKeyCode(); | 74 webkit_event.setKeyIdentifierFromWindowsKeyCode(); |
| 57 | 75 |
| 58 return webkit_event; | 76 return webkit_event; |
| 59 } | 77 } |
| 60 | 78 #endif |
| 79 #if defined(USE_X11) || defined(USE_OZONE) |
| 61 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( | 80 blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( |
| 62 ui::ScrollEvent* event) { | 81 ui::ScrollEvent* event) { |
| 63 blink::WebMouseWheelEvent webkit_event; | 82 blink::WebMouseWheelEvent webkit_event; |
| 64 | 83 |
| 65 webkit_event.type = blink::WebInputEvent::MouseWheel; | 84 webkit_event.type = blink::WebInputEvent::MouseWheel; |
| 66 webkit_event.button = blink::WebMouseEvent::ButtonNone; | 85 webkit_event.button = blink::WebMouseEvent::ButtonNone; |
| 67 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); | 86 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
| 68 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); | 87 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
| 69 webkit_event.hasPreciseScrollingDeltas = true; | 88 webkit_event.hasPreciseScrollingDeltas = true; |
| 70 | 89 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 webkit_event.windowY = webkit_event.y = event->y(); | 233 webkit_event.windowY = webkit_event.y = event->y(); |
| 215 | 234 |
| 216 const gfx::Point root_point = event->root_location(); | 235 const gfx::Point root_point = event->root_location(); |
| 217 webkit_event.globalX = root_point.x(); | 236 webkit_event.globalX = root_point.x(); |
| 218 webkit_event.globalY = root_point.y(); | 237 webkit_event.globalY = root_point.y(); |
| 219 | 238 |
| 220 return webkit_event; | 239 return webkit_event; |
| 221 } | 240 } |
| 222 | 241 |
| 223 blink::WebKeyboardEvent MakeWebKeyboardEvent(ui::KeyEvent* event) { | 242 blink::WebKeyboardEvent MakeWebKeyboardEvent(ui::KeyEvent* event) { |
| 243 if (!event->HasNativeEvent()) |
| 244 return blink::WebKeyboardEvent(); |
| 245 |
| 224 // Windows can figure out whether or not to construct a RawKeyDown or a Char | 246 // Windows can figure out whether or not to construct a RawKeyDown or a Char |
| 225 // WebInputEvent based on the type of message carried in | 247 // WebInputEvent based on the type of message carried in |
| 226 // event->native_event(). X11 is not so fortunate, there is no separate | 248 // event->native_event(). X11 is not so fortunate, there is no separate |
| 227 // translated event type, so DesktopHostLinux sends an extra KeyEvent with | 249 // translated event type, so DesktopHostLinux sends an extra KeyEvent with |
| 228 // is_char() == true. We need to pass the ui::KeyEvent to the X11 function | 250 // is_char() == true. We need to pass the ui::KeyEvent to the X11 function |
| 229 // to detect this case so the right event type can be constructed. | 251 // to detect this case so the right event type can be constructed. |
| 230 #if defined(OS_WIN) | 252 #if defined(OS_WIN) |
| 231 if (!event->HasNativeEvent()) | |
| 232 return blink::WebKeyboardEvent(); | |
| 233 | |
| 234 // Key events require no translation by the aura system. | 253 // Key events require no translation by the aura system. |
| 235 return MakeWebKeyboardEventFromNativeEvent(event->native_event()); | 254 return MakeWebKeyboardEventFromNativeEvent(event->native_event()); |
| 236 #else | 255 #else |
| 237 return MakeWebKeyboardEventFromAuraEvent(event); | 256 return MakeWebKeyboardEventFromAuraEvent(event); |
| 238 #endif | 257 #endif |
| 239 } | 258 } |
| 240 | 259 |
| 241 blink::WebGestureEvent MakeWebGestureEvent(ui::GestureEvent* event) { | 260 blink::WebGestureEvent MakeWebGestureEvent(ui::GestureEvent* event) { |
| 242 blink::WebGestureEvent gesture_event; | 261 blink::WebGestureEvent gesture_event; |
| 243 #if defined(OS_WIN) | 262 #if defined(OS_WIN) |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 webkit_event.deltaY = event->y_offset(); | 360 webkit_event.deltaY = event->y_offset(); |
| 342 } | 361 } |
| 343 | 362 |
| 344 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; | 363 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; |
| 345 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; | 364 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; |
| 346 | 365 |
| 347 return webkit_event; | 366 return webkit_event; |
| 348 } | 367 } |
| 349 | 368 |
| 350 } // namespace content | 369 } // namespace content |
| OLD | NEW |