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 // Portions based heavily on: | 5 // Portions based heavily on: |
6 // third_party/WebKit/Source/WebKit/chromium/public/gtk/WebInputEventFactory.cpp | 6 // third_party/WebKit/Source/WebKit/chromium/public/gtk/WebInputEventFactory.cpp |
7 // | 7 // |
8 /* | 8 /* |
9 * Copyright (C) 2006-2011 Google Inc. All rights reserved. | 9 * Copyright (C) 2006-2011 Google Inc. All rights reserved. |
10 * | 10 * |
(...skipping 26 matching lines...) Expand all Loading... |
37 | 37 |
38 #include "content/browser/renderer_host/web_input_event_aura.h" | 38 #include "content/browser/renderer_host/web_input_event_aura.h" |
39 | 39 |
40 #include <cstdlib> | 40 #include <cstdlib> |
41 #include <X11/keysym.h> | 41 #include <X11/keysym.h> |
42 #include <X11/Xlib.h> | 42 #include <X11/Xlib.h> |
43 #include <X11/Xutil.h> | 43 #include <X11/Xutil.h> |
44 | 44 |
45 #include "base/event_types.h" | 45 #include "base/event_types.h" |
46 #include "base/logging.h" | 46 #include "base/logging.h" |
47 #include "ui/aura/event.h" | 47 #include "ui/base/event.h" |
48 #include "ui/base/events.h" | 48 #include "ui/base/events.h" |
49 #include "ui/base/keycodes/keyboard_codes.h" | 49 #include "ui/base/keycodes/keyboard_codes.h" |
50 #include "ui/base/keycodes/keyboard_code_conversion_x.h" | 50 #include "ui/base/keycodes/keyboard_code_conversion_x.h" |
51 | 51 |
52 namespace content { | 52 namespace content { |
53 | 53 |
54 // chromium WebKit does not provide a WebInputEventFactory for X11, so we have | 54 // chromium WebKit does not provide a WebInputEventFactory for X11, so we have |
55 // to do the work here ourselves. | 55 // to do the work here ourselves. |
56 | 56 |
57 namespace { | 57 namespace { |
58 | 58 |
59 // This matches Firefox behavior. | 59 // This matches Firefox behavior. |
60 const int kPixelsPerTick = 53; | 60 const int kPixelsPerTick = 53; |
61 | 61 |
62 // Normalizes event.flags() to make it Windows/Mac compatible. Since the way | 62 // Normalizes event.flags() to make it Windows/Mac compatible. Since the way |
63 // of setting modifier mask on X is very different than Windows/Mac as shown | 63 // of setting modifier mask on X is very different than Windows/Mac as shown |
64 // in http://crbug.com/127142#c8, the normalization is necessary. | 64 // in http://crbug.com/127142#c8, the normalization is necessary. |
65 int NormalizeEventFlags(const aura::KeyEvent& event) { | 65 int NormalizeEventFlags(const ui::KeyEvent& event) { |
66 int mask = 0; | 66 int mask = 0; |
67 switch (event.key_code()) { | 67 switch (event.key_code()) { |
68 case ui::VKEY_CONTROL: | 68 case ui::VKEY_CONTROL: |
69 mask = ui::EF_CONTROL_DOWN; | 69 mask = ui::EF_CONTROL_DOWN; |
70 break; | 70 break; |
71 case ui::VKEY_SHIFT: | 71 case ui::VKEY_SHIFT: |
72 mask = ui::EF_SHIFT_DOWN; | 72 mask = ui::EF_SHIFT_DOWN; |
73 break; | 73 break; |
74 case ui::VKEY_MENU: | 74 case ui::VKEY_MENU: |
75 mask = ui::EF_ALT_DOWN; | 75 mask = ui::EF_ALT_DOWN; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 return 0x0A; | 175 return 0x0A; |
176 // Returns 0 for all other keys to avoid inputting unexpected chars. | 176 // Returns 0 for all other keys to avoid inputting unexpected chars. |
177 default: | 177 default: |
178 break; | 178 break; |
179 } | 179 } |
180 } | 180 } |
181 return 0; | 181 return 0; |
182 } | 182 } |
183 | 183 |
184 WebKit::WebTouchPoint::State TouchPointStateFromEvent( | 184 WebKit::WebTouchPoint::State TouchPointStateFromEvent( |
185 const aura::TouchEvent* event) { | 185 const ui::TouchEventImpl* event) { |
186 switch (event->type()) { | 186 switch (event->type()) { |
187 case ui::ET_TOUCH_PRESSED: | 187 case ui::ET_TOUCH_PRESSED: |
188 return WebKit::WebTouchPoint::StatePressed; | 188 return WebKit::WebTouchPoint::StatePressed; |
189 case ui::ET_TOUCH_RELEASED: | 189 case ui::ET_TOUCH_RELEASED: |
190 return WebKit::WebTouchPoint::StateReleased; | 190 return WebKit::WebTouchPoint::StateReleased; |
191 case ui::ET_TOUCH_MOVED: | 191 case ui::ET_TOUCH_MOVED: |
192 return WebKit::WebTouchPoint::StateMoved; | 192 return WebKit::WebTouchPoint::StateMoved; |
193 case ui::ET_TOUCH_CANCELLED: | 193 case ui::ET_TOUCH_CANCELLED: |
194 return WebKit::WebTouchPoint::StateCancelled; | 194 return WebKit::WebTouchPoint::StateCancelled; |
195 default: | 195 default: |
196 return WebKit::WebTouchPoint::StateUndefined; | 196 return WebKit::WebTouchPoint::StateUndefined; |
197 } | 197 } |
198 } | 198 } |
199 | 199 |
200 WebKit::WebInputEvent::Type TouchEventTypeFromEvent( | 200 WebKit::WebInputEvent::Type TouchEventTypeFromEvent( |
201 const aura::TouchEvent* event) { | 201 const ui::TouchEventImpl* event) { |
202 switch (event->type()) { | 202 switch (event->type()) { |
203 case ui::ET_TOUCH_PRESSED: | 203 case ui::ET_TOUCH_PRESSED: |
204 return WebKit::WebInputEvent::TouchStart; | 204 return WebKit::WebInputEvent::TouchStart; |
205 case ui::ET_TOUCH_RELEASED: | 205 case ui::ET_TOUCH_RELEASED: |
206 return WebKit::WebInputEvent::TouchEnd; | 206 return WebKit::WebInputEvent::TouchEnd; |
207 case ui::ET_TOUCH_MOVED: | 207 case ui::ET_TOUCH_MOVED: |
208 return WebKit::WebInputEvent::TouchMove; | 208 return WebKit::WebInputEvent::TouchMove; |
209 case ui::ET_TOUCH_CANCELLED: | 209 case ui::ET_TOUCH_CANCELLED: |
210 return WebKit::WebInputEvent::TouchCancel; | 210 return WebKit::WebInputEvent::TouchCancel; |
211 default: | 211 default: |
212 return WebKit::WebInputEvent::Undefined; | 212 return WebKit::WebInputEvent::Undefined; |
213 } | 213 } |
214 } | 214 } |
215 | 215 |
216 } // namespace | 216 } // namespace |
217 | 217 |
218 WebKit::WebMouseEvent MakeWebMouseEventFromAuraEvent(aura::MouseEvent* event) { | 218 WebKit::WebMouseEvent MakeWebMouseEventFromAuraEvent(ui::MouseEvent* event) { |
219 WebKit::WebMouseEvent webkit_event; | 219 WebKit::WebMouseEvent webkit_event; |
220 | 220 |
221 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); | 221 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
222 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); | 222 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
223 | 223 |
224 webkit_event.button = WebKit::WebMouseEvent::ButtonNone; | 224 webkit_event.button = WebKit::WebMouseEvent::ButtonNone; |
225 if (event->flags() & ui::EF_LEFT_MOUSE_BUTTON) | 225 if (event->flags() & ui::EF_LEFT_MOUSE_BUTTON) |
226 webkit_event.button = WebKit::WebMouseEvent::ButtonLeft; | 226 webkit_event.button = WebKit::WebMouseEvent::ButtonLeft; |
227 if (event->flags() & ui::EF_MIDDLE_MOUSE_BUTTON) | 227 if (event->flags() & ui::EF_MIDDLE_MOUSE_BUTTON) |
228 webkit_event.button = WebKit::WebMouseEvent::ButtonMiddle; | 228 webkit_event.button = WebKit::WebMouseEvent::ButtonMiddle; |
(...skipping 16 matching lines...) Expand all Loading... |
245 break; | 245 break; |
246 default: | 246 default: |
247 NOTIMPLEMENTED() << "Received unexpected event: " << event->type(); | 247 NOTIMPLEMENTED() << "Received unexpected event: " << event->type(); |
248 break; | 248 break; |
249 } | 249 } |
250 | 250 |
251 return webkit_event; | 251 return webkit_event; |
252 } | 252 } |
253 | 253 |
254 WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( | 254 WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( |
255 aura::MouseEvent* event) { | 255 ui::MouseEvent* event) { |
256 WebKit::WebMouseWheelEvent webkit_event; | 256 WebKit::WebMouseWheelEvent webkit_event; |
257 | 257 |
258 webkit_event.type = WebKit::WebInputEvent::MouseWheel; | 258 webkit_event.type = WebKit::WebInputEvent::MouseWheel; |
259 webkit_event.button = WebKit::WebMouseEvent::ButtonNone; | 259 webkit_event.button = WebKit::WebMouseEvent::ButtonNone; |
260 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); | 260 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
261 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); | 261 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
262 webkit_event.deltaY = ui::GetMouseWheelOffset(event->native_event()); | 262 webkit_event.deltaY = ui::GetMouseWheelOffset(event->native_event()); |
263 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; | 263 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; |
264 | 264 |
265 return webkit_event; | 265 return webkit_event; |
266 } | 266 } |
267 | 267 |
268 WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( | 268 WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( |
269 aura::ScrollEvent* event) { | 269 ui::ScrollEvent* event) { |
270 WebKit::WebMouseWheelEvent webkit_event; | 270 WebKit::WebMouseWheelEvent webkit_event; |
271 | 271 |
272 webkit_event.type = WebKit::WebInputEvent::MouseWheel; | 272 webkit_event.type = WebKit::WebInputEvent::MouseWheel; |
273 webkit_event.button = WebKit::WebMouseEvent::ButtonNone; | 273 webkit_event.button = WebKit::WebMouseEvent::ButtonNone; |
274 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); | 274 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
275 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); | 275 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
276 webkit_event.hasPreciseScrollingDeltas = true; | 276 webkit_event.hasPreciseScrollingDeltas = true; |
277 webkit_event.deltaX = event->x_offset(); | 277 webkit_event.deltaX = event->x_offset(); |
278 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; | 278 webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; |
279 webkit_event.deltaY = event->y_offset(); | 279 webkit_event.deltaY = event->y_offset(); |
280 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; | 280 webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; |
281 | 281 |
282 return webkit_event; | 282 return webkit_event; |
283 } | 283 } |
284 | 284 |
285 WebKit::WebGestureEvent MakeWebGestureEventFromAuraEvent( | 285 WebKit::WebGestureEvent MakeWebGestureEventFromAuraEvent( |
286 aura::ScrollEvent* event) { | 286 ui::ScrollEvent* event) { |
287 WebKit::WebGestureEvent webkit_event; | 287 WebKit::WebGestureEvent webkit_event; |
288 | 288 |
289 switch (event->type()) { | 289 switch (event->type()) { |
290 case ui::ET_SCROLL: | 290 case ui::ET_SCROLL: |
291 webkit_event.type = WebKit::WebInputEvent::GestureScrollUpdate; | 291 webkit_event.type = WebKit::WebInputEvent::GestureScrollUpdate; |
292 break; | 292 break; |
293 case ui::ET_SCROLL_FLING_START: | 293 case ui::ET_SCROLL_FLING_START: |
294 webkit_event.type = WebKit::WebInputEvent::GestureFlingStart; | 294 webkit_event.type = WebKit::WebInputEvent::GestureFlingStart; |
295 break; | 295 break; |
296 case ui::ET_SCROLL_FLING_CANCEL: | 296 case ui::ET_SCROLL_FLING_CANCEL: |
297 webkit_event.type = WebKit::WebInputEvent::GestureFlingCancel; | 297 webkit_event.type = WebKit::WebInputEvent::GestureFlingCancel; |
298 break; | 298 break; |
299 default: | 299 default: |
300 NOTREACHED() << "Unknown gesture type: " << event->type(); | 300 NOTREACHED() << "Unknown gesture type: " << event->type(); |
301 } | 301 } |
302 | 302 |
303 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); | 303 webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
304 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); | 304 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
305 webkit_event.deltaX = event->x_offset(); | 305 webkit_event.deltaX = event->x_offset(); |
306 webkit_event.deltaY = event->y_offset(); | 306 webkit_event.deltaY = event->y_offset(); |
307 | 307 |
308 return webkit_event; | 308 return webkit_event; |
309 } | 309 } |
310 | 310 |
311 WebKit::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( | 311 WebKit::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( |
312 aura::KeyEvent* event) { | 312 ui::KeyEvent* event) { |
313 base::NativeEvent native_event = event->native_event(); | 313 base::NativeEvent native_event = event->native_event(); |
314 WebKit::WebKeyboardEvent webkit_event; | 314 WebKit::WebKeyboardEvent webkit_event; |
315 XKeyEvent* native_key_event = &native_event->xkey; | 315 XKeyEvent* native_key_event = &native_event->xkey; |
316 | 316 |
317 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); | 317 webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); |
318 webkit_event.modifiers = | 318 webkit_event.modifiers = |
319 EventFlagsToWebEventModifiers(NormalizeEventFlags(*event)); | 319 EventFlagsToWebEventModifiers(NormalizeEventFlags(*event)); |
320 | 320 |
321 switch (native_event->type) { | 321 switch (native_event->type) { |
322 case KeyPress: | 322 case KeyPress: |
(...skipping 28 matching lines...) Expand all Loading... |
351 } | 351 } |
352 | 352 |
353 webkit_event.setKeyIdentifierFromWindowsKeyCode(); | 353 webkit_event.setKeyIdentifierFromWindowsKeyCode(); |
354 | 354 |
355 // TODO: IsAutoRepeat/IsKeyPad? | 355 // TODO: IsAutoRepeat/IsKeyPad? |
356 | 356 |
357 return webkit_event; | 357 return webkit_event; |
358 } | 358 } |
359 | 359 |
360 WebKit::WebGestureEvent MakeWebGestureEventFromAuraEvent( | 360 WebKit::WebGestureEvent MakeWebGestureEventFromAuraEvent( |
361 aura::GestureEvent* event) { | 361 ui::GestureEventImpl* event) { |
362 WebKit::WebGestureEvent gesture_event; | 362 WebKit::WebGestureEvent gesture_event; |
363 | 363 |
364 switch (event->type()) { | 364 switch (event->type()) { |
365 case ui::ET_GESTURE_TAP: | 365 case ui::ET_GESTURE_TAP: |
366 gesture_event.type = WebKit::WebInputEvent::GestureTap; | 366 gesture_event.type = WebKit::WebInputEvent::GestureTap; |
367 gesture_event.deltaX = event->details().tap_count(); | 367 gesture_event.deltaX = event->details().tap_count(); |
368 break; | 368 break; |
369 case ui::ET_GESTURE_TAP_DOWN: | 369 case ui::ET_GESTURE_TAP_DOWN: |
370 gesture_event.type = WebKit::WebInputEvent::GestureTapDown; | 370 gesture_event.type = WebKit::WebInputEvent::GestureTapDown; |
371 break; | 371 break; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 NOTREACHED() << "Unknown gesture type: " << event->type(); | 415 NOTREACHED() << "Unknown gesture type: " << event->type(); |
416 } | 416 } |
417 | 417 |
418 gesture_event.boundingBox = event->details().bounding_box(); | 418 gesture_event.boundingBox = event->details().bounding_box(); |
419 gesture_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); | 419 gesture_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); |
420 | 420 |
421 return gesture_event; | 421 return gesture_event; |
422 } | 422 } |
423 | 423 |
424 WebKit::WebTouchPoint* UpdateWebTouchEventFromAuraEvent( | 424 WebKit::WebTouchPoint* UpdateWebTouchEventFromAuraEvent( |
425 aura::TouchEvent* event, WebKit::WebTouchEvent* web_event) { | 425 ui::TouchEventImpl* event, WebKit::WebTouchEvent* web_event) { |
426 WebKit::WebTouchPoint* point = NULL; | 426 WebKit::WebTouchPoint* point = NULL; |
427 switch (event->type()) { | 427 switch (event->type()) { |
428 case ui::ET_TOUCH_PRESSED: | 428 case ui::ET_TOUCH_PRESSED: |
429 // Add a new touch point. | 429 // Add a new touch point. |
430 if (web_event->touchesLength < WebKit::WebTouchEvent::touchesLengthCap) { | 430 if (web_event->touchesLength < WebKit::WebTouchEvent::touchesLengthCap) { |
431 point = &web_event->touches[web_event->touchesLength++]; | 431 point = &web_event->touches[web_event->touchesLength++]; |
432 point->id = event->touch_id(); | 432 point->id = event->touch_id(); |
433 } | 433 } |
434 break; | 434 break; |
435 case ui::ET_TOUCH_RELEASED: | 435 case ui::ET_TOUCH_RELEASED: |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 | 486 |
487 // Update the type of the touch event. | 487 // Update the type of the touch event. |
488 web_event->type = TouchEventTypeFromEvent(event); | 488 web_event->type = TouchEventTypeFromEvent(event); |
489 web_event->timeStampSeconds = event->time_stamp().InSecondsF(); | 489 web_event->timeStampSeconds = event->time_stamp().InSecondsF(); |
490 web_event->modifiers = EventFlagsToWebEventModifiers(event->flags()); | 490 web_event->modifiers = EventFlagsToWebEventModifiers(event->flags()); |
491 | 491 |
492 return point; | 492 return point; |
493 } | 493 } |
494 | 494 |
495 } // namespace content | 495 } // namespace content |
OLD | NEW |