web_input_event_aura.cc revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/web_input_event_aura.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/ui_events_helper.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h" 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_utils.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(USE_OZONE) 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/events/keycodes/keyboard_code_conversion.h" 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(USE_X11) || defined(USE_OZONE) 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// From third_party/WebKit/Source/web/gtk/WebInputEventFactory.cpp: 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebUChar GetControlCharacter(int windows_key_code, bool shift) { 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (windows_key_code >= ui::VKEY_A && 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) windows_key_code <= ui::VKEY_Z) { 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-A ~ ctrl-Z map to \x01 ~ \x1A 24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return windows_key_code - ui::VKEY_A + 1; 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (shift) { 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // following graphics chars require shift key to input. 28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) switch (windows_key_code) { 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-@ maps to \x00 (Null byte) 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::VKEY_2: 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0; 32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-^ maps to \x1E (Record separator, Information separator two) 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::VKEY_6: 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0x1E; 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-_ maps to \x1F (Unit separator, Information separator one) 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::VKEY_OEM_MINUS: 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0x1F; 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Returns 0 for all other keys to avoid inputting unexpected chars. 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) default: 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) break; 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } else { 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) switch (windows_key_code) { 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-[ maps to \x1B (Escape) 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::VKEY_OEM_4: 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0x1B; 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-\ maps to \x1C (File separator, Information separator four) 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::VKEY_OEM_5: 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0x1C; 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-] maps to \x1D (Group separator, Information separator three) 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::VKEY_OEM_6: 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0x1D; 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // ctrl-Enter maps to \x0A (Line feed) 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::VKEY_RETURN: 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0x0A; 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Returns 0 for all other keys to avoid inputting unexpected chars. 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) default: 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) break; 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return 0; 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent( 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::NativeEvent& native_event); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent( 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::NativeEvent& native_event); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent( 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::NativeEvent& native_event); 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebGestureEvent MakeWebGestureEventFromNativeEvent( 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::NativeEvent& native_event); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#elif defined(USE_X11) 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyEvent* event); 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#elif defined(USE_OZONE) 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent( 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::KeyEvent* event) { 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::NativeEvent& native_event = event->native_event(); 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::EventType type = ui::EventTypeFromNative(native_event); 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebKeyboardEvent webkit_event; 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) switch (type) { 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::ET_KEY_PRESSED: 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = event->is_char() ? blink::WebInputEvent::Char : 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebInputEvent::RawKeyDown; 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) break; 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::ET_KEY_RELEASED: 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::KeyUp; 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) break; 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) default: 95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NOTREACHED(); 96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 97d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (webkit_event.modifiers & blink::WebInputEvent::AltKey) 99d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.isSystemKey = true; 100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 101d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) wchar_t character = ui::KeyboardCodeFromNative(native_event); 102d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.windowsKeyCode = character; 103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.nativeKeyCode = character; 104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 105d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (webkit_event.windowsKeyCode == ui::VKEY_RETURN) 106d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.unmodifiedText[0] = '\r'; 107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) else 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) webkit_event.unmodifiedText[0] = ui::GetCharacterFromKeyCode( 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::KeyboardCodeFromNative(native_event), 110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::EventFlagsFromNative(native_event)); 111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (webkit_event.modifiers & blink::WebInputEvent::ControlKey) { 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.text[0] = 114d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) GetControlCharacter( 115d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.windowsKeyCode, 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.modifiers & blink::WebInputEvent::ShiftKey); 117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } else { 118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.text[0] = webkit_event.unmodifiedText[0]; 119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 120d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.setKeyIdentifierFromWindowsKeyCode(); 122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return webkit_event; 124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(USE_X11) || defined(USE_OZONE) 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::ScrollEvent* event) { 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseWheelEvent webkit_event; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::MouseWheel; 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.button = blink::WebMouseEvent::ButtonNone; 133d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); 134d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); 135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.hasPreciseScrollingDeltas = true; 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float offset_ordinal_x = 0.f; 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float offset_ordinal_y = 0.f; 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if ((event->flags() & ui::EF_SHIFT_DOWN) != 0 && event->x_offset() == 0) { 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaX = event->y_offset(); 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaY = 0; 142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) offset_ordinal_x = event->y_offset_ordinal(); 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) offset_ordinal_y = event->x_offset_ordinal(); 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaX = event->x_offset(); 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaY = event->y_offset(); 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) offset_ordinal_x = event->x_offset_ordinal(); 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) offset_ordinal_y = event->y_offset_ordinal(); 149d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f) 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX; 153d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; 154d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f) 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY; 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return webkit_event; 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebGestureEvent MakeWebGestureEventFromAuraEvent( 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::ScrollEvent* event) { 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebGestureEvent webkit_event; 163d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 164d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) switch (event->type()) { 165d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::ET_SCROLL_FLING_START: 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::GestureFlingStart; 167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.data.flingStart.velocityX = event->x_offset(); 168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.data.flingStart.velocityY = event->y_offset(); 169d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) break; 170d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::ET_SCROLL_FLING_CANCEL: 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::GestureFlingCancel; 172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) break; 173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) case ui::ET_SCROLL: 174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NOTREACHED() << "Invalid gesture type: " << event->type(); 175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) break; 176d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) default: 177d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) NOTREACHED() << "Unknown gesture type: " << event->type(); 178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 179d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) webkit_event.sourceDevice = blink::WebGestureDeviceTouchpad; 181d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); 182d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return webkit_event; 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseEvent MakeWebMouseEventFromAuraEvent( 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::MouseEvent* event); 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::MouseWheelEvent* event); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// General approach: 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ui::Event only carries a subset of possible event data provided to Aura by 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the host platform. WebKit utilizes a larger subset of that information than 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Aura itself. WebKit includes some built in cracking functionality that we 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// rely on to obtain this information cleanly and consistently. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The only place where an ui::Event's data differs from what the underlying 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// base::NativeEvent would provide is position data, since we would like to 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// provide coordinates relative to the aura::Window that is hosting the 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// renderer, not the top level platform window. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// The approach is to fully construct a blink::WebInputEvent from the 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ui::Event's base::NativeEvent, and then replace the coordinate fields with 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the translated values from the ui::Event. 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The exception is mouse events on linux. The ui::MouseEvent contains enough 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// necessary information to construct a WebMouseEvent. So instead of extracting 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the information from the XEvent, which can be tricky when supporting both 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// XInput2 and XInput, the WebMouseEvent is constructed from the 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ui::MouseEvent. This will not be necessary once only XInput2 is supported. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseEvent MakeWebMouseEvent(ui::MouseEvent* event) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct an untranslated event from the platform event data. 218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent webkit_event = 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On Windows we have WM_ events comming from desktop and pure aura 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // events comming from metro mode. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event->native_event().message ? 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeUntranslatedWebMouseEventFromNativeEvent(event->native_event()) : 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeWebMouseEventFromAuraEvent(event); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeWebMouseEventFromAuraEvent(event); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Replace the event's coordinate fields with translated position data from 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |event|. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.windowX = webkit_event.x = event->x(); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.windowY = webkit_event.y = event->y(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 233b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#if defined(OS_WIN) 234b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (event->native_event().message) 235b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return webkit_event; 236b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point root_point = event->root_location(); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.globalX = root_point.x(); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.globalY = root_point.y(); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return webkit_event; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseWheelEvent MakeWebMouseWheelEvent(ui::MouseWheelEvent* event) { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct an untranslated event from the platform event data. 247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseWheelEvent webkit_event = event->native_event().message ? 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeUntranslatedWebMouseWheelEventFromNativeEvent(event->native_event()) : 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeWebMouseWheelEventFromAuraEvent(event); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseWheelEvent webkit_event = 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeWebMouseWheelEventFromAuraEvent(event); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Replace the event's coordinate fields with translated position data from 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |event|. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.windowX = webkit_event.x = event->x(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.windowY = webkit_event.y = event->y(); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point root_point = event->root_location(); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.globalX = root_point.x(); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.globalY = root_point.y(); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return webkit_event; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseWheelEvent MakeWebMouseWheelEvent(ui::ScrollEvent* event) { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Construct an untranslated event from the platform event data. 270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseWheelEvent webkit_event = 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeUntranslatedWebMouseWheelEventFromNativeEvent(event->native_event()); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseWheelEvent webkit_event = 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MakeWebMouseWheelEventFromAuraEvent(event); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Replace the event's coordinate fields with translated position data from 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |event|. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.windowX = webkit_event.x = event->x(); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.windowY = webkit_event.y = event->y(); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point root_point = event->root_location(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.globalX = root_point.x(); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.globalY = root_point.y(); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return webkit_event; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebKeyboardEvent MakeWebKeyboardEvent(ui::KeyEvent* event) { 290a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!event->HasNativeEvent()) 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return blink::WebKeyboardEvent(); 292a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Windows can figure out whether or not to construct a RawKeyDown or a Char 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebInputEvent based on the type of message carried in 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // event->native_event(). X11 is not so fortunate, there is no separate 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // translated event type, so DesktopHostLinux sends an extra KeyEvent with 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is_char() == true. We need to pass the ui::KeyEvent to the X11 function 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to detect this case so the right event type can be constructed. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Key events require no translation by the aura system. 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return MakeWebKeyboardEventFromNativeEvent(event->native_event()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return MakeWebKeyboardEventFromAuraEvent(event); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebGestureEvent MakeWebGestureEvent(ui::GestureEvent* event) { 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebGestureEvent gesture_event; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (event->HasNativeEvent()) 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gesture_event = MakeWebGestureEventFromNativeEvent(event->native_event()); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gesture_event = MakeWebGestureEventFromUIEvent(*event); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event = MakeWebGestureEventFromUIEvent(*event); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.x = event->x(); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.y = event->y(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point root_point = event->root_location(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.globalX = root_point.x(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.globalY = root_point.y(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gesture_event; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebGestureEvent MakeWebGestureEvent(ui::ScrollEvent* event) { 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebGestureEvent gesture_event; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event = MakeWebGestureEventFromNativeEvent(event->native_event()); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event = MakeWebGestureEventFromAuraEvent(event); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.x = event->x(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.y = event->y(); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point root_point = event->root_location(); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.globalX = root_point.x(); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gesture_event.globalY = root_point.y(); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gesture_event; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 347f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebGestureEvent MakeWebGestureEventFlingCancel() { 348f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebGestureEvent gesture_event; 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All other fields are ignored on a GestureFlingCancel event. 351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gesture_event.type = blink::WebInputEvent::GestureFlingCancel; 35246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gesture_event.sourceDevice = blink::WebGestureDeviceTouchpad; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gesture_event; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseEvent MakeWebMouseEventFromAuraEvent(ui::MouseEvent* event) { 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent webkit_event; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.button = blink::WebMouseEvent::ButtonNone; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (event->flags() & ui::EF_LEFT_MOUSE_BUTTON) 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.button = blink::WebMouseEvent::ButtonLeft; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (event->flags() & ui::EF_MIDDLE_MOUSE_BUTTON) 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.button = blink::WebMouseEvent::ButtonMiddle; 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (event->flags() & ui::EF_RIGHT_MOUSE_BUTTON) 368f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.button = blink::WebMouseEvent::ButtonRight; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (event->type()) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ui::ET_MOUSE_PRESSED: 372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::MouseDown; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.clickCount = event->GetClickCount(); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ui::ET_MOUSE_RELEASED: 376f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::MouseUp; 377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) webkit_event.clickCount = event->GetClickCount(); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ui::ET_MOUSE_ENTERED: 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ui::ET_MOUSE_EXITED: 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ui::ET_MOUSE_MOVED: 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ui::ET_MOUSE_DRAGGED: 383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::MouseMove; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIMPLEMENTED() << "Received unexpected event: " << event->type(); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return webkit_event; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::MouseWheelEvent* event) { 395f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseWheelEvent webkit_event; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 397f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.type = blink::WebInputEvent::MouseWheel; 398f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) webkit_event.button = blink::WebMouseEvent::ButtonNone; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if ((event->flags() & ui::EF_SHIFT_DOWN) != 0 && event->x_offset() == 0) { 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaX = event->y_offset(); 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaY = 0; 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaX = event->x_offset(); 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webkit_event.deltaY = event->y_offset(); 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 410ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return webkit_event; 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 417