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 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// MSVC++ requires this to be set before any other includes to get M_PI. 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define _USE_MATH_DEFINES 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 8bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_util.h" 9bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <cmath> 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 12bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/strings/string_util.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/common/input/web_touch_event_traits.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/events/event_constants.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/gesture_event_data.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/motion_event.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebGestureEvent; 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebInputEvent; 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebTouchEvent; 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebTouchPoint; 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using ui::MotionEvent; 23bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 24bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochnamespace { 25bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 26bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochconst char* GetKeyIdentifier(ui::KeyboardCode key_code) { 27bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch switch (key_code) { 28bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MENU: 29bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Alt"; 30bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CONTROL: 31bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Control"; 32bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SHIFT: 33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Shift"; 34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CAPITAL: 35bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "CapsLock"; 36bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_LWIN: 37bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RWIN: 38bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Win"; 39bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CLEAR: 40bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Clear"; 41bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_DOWN: 42bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Down"; 43bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_END: 44bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "End"; 45bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RETURN: 46bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Enter"; 47bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_EXECUTE: 48bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Execute"; 49bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F1: 50bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F1"; 51bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F2: 52bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F2"; 53bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F3: 54bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F3"; 55bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F4: 56bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F4"; 57bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F5: 58bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F5"; 59bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F6: 60bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F6"; 61bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F7: 62bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F7"; 63bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F8: 64bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F8"; 65bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F9: 66bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F9"; 67bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F10: 68bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F10"; 69bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F11: 70bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F11"; 71bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F12: 72bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F12"; 73bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F13: 74bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F13"; 75bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F14: 76bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F14"; 77bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F15: 78bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F15"; 79bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F16: 80bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F16"; 81bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F17: 82bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F17"; 83bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F18: 84bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F18"; 85bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F19: 86bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F19"; 87bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F20: 88bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F20"; 89bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F21: 90bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F21"; 91bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F22: 92bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F22"; 93bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F23: 94bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F23"; 95bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F24: 96bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F24"; 97bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_HELP: 98bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Help"; 99bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_HOME: 100bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Home"; 101bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_INSERT: 102bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Insert"; 103bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_LEFT: 104bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Left"; 105bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_NEXT: 106bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PageDown"; 107bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_PRIOR: 108bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PageUp"; 109bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_PAUSE: 110bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Pause"; 111bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SNAPSHOT: 112bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PrintScreen"; 113bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RIGHT: 114bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Right"; 115bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SCROLL: 116bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Scroll"; 117bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SELECT: 118bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Select"; 119bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_UP: 120bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Up"; 121bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_DELETE: 122a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return "U+007F"; // Standard says that DEL becomes U+007F. 123bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_NEXT_TRACK: 124bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaNextTrack"; 125bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_PREV_TRACK: 126bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaPreviousTrack"; 127bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_STOP: 128bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaStop"; 129bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_PLAY_PAUSE: 130bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaPlayPause"; 131bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_MUTE: 132bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeMute"; 133bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_DOWN: 134bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeDown"; 135bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_UP: 136bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeUp"; 137bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch default: 138bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return NULL; 139bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch }; 140bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 141bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebInputEvent::Type ToWebInputEventType(MotionEvent::Action action) { 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (action) { 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_DOWN: 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchStart; 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_MOVE: 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchMove; 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_UP: 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchEnd; 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_CANCEL: 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchCancel; 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_DOWN: 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchStart; 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_UP: 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchEnd; 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "Invalid MotionEvent::Action."; 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::Undefined; 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Note that |is_action_pointer| is meaningful only in the context of 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// |ACTION_POINTER_UP| and |ACTION_POINTER_DOWN|; other actions map directly to 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// WebTouchPoint::State. 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebTouchPoint::State ToWebTouchPointState(MotionEvent::Action action, 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool is_action_pointer) { 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (action) { 167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_DOWN: 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StatePressed; 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_MOVE: 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateMoved; 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_UP: 172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateReleased; 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_CANCEL: 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateCancelled; 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_DOWN: 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return is_action_pointer ? WebTouchPoint::StatePressed 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : WebTouchPoint::StateStationary; 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_UP: 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return is_action_pointer ? WebTouchPoint::StateReleased 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : WebTouchPoint::StateStationary; 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "Invalid MotionEvent::Action."; 183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateUndefined; 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebTouchPoint CreateWebTouchPoint(const MotionEvent& event, 187a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch size_t pointer_index) { 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebTouchPoint touch; 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.id = event.GetPointerId(pointer_index); 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.state = ToWebTouchPointState( 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event.GetAction(), 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static_cast<int>(pointer_index) == event.GetActionIndex()); 193a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch touch.position.x = event.GetX(pointer_index); 194a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch touch.position.y = event.GetY(pointer_index); 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) touch.screenPosition.x = event.GetRawX(pointer_index); 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) touch.screenPosition.y = event.GetRawY(pointer_index); 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A note on touch ellipse specifications: 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Android MotionEvent provides the major and minor axes of the touch ellipse, 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // as well as the orientation of the major axis clockwise from vertical, in 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // radians. See: 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // http://developer.android.com/reference/android/view/MotionEvent.html 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The proposed extension to W3C Touch Events specifies the touch ellipse 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // using two radii along x- & y-axes and a positive acute rotation angle in 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // degrees. See: 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // http://dvcs.w3.org/hg/webevents/raw-file/default/touchevents.html 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float major_radius = event.GetTouchMajor(pointer_index) / 2.f; 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float minor_radius = event.GetTouchMinor(pointer_index) / 2.f; 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float orientation_deg = event.GetOrientation(pointer_index) * 180.f / M_PI; 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK_GE(major_radius, 0) << "Unexpected touch major < 0"; 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK_GE(minor_radius, 0) << "Unexpected touch minor < 0"; 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK_GE(major_radius, minor_radius) << "Unexpected major/minor touch radii"; 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(-90 <= orientation_deg && orientation_deg <= 90) 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci << "Unexpected touch orientation angle"; 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (orientation_deg >= 0) { 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The case orientation_deg == 0 is handled here on purpose: although the 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 'else' block is equivalent in this case, we want to pass the 0 value 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // unchanged (and 0 is the default value for many devices that don't 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // report elliptical touches). 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.radiusX = minor_radius; 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.radiusY = major_radius; 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.rotationAngle = orientation_deg; 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.radiusX = major_radius; 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.radiusY = minor_radius; 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci touch.rotationAngle = orientation_deg + 90; 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.force = event.GetPressure(pointer_index); 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return touch; 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 237bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} // namespace 238bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 239bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochnamespace content { 240bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 241f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UpdateWindowsKeyCodeAndKeyIdentifier(blink::WebKeyboardEvent* event, 242bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ui::KeyboardCode windows_key_code) { 243bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch event->windowsKeyCode = windows_key_code; 244bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 245bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const char* id = GetKeyIdentifier(windows_key_code); 246bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (id) { 247bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::strlcpy(event->keyIdentifier, id, sizeof(event->keyIdentifier) - 1); 248bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } else { 249a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch base::snprintf(event->keyIdentifier, 250a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch sizeof(event->keyIdentifier), 251a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch "U+%04X", 252bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::ToUpperASCII(static_cast<int>(windows_key_code))); 253bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } 254bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 255bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 256a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)blink::WebTouchEvent CreateWebTouchEventFromMotionEvent( 257a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const ui::MotionEvent& event) { 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci COMPILE_ASSERT(static_cast<int>(MotionEvent::MAX_TOUCH_POINT_COUNT) == 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<int>(blink::WebTouchEvent::touchesLengthCap), 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci inconsistent_maximum_number_of_active_touch_points); 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) blink::WebTouchEvent result; 263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu WebTouchEventTraits::ResetType( 2655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ToWebInputEventType(event.GetAction()), 2665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu (event.GetEventTime() - base::TimeTicks()).InSecondsF(), 2675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu &result); 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result.modifiers = EventFlagsToWebEventModifiers(event.GetFlags()); 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) result.touchesLength = 271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::min(event.GetPointerCount(), 272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static_cast<size_t>(WebTouchEvent::touchesLengthCap)); 273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_GT(result.touchesLength, 0U); 274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (size_t i = 0; i < result.touchesLength; ++i) 276a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch result.touches[i] = CreateWebTouchPoint(event, i); 277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return result; 279a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebGestureEvent CreateWebGestureEventFromGestureEventData( 282a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const ui::GestureEventData& data) { 283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebGestureEvent gesture; 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gesture.modifiers = EventFlagsToWebEventModifiers(data.flags); 285a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.x = data.x; 286a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.y = data.y; 2876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) gesture.globalX = data.raw_x; 2886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) gesture.globalY = data.raw_y; 289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.timeStampSeconds = (data.time - base::TimeTicks()).InSecondsF(); 29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gesture.sourceDevice = blink::WebGestureDeviceTouchscreen; 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switch (data.type()) { 293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SHOW_PRESS: 294a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureShowPress; 295a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.showPress.width = data.details.bounding_box_f().width(); 296a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.showPress.height = data.details.bounding_box_f().height(); 297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_DOUBLE_TAP: 299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureDoubleTap; 300effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_EQ(1, data.details.tap_count()); 301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gesture.data.tap.tapCount = data.details.tap_count(); 302a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tap.width = data.details.bounding_box_f().width(); 303a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tap.height = data.details.bounding_box_f().height(); 304a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP: 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTap; 307effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_EQ(1, data.details.tap_count()); 308effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gesture.data.tap.tapCount = data.details.tap_count(); 309a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tap.width = data.details.bounding_box_f().width(); 310a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tap.height = data.details.bounding_box_f().height(); 311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP_UNCONFIRMED: 313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTapUnconfirmed; 314effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_EQ(1, data.details.tap_count()); 315effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gesture.data.tap.tapCount = data.details.tap_count(); 316a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tap.width = data.details.bounding_box_f().width(); 317a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tap.height = data.details.bounding_box_f().height(); 318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_LONG_PRESS: 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureLongPress; 321a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.longPress.width = data.details.bounding_box_f().width(); 322a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.longPress.height = data.details.bounding_box_f().height(); 323a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_LONG_TAP: 325a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureLongTap; 326a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.longPress.width = data.details.bounding_box_f().width(); 327a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.longPress.height = data.details.bounding_box_f().height(); 328a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SCROLL_BEGIN: 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureScrollBegin; 331a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.scrollBegin.deltaXHint = data.details.scroll_x_hint(); 332a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.scrollBegin.deltaYHint = data.details.scroll_y_hint(); 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SCROLL_UPDATE: 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureScrollUpdate; 336a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.scrollUpdate.deltaX = data.details.scroll_x(); 337a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.scrollUpdate.deltaY = data.details.scroll_y(); 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SCROLL_END: 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureScrollEnd; 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_SCROLL_FLING_START: 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureFlingStart; 344a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.flingStart.velocityX = data.details.velocity_x(); 345a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.flingStart.velocityY = data.details.velocity_y(); 346a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 347a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_SCROLL_FLING_CANCEL: 348a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureFlingCancel; 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_PINCH_BEGIN: 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GesturePinchBegin; 352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_PINCH_UPDATE: 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GesturePinchUpdate; 355effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gesture.data.pinchUpdate.scale = data.details.scale(); 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_PINCH_END: 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GesturePinchEnd; 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP_CANCEL: 361a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTapCancel; 362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP_DOWN: 364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTapDown; 365a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tapDown.width = data.details.bounding_box_f().width(); 366a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gesture.data.tapDown.height = data.details.bounding_box_f().height(); 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case ui::ET_GESTURE_BEGIN: 369c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case ui::ET_GESTURE_END: 370c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch NOTREACHED() << "ET_GESTURE_BEGIN and ET_GESTURE_END are only produced " 371c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << "in Aura, and should never end up here."; 372c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch break; 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) default: 374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "ui::EventType provided wasn't a valid gesture event."; 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gesture; 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint EventFlagsToWebEventModifiers(int flags) { 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int modifiers = 0; 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_SHIFT_DOWN) 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::ShiftKey; 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_CONTROL_DOWN) 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::ControlKey; 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_ALT_DOWN) 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::AltKey; 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_COMMAND_DOWN) 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::MetaKey; 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_LEFT_MOUSE_BUTTON) 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::LeftButtonDown; 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_MIDDLE_MOUSE_BUTTON) 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::MiddleButtonDown; 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_RIGHT_MOUSE_BUTTON) 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::RightButtonDown; 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_CAPS_LOCK_DOWN) 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::CapsLockOn; 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_IS_REPEAT) 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::IsAutoRepeat; 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (flags & ui::EF_NUMPAD_KEY) 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci modifiers |= blink::WebInputEvent::IsKeyPad; 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return modifiers; 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint WebEventModifiersToEventFlags(int modifiers) { 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int flags = 0; 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::ShiftKey) 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_SHIFT_DOWN; 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::ControlKey) 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_CONTROL_DOWN; 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::AltKey) 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_ALT_DOWN; 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::MetaKey) 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_COMMAND_DOWN; 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::LeftButtonDown) 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_LEFT_MOUSE_BUTTON; 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::MiddleButtonDown) 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_MIDDLE_MOUSE_BUTTON; 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::RightButtonDown) 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_RIGHT_MOUSE_BUTTON; 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::CapsLockOn) 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_CAPS_LOCK_DOWN; 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::IsAutoRepeat) 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_IS_REPEAT; 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (modifiers & blink::WebInputEvent::IsKeyPad) 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_NUMPAD_KEY; 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return flags; 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 437bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} // namespace content 438