web_input_event_util.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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_util.h" 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 7bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "base/strings/string_util.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/gesture_event_data.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/motion_event.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebGestureEvent; 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebInputEvent; 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebTouchEvent; 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using blink::WebTouchPoint; 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using ui::MotionEvent; 16bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 17bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochnamespace { 18bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 19bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochconst char* GetKeyIdentifier(ui::KeyboardCode key_code) { 20bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch switch (key_code) { 21bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MENU: 22bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Alt"; 23bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CONTROL: 24bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Control"; 25bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SHIFT: 26bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Shift"; 27bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CAPITAL: 28bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "CapsLock"; 29bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_LWIN: 30bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RWIN: 31bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Win"; 32bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_CLEAR: 33bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Clear"; 34bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_DOWN: 35bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Down"; 36bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_END: 37bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "End"; 38bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RETURN: 39bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Enter"; 40bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_EXECUTE: 41bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Execute"; 42bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F1: 43bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F1"; 44bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F2: 45bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F2"; 46bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F3: 47bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F3"; 48bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F4: 49bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F4"; 50bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F5: 51bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F5"; 52bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F6: 53bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F6"; 54bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F7: 55bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F7"; 56bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F8: 57bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F8"; 58bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F9: 59bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F9"; 60bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F10: 61bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F10"; 62bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F11: 63bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F11"; 64bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F12: 65bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F12"; 66bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F13: 67bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F13"; 68bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F14: 69bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F14"; 70bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F15: 71bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F15"; 72bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F16: 73bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F16"; 74bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F17: 75bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F17"; 76bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F18: 77bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F18"; 78bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F19: 79bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F19"; 80bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F20: 81bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F20"; 82bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F21: 83bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F21"; 84bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F22: 85bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F22"; 86bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F23: 87bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F23"; 88bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_F24: 89bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "F24"; 90bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_HELP: 91bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Help"; 92bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_HOME: 93bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Home"; 94bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_INSERT: 95bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Insert"; 96bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_LEFT: 97bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Left"; 98bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_NEXT: 99bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PageDown"; 100bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_PRIOR: 101bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PageUp"; 102bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_PAUSE: 103bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Pause"; 104bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SNAPSHOT: 105bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "PrintScreen"; 106bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_RIGHT: 107bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Right"; 108bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SCROLL: 109bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Scroll"; 110bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_SELECT: 111bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Select"; 112bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_UP: 113bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "Up"; 114bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_DELETE: 115bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "U+007F"; // Standard says that DEL becomes U+007F. 116bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_NEXT_TRACK: 117bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaNextTrack"; 118bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_PREV_TRACK: 119bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaPreviousTrack"; 120bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_STOP: 121bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaStop"; 122bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_MEDIA_PLAY_PAUSE: 123bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "MediaPlayPause"; 124bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_MUTE: 125bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeMute"; 126bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_DOWN: 127bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeDown"; 128bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch case ui::VKEY_VOLUME_UP: 129bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return "VolumeUp"; 130bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch default: 131bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return NULL; 132bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch }; 133bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 134bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebInputEvent::Type ToWebInputEventType(MotionEvent::Action action) { 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (action) { 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_DOWN: 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchStart; 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_MOVE: 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchMove; 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_UP: 142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchEnd; 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_CANCEL: 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchCancel; 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_DOWN: 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchStart; 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_UP: 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::TouchEnd; 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "Invalid MotionEvent::Action."; 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebInputEvent::Undefined; 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Note that |is_action_pointer| is meaningful only in the context of 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// |ACTION_POINTER_UP| and |ACTION_POINTER_DOWN|; other actions map directly to 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// WebTouchPoint::State. 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebTouchPoint::State ToWebTouchPointState(MotionEvent::Action action, 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool is_action_pointer) { 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (action) { 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_DOWN: 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StatePressed; 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_MOVE: 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateMoved; 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_UP: 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateReleased; 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_CANCEL: 167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateCancelled; 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_DOWN: 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return is_action_pointer ? WebTouchPoint::StatePressed 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : WebTouchPoint::StateStationary; 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case MotionEvent::ACTION_POINTER_UP: 172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return is_action_pointer ? WebTouchPoint::StateReleased 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : WebTouchPoint::StateStationary; 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "Invalid MotionEvent::Action."; 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return WebTouchPoint::StateUndefined; 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebTouchPoint CreateWebTouchPoint(const MotionEvent& event, 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t pointer_index, 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float scale) { 182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebTouchPoint touch; 183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.id = event.GetPointerId(pointer_index); 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.state = ToWebTouchPointState( 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event.GetAction(), 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static_cast<int>(pointer_index) == event.GetActionIndex()); 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.position.x = event.GetX(pointer_index) * scale; 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.position.y = event.GetY(pointer_index) * scale; 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // TODO(joth): Raw event co-ordinates. 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.screenPosition = touch.position; 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.radiusX = touch.radiusY = 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event.GetTouchMajor(pointer_index) * 0.5f * scale; 193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) touch.force = event.GetPressure(pointer_index); 194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return touch; 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 198bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} // namespace 199bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 200bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochnamespace content { 201bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UpdateWindowsKeyCodeAndKeyIdentifier(blink::WebKeyboardEvent* event, 203bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ui::KeyboardCode windows_key_code) { 204bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch event->windowsKeyCode = windows_key_code; 205bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 206bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch const char* id = GetKeyIdentifier(windows_key_code); 207bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch if (id) { 208bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::strlcpy(event->keyIdentifier, id, sizeof(event->keyIdentifier) - 1); 209bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } else { 210bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::snprintf(event->keyIdentifier, sizeof(event->keyIdentifier), "U+%04X", 211bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch base::ToUpperASCII(static_cast<int>(windows_key_code))); 212bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch } 213bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 214bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)blink::WebTouchEvent CreateWebTouchEventFromMotionEvent( 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ui::MotionEvent& event, 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float scale) { 218a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) blink::WebTouchEvent result; 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) result.type = ToWebInputEventType(event.GetAction()); 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(WebInputEvent::isTouchEventType(result.type)); 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) result.timeStampSeconds = 224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) (event.GetEventTime() - base::TimeTicks()).InSecondsF(); 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) result.touchesLength = 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::min(event.GetPointerCount(), 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static_cast<size_t>(WebTouchEvent::touchesLengthCap)); 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_GT(result.touchesLength, 0U); 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (size_t i = 0; i < result.touchesLength; ++i) 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) result.touches[i] = CreateWebTouchPoint(event, i, scale); 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return result; 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 237a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)WebGestureEvent CreateWebGestureEventFromGestureEventData( 238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ui::GestureEventData& data, 239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float scale) { 240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) WebGestureEvent gesture; 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.x = data.x * scale; 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.y = data.y * scale; 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.timeStampSeconds = (data.time - base::TimeTicks()).InSecondsF(); 244a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.sourceDevice = WebGestureEvent::Touchscreen; 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (data.type) { 247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SHOW_PRESS: 248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureShowPress; 249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.showPress.width = data.details.show_press.width * scale; 250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.showPress.width = data.details.show_press.width * scale; 251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 252a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_DOUBLE_TAP: 253a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureDoubleTap; 254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_EQ(1, data.details.tap.tap_count); 255a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.tapCount = data.details.tap.tap_count; 256a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.width = data.details.tap.width * scale; 257a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.height = data.details.tap.height * scale; 258a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 259a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP: 260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTap; 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_EQ(1, data.details.tap.tap_count); 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.tapCount = data.details.tap.tap_count; 263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.width = data.details.tap.width * scale; 264a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.height = data.details.tap.height * scale; 265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP_UNCONFIRMED: 267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTapUnconfirmed; 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_EQ(1, data.details.tap.tap_count); 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.tapCount = data.details.tap.tap_count; 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.width = data.details.tap.width * scale; 271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tap.height = data.details.tap.height * scale; 272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_LONG_PRESS: 274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureLongPress; 275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.longPress.width = data.details.long_press.width * scale; 276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.longPress.height = data.details.long_press.height * scale; 277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_LONG_TAP: 279a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureLongTap; 280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.longPress.width = data.details.long_press.width * scale; 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.longPress.height = data.details.long_press.height * scale; 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SCROLL_BEGIN: 284a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureScrollBegin; 285a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.scrollBegin.deltaXHint = 286a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.scroll_begin.delta_x_hint * scale; 287a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.scrollBegin.deltaYHint = 288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.scroll_begin.delta_y_hint * scale; 289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 290a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SCROLL_UPDATE: 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureScrollUpdate; 292a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.scrollUpdate.deltaX = 293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.scroll_update.delta_x * scale; 294a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.scrollUpdate.deltaY = 295a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.scroll_update.delta_y * scale; 296a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.scrollUpdate.velocityX = 297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.scroll_update.velocity_x * scale; 298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.scrollUpdate.velocityY = 299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.scroll_update.velocity_y * scale; 300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 301a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_SCROLL_END: 302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureScrollEnd; 303a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 304a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_SCROLL_FLING_START: 305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureFlingStart; 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.flingStart.velocityX = 307a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.fling_start.velocity_x * scale; 308a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.flingStart.velocityY = 309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) data.details.fling_start.velocity_y * scale; 310a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_SCROLL_FLING_CANCEL: 312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureFlingCancel; 313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 314a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_PINCH_BEGIN: 315a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GesturePinchBegin; 316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_PINCH_UPDATE: 318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GesturePinchUpdate; 319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.pinchUpdate.scale = data.details.pinch_update.scale; 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_PINCH_END: 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GesturePinchEnd; 323a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP_CANCEL: 325a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTapCancel; 326a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 327a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ui::ET_GESTURE_TAP_DOWN: 328a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.type = WebInputEvent::GestureTapDown; 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tapDown.width = data.details.tap_down.width * scale; 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture.data.tapDown.height = data.details.tap_down.height * scale; 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 332a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) default: 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "ui::EventType provided wasn't a valid gesture event."; 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gesture; 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 340bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} // namespace content 341