15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/renderer_host/input/motion_event_android.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <android/input.h> 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/android/jni_android.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/float_util.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "jni/MotionEvent_jni.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/events/event_constants.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::android::AttachCurrentThread; 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using namespace JNI_MotionEvent; 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content { 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)int ToAndroidAction(MotionEventAndroid::Action action) { 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (action) { 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case MotionEventAndroid::ACTION_DOWN: 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ACTION_DOWN; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case MotionEventAndroid::ACTION_UP: 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ACTION_UP; 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case MotionEventAndroid::ACTION_MOVE: 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ACTION_MOVE; 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case MotionEventAndroid::ACTION_CANCEL: 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ACTION_CANCEL; 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case MotionEventAndroid::ACTION_POINTER_DOWN: 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ACTION_POINTER_DOWN; 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case MotionEventAndroid::ACTION_POINTER_UP: 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ACTION_POINTER_UP; 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "Invalid Android MotionEvent type for gesture detection: " 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) << action; 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ACTION_CANCEL; 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MotionEventAndroid::Action FromAndroidAction(int android_action) { 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (android_action) { 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ACTION_DOWN: 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return MotionEventAndroid::ACTION_DOWN; 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ACTION_UP: 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return MotionEventAndroid::ACTION_UP; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ACTION_MOVE: 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return MotionEventAndroid::ACTION_MOVE; 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ACTION_CANCEL: 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return MotionEventAndroid::ACTION_CANCEL; 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ACTION_POINTER_DOWN: 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return MotionEventAndroid::ACTION_POINTER_DOWN; 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case ACTION_POINTER_UP: 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return MotionEventAndroid::ACTION_POINTER_UP; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) default: 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NOTREACHED() << "Invalid Android MotionEvent type for gesture detection: " 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << android_action; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return MotionEventAndroid::ACTION_CANCEL; 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 61116680a4aac90f2aa7413d9095a592090648e557Ben MurdochMotionEventAndroid::ToolType FromAndroidToolType(int android_tool_type) { 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switch (android_tool_type) { 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case TOOL_TYPE_UNKNOWN: 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return MotionEventAndroid::TOOL_TYPE_UNKNOWN; 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case TOOL_TYPE_FINGER: 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return MotionEventAndroid::TOOL_TYPE_FINGER; 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case TOOL_TYPE_STYLUS: 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return MotionEventAndroid::TOOL_TYPE_STYLUS; 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch case TOOL_TYPE_MOUSE: 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return MotionEventAndroid::TOOL_TYPE_MOUSE; 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) case TOOL_TYPE_ERASER: 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return MotionEventAndroid::TOOL_TYPE_ERASER; 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch default: 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NOTREACHED() << "Invalid Android MotionEvent tool type: " 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << android_tool_type; 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return MotionEventAndroid::TOOL_TYPE_UNKNOWN; 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint FromAndroidButtonState(int button_state) { 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int result = 0; 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if ((button_state & BUTTON_BACK) != 0) 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result |= MotionEventAndroid::BUTTON_BACK; 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if ((button_state & BUTTON_FORWARD) != 0) 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result |= MotionEventAndroid::BUTTON_FORWARD; 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if ((button_state & BUTTON_PRIMARY) != 0) 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result |= MotionEventAndroid::BUTTON_PRIMARY; 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if ((button_state & BUTTON_SECONDARY) != 0) 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result |= MotionEventAndroid::BUTTON_SECONDARY; 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if ((button_state & BUTTON_TERTIARY) != 0) 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch result |= MotionEventAndroid::BUTTON_TERTIARY; 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return result; 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint FromAndroidMetaState(int meta_state) { 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int flags = ui::EF_NONE; 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if ((meta_state & AMETA_SHIFT_ON) != 0) 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_SHIFT_DOWN; 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if ((meta_state & AMETA_CTRL_ON) != 0) 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_CONTROL_DOWN; 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if ((meta_state & AMETA_ALT_ON) != 0) 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_ALT_DOWN; 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if ((meta_state & AMETA_META_ON) != 0) 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_COMMAND_DOWN; 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if ((meta_state & AMETA_CAPS_LOCK_ON) != 0) 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci flags |= ui::EF_CAPS_LOCK_DOWN; 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return flags; 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int64 ToAndroidTime(base::TimeTicks time) { 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return (time - base::TimeTicks()).InMilliseconds(); 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::TimeTicks FromAndroidTime(int64 time_ms) { 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms); 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifloat ToValidFloat(float x) { 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return base::IsNaN(x) ? 0.f : x; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 124a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochMotionEventAndroid::MotionEventAndroid(float pix_to_dip, 125a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch JNIEnv* env, 126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jobject event, 127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jlong time_ms, 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jint android_action, 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jint pointer_count, 130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jint history_size, 131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jint action_index, 132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch jfloat pos_x_0_pixels, 133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch jfloat pos_y_0_pixels, 134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch jfloat pos_x_1_pixels, 135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch jfloat pos_y_1_pixels, 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jint pointer_id_0, 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) jint pointer_id_1, 138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch jfloat touch_major_0_pixels, 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) jfloat touch_major_1_pixels, 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci jfloat touch_minor_0_pixels, 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci jfloat touch_minor_1_pixels, 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci jfloat orientation_0_rad, 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci jfloat orientation_1_rad, 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) jfloat raw_pos_x_pixels, 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jfloat raw_pos_y_pixels, 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jint android_tool_type_0, 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jint android_tool_type_1, 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci jint android_button_state, 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci jint meta_state) 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : cached_time_(FromAndroidTime(time_ms)), 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_action_(FromAndroidAction(android_action)), 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_count_(pointer_count), 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_history_size_(history_size), 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_action_index_(action_index), 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_button_state_(FromAndroidButtonState(android_button_state)), 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_flags_(FromAndroidMetaState(meta_state)), 157a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch pix_to_dip_(pix_to_dip), 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) should_recycle_(false) { 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_GT(pointer_count, 0); 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_GE(history_size, 0); 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event_.Reset(env, event); 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(event_.obj()); 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cached_positions_[0] = ToDips(gfx::PointF(pos_x_0_pixels, pos_y_0_pixels)); 166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cached_positions_[1] = ToDips(gfx::PointF(pos_x_1_pixels, pos_y_1_pixels)); 167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_ids_[0] = pointer_id_0; 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_ids_[1] = pointer_id_1; 169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cached_touch_majors_[0] = ToDips(touch_major_0_pixels); 170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cached_touch_majors_[1] = ToDips(touch_major_1_pixels); 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_touch_minors_[0] = ToDips(touch_minor_0_pixels); 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_touch_minors_[1] = ToDips(touch_minor_1_pixels); 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_orientations_[0] = ToValidFloat(orientation_0_rad); 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_orientations_[1] = ToValidFloat(orientation_1_rad); 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cached_raw_position_offset_ = 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ToDips(gfx::PointF(raw_pos_x_pixels, raw_pos_y_pixels)) - 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cached_positions_[0]; 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_tool_types_[0] = FromAndroidToolType(android_tool_type_0); 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_tool_types_[1] = FromAndroidToolType(android_tool_type_1); 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 182a02191e04bc25c4935f804f2c080ae28663d096dBen MurdochMotionEventAndroid::MotionEventAndroid(float pix_to_dip, 183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch JNIEnv* env, 184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch jobject event) 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : cached_time_(FromAndroidTime(Java_MotionEvent_getEventTime(env, event))), 186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cached_action_( 187a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch FromAndroidAction(Java_MotionEvent_getActionMasked(env, event))), 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_count_(Java_MotionEvent_getPointerCount(env, event)), 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_history_size_(Java_MotionEvent_getHistorySize(env, event)), 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_action_index_(Java_MotionEvent_getActionIndex(env, event)), 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_button_state_( 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FromAndroidButtonState(Java_MotionEvent_getButtonState(env, event))), 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_flags_( 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FromAndroidMetaState(Java_MotionEvent_getMetaState(env, event))), 195a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch pix_to_dip_(pix_to_dip), 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) should_recycle_(true) { 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event_.Reset(env, event); 198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(event_.obj()); 199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) { 201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (i < cached_pointer_count_) { 202a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch cached_positions_[i] = 203a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ToDips(gfx::PointF(Java_MotionEvent_getXF_I(env, event, i), 204a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Java_MotionEvent_getYF_I(env, event, i))); 205a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_ids_[i] = Java_MotionEvent_getPointerId(env, event, i); 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_touch_majors_[i] = 207a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ToDips(Java_MotionEvent_getTouchMajorF_I(env, event, i)); 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_touch_minors_[i] = 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ToDips(Java_MotionEvent_getTouchMinorF_I(env, event, i)); 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_orientations_[i] = 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ToValidFloat(Java_MotionEvent_getOrientationF_I(env, event, i)); 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_tool_types_[i] = 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FromAndroidToolType(Java_MotionEvent_getToolType(env, event, i)); 214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_ids_[i] = 0; 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_touch_majors_[i] = 0.f; 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_touch_minors_[i] = 0.f; 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_orientations_[i] = 0.f; 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_tool_types_[i] = MotionEvent::TOOL_TYPE_UNKNOWN; 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cached_raw_position_offset_ = 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ToDips(gfx::PointF(Java_MotionEvent_getRawX(env, event), 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Java_MotionEvent_getRawY(env, event))) - 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cached_positions_[0]; 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other) 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : event_(Obtain(other)), 231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_time_(other.cached_time_), 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_action_(other.cached_action_), 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_count_(other.cached_pointer_count_), 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_history_size_(other.cached_history_size_), 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_action_index_(other.cached_action_index_), 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cached_raw_position_offset_(other.cached_raw_position_offset_), 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_button_state_(other.cached_button_state_), 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_flags_(other.cached_flags_), 239a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch pix_to_dip_(other.pix_to_dip_), 240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) should_recycle_(true) { 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(event_.obj()); 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) { 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_positions_[i] = other.cached_positions_[i]; 244a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_pointer_ids_[i] = other.cached_pointer_ids_[i]; 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cached_touch_majors_[i] = other.cached_touch_majors_[i]; 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_touch_minors_[i] = other.cached_touch_minors_[i]; 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cached_orientations_[i] = other.cached_orientations_[i]; 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cached_tool_types_[i] = other.cached_tool_types_[i]; 249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MotionEventAndroid::~MotionEventAndroid() { 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (should_recycle_) 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Java_MotionEvent_recycle(AttachCurrentThread(), event_.obj()); 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint MotionEventAndroid::GetId() const { 258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return 0; 259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MotionEventAndroid::Action MotionEventAndroid::GetAction() const { 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_action_; 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)int MotionEventAndroid::GetActionIndex() const { 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return cached_action_index_; 267f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)size_t MotionEventAndroid::GetPointerCount() const { 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_pointer_count_; 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int MotionEventAndroid::GetPointerId(size_t pointer_index) const { 274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_LT(pointer_index, cached_pointer_count_); 275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (pointer_index < MAX_POINTERS_TO_CACHE) 276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_pointer_ids_[pointer_index]; 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return Java_MotionEvent_getPointerId( 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AttachCurrentThread(), event_.obj(), pointer_index); 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)float MotionEventAndroid::GetX(size_t pointer_index) const { 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_LT(pointer_index, cached_pointer_count_); 283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (pointer_index < MAX_POINTERS_TO_CACHE) 284a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_positions_[pointer_index].x(); 285a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return ToDips(Java_MotionEvent_getXF_I( 286a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AttachCurrentThread(), event_.obj(), pointer_index)); 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)float MotionEventAndroid::GetY(size_t pointer_index) const { 290a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_LT(pointer_index, cached_pointer_count_); 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (pointer_index < MAX_POINTERS_TO_CACHE) 292a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_positions_[pointer_index].y(); 293a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return ToDips(Java_MotionEvent_getYF_I( 294a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AttachCurrentThread(), event_.obj(), pointer_index)); 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)float MotionEventAndroid::GetRawX(size_t pointer_index) const { 298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return GetX(pointer_index) + cached_raw_position_offset_.x(); 299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)float MotionEventAndroid::GetRawY(size_t pointer_index) const { 302f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return GetY(pointer_index) + cached_raw_position_offset_.y(); 303f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 304f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const { 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_LT(pointer_index, cached_pointer_count_); 307a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (pointer_index < MAX_POINTERS_TO_CACHE) 308a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_touch_majors_[pointer_index]; 309a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return ToDips(Java_MotionEvent_getTouchMajorF_I( 310a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AttachCurrentThread(), event_.obj(), pointer_index)); 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifloat MotionEventAndroid::GetTouchMinor(size_t pointer_index) const { 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK_LT(pointer_index, cached_pointer_count_); 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (pointer_index < MAX_POINTERS_TO_CACHE) 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return cached_touch_minors_[pointer_index]; 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ToDips(Java_MotionEvent_getTouchMinorF_I(AttachCurrentThread(), 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci event_.obj(), pointer_index)); 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifloat MotionEventAndroid::GetOrientation(size_t pointer_index) const { 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK_LT(pointer_index, cached_pointer_count_); 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (pointer_index < MAX_POINTERS_TO_CACHE) 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return cached_orientations_[pointer_index]; 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return ToValidFloat(Java_MotionEvent_getOrientationF_I( 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AttachCurrentThread(), event_.obj(), pointer_index)); 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)float MotionEventAndroid::GetPressure(size_t pointer_index) const { 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK_LT(pointer_index, cached_pointer_count_); 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return Java_MotionEvent_getPressureF_I( 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AttachCurrentThread(), event_.obj(), pointer_index); 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::TimeTicks MotionEventAndroid::GetEventTime() const { 336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_time_; 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)size_t MotionEventAndroid::GetHistorySize() const { 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return cached_history_size_; 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::TimeTicks MotionEventAndroid::GetHistoricalEventTime( 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t historical_index) const { 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return FromAndroidTime(Java_MotionEvent_getHistoricalEventTime( 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AttachCurrentThread(), event_.obj(), historical_index)); 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 349a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochfloat MotionEventAndroid::GetHistoricalTouchMajor( 350a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch size_t pointer_index, 351a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch size_t historical_index) const { 352a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I( 353a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)float MotionEventAndroid::GetHistoricalX(size_t pointer_index, 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t historical_index) const { 358a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return ToDips(Java_MotionEvent_getHistoricalXF_I_I( 359a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)float MotionEventAndroid::GetHistoricalY(size_t pointer_index, 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t historical_index) const { 364a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return ToDips(Java_MotionEvent_getHistoricalYF_I_I( 365a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdochui::MotionEvent::ToolType MotionEventAndroid::GetToolType( 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t pointer_index) const { 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK_LT(pointer_index, cached_pointer_count_); 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (pointer_index < MAX_POINTERS_TO_CACHE) 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return cached_tool_types_[pointer_index]; 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return FromAndroidToolType(Java_MotionEvent_getToolType( 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AttachCurrentThread(), event_.obj(), pointer_index)); 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint MotionEventAndroid::GetButtonState() const { 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return cached_button_state_; 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint MotionEventAndroid::GetFlags() const { 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return cached_flags_; 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<ui::MotionEvent> MotionEventAndroid::Clone() const { 386a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<MotionEvent>(new MotionEventAndroid(*this)); 387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 389a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const { 390a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // The input coordinates to |MotionEventAndroid| are always in device pixels, 391a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // but the cached coordinates are in DIPs. 392a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const gfx::PointF position_pixels = 393a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch gfx::ScalePoint(cached_positions_[0], 1.f / pix_to_dip_); 394a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return scoped_ptr<MotionEvent>( 395a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch new MotionEventAndroid(pix_to_dip_, 396a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch AttachCurrentThread(), 397a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Obtain(GetDownTime(), 398a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch GetEventTime(), 399a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch MotionEventAndroid::ACTION_CANCEL, 400a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch position_pixels.x(), 401a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch position_pixels.y()).obj())); 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)base::TimeTicks MotionEventAndroid::GetDownTime() const { 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return FromAndroidTime( 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Java_MotionEvent_getDownTime(AttachCurrentThread(), event_.obj())); 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 409a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochfloat MotionEventAndroid::ToDips(float pixels) const { 410a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return pixels * pix_to_dip_; 411a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 412a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 413a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochgfx::PointF MotionEventAndroid::ToDips(const gfx::PointF& point_pixels) const { 414a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return gfx::ScalePoint(point_pixels, pix_to_dip_); 415a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 416a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool MotionEventAndroid::RegisterMotionEventAndroid(JNIEnv* env) { 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return JNI_MotionEvent::RegisterNativesImpl(env); 4205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)base::android::ScopedJavaLocalRef<jobject> MotionEventAndroid::Obtain( 4245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const MotionEventAndroid& event) { 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return Java_MotionEvent_obtainAVME_AVME(AttachCurrentThread(), 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) event.event_.obj()); 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)base::android::ScopedJavaLocalRef<jobject> MotionEventAndroid::Obtain( 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeTicks down_time, 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeTicks event_time, 4335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Action action, 434a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch float x_pixels, 435a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch float y_pixels) { 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(), 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ToAndroidTime(down_time), 438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ToAndroidTime(event_time), 439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ToAndroidAction(action), 440a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch x_pixels, 441a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch y_pixels, 442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0); 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace content 446