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 |