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