1bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch// found in the LICENSE file. 4bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_builders_android.h" 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 7bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/logging.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/renderer_host/input/motion_event_android.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_util.h" 10bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_util_posix.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_code_conversion_android.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes_posix.h" 13bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputEvent; 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebKeyboardEvent; 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebGestureEvent; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseEvent; 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMouseWheelEvent; 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using blink::WebTouchEvent; 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using blink::WebTouchPoint; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content { 23bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 24bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochWebKeyboardEvent WebKeyboardEventBuilder::Build(WebInputEvent::Type type, 25bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int modifiers, 26bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch double time_sec, 27bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int keycode, 28bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int unicode_character, 29bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch bool is_system_key) { 30bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch DCHECK(WebInputEvent::isKeyboardEventType(type)); 31bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebKeyboardEvent result; 32bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.type = type; 34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.modifiers = modifiers; 35bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.timeStampSeconds = time_sec; 36bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ui::KeyboardCode windows_key_code = 37bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ui::KeyboardCodeFromAndroidKeyCode(keycode); 38bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch UpdateWindowsKeyCodeAndKeyIdentifier(&result, windows_key_code); 39bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.modifiers |= GetLocationModifiersFromWindowsKeyCode(windows_key_code); 40bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.nativeKeyCode = keycode; 41bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.unmodifiedText[0] = unicode_character; 42bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (result.windowsKeyCode == ui::VKEY_RETURN) { 43bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // This is the same behavior as GTK: 44bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // We need to treat the enter key as a key press of character \r. This 45bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // is apparently just how webkit handles it and what it expects. 46bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.unmodifiedText[0] = '\r'; 47bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } 48bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.text[0] = result.unmodifiedText[0]; 49bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.isSystemKey = is_system_key; 50bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 51bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return result; 52bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 53bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)WebMouseEvent WebMouseEventBuilder::Build(blink::WebInputEvent::Type type, 55bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebMouseEvent::Button button, 56bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch double time_sec, 57bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int window_x, 58bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int window_y, 59bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int modifiers, 60bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int click_count) { 61bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch DCHECK(WebInputEvent::isMouseEventType(type)); 62bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebMouseEvent result; 63bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 64bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.type = type; 65bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.x = window_x; 66bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.y = window_y; 67bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.windowX = window_x; 68bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.windowY = window_y; 69bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.timeStampSeconds = time_sec; 70bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.clickCount = click_count; 71bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.modifiers = modifiers; 72bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 73bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (type == WebInputEvent::MouseDown || type == WebInputEvent::MouseUp) 74bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.button = button; 75bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch else 76bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.button = WebMouseEvent::ButtonNone; 77bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 78bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return result; 79bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 80bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 81bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochWebMouseWheelEvent WebMouseWheelEventBuilder::Build(Direction direction, 82bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch double time_sec, 83bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int window_x, 84bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int window_y) { 85bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebMouseWheelEvent result; 86bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 87bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.type = WebInputEvent::MouseWheel; 88bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.x = window_x; 89bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.y = window_y; 90bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.windowX = window_x; 91bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.windowY = window_y; 92bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.timeStampSeconds = time_sec; 93bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.button = WebMouseEvent::ButtonNone; 94bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 95bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // The below choices are matched from GTK. 96bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const float scrollbar_pixels_per_tick = 160.0f / 3.0f; 97bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 98bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch switch (direction) { 99bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case DIRECTION_UP: 100bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.deltaY = scrollbar_pixels_per_tick; 101bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.wheelTicksY = 1; 102bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 103bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case DIRECTION_DOWN: 104bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.deltaY = -scrollbar_pixels_per_tick; 105bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.wheelTicksY = -1; 106bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 107bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case DIRECTION_LEFT: 108bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.deltaX = scrollbar_pixels_per_tick; 109bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.wheelTicksX = 1; 110bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 111bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case DIRECTION_RIGHT: 112bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.deltaX = -scrollbar_pixels_per_tick; 113bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.wheelTicksX = -1; 114bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch break; 115bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } 116bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 117bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return result; 118bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 119bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 120bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben MurdochWebGestureEvent WebGestureEventBuilder::Build(WebInputEvent::Type type, 121bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch double time_sec, 122bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int x, 123bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch int y) { 124bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch DCHECK(WebInputEvent::isGestureEventType(type)); 125bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebGestureEvent result; 126bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 127bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.type = type; 128bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.x = x; 129bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.y = y; 130bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch result.timeStampSeconds = time_sec; 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) result.sourceDevice = blink::WebGestureDeviceTouchscreen; 132bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 133bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return result; 134bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 135bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 136bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} // namespace content 137