Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(573)

Side by Side Diff: content/browser/renderer_host/input/motion_event_android.cc

Issue 567783002: Add modifier flags to MotionEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove MotionEvent modifiers Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/input/motion_event_android.h" 5 #include "content/browser/renderer_host/input/motion_event_android.h"
6 6
7 #include <android/input.h>
8
7 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
8 #include "base/float_util.h" 10 #include "base/float_util.h"
9 #include "jni/MotionEvent_jni.h" 11 #include "jni/MotionEvent_jni.h"
12 #include "ui/events/event_constants.h"
10 13
11 using base::android::AttachCurrentThread; 14 using base::android::AttachCurrentThread;
12 using namespace JNI_MotionEvent; 15 using namespace JNI_MotionEvent;
13 16
14 namespace content { 17 namespace content {
15 namespace { 18 namespace {
16 19
17 int ToAndroidAction(MotionEventAndroid::Action action) { 20 int ToAndroidAction(MotionEventAndroid::Action action) {
18 switch (action) { 21 switch (action) {
19 case MotionEventAndroid::ACTION_DOWN: 22 case MotionEventAndroid::ACTION_DOWN:
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 result |= MotionEventAndroid::BUTTON_FORWARD; 85 result |= MotionEventAndroid::BUTTON_FORWARD;
83 if ((button_state & BUTTON_PRIMARY) != 0) 86 if ((button_state & BUTTON_PRIMARY) != 0)
84 result |= MotionEventAndroid::BUTTON_PRIMARY; 87 result |= MotionEventAndroid::BUTTON_PRIMARY;
85 if ((button_state & BUTTON_SECONDARY) != 0) 88 if ((button_state & BUTTON_SECONDARY) != 0)
86 result |= MotionEventAndroid::BUTTON_SECONDARY; 89 result |= MotionEventAndroid::BUTTON_SECONDARY;
87 if ((button_state & BUTTON_TERTIARY) != 0) 90 if ((button_state & BUTTON_TERTIARY) != 0)
88 result |= MotionEventAndroid::BUTTON_TERTIARY; 91 result |= MotionEventAndroid::BUTTON_TERTIARY;
89 return result; 92 return result;
90 } 93 }
91 94
95 int FromAndroidMetaState(int meta_state) {
96 int flags = ui::EF_NONE;
97 if ((meta_state & AMETA_SHIFT_ON) != 0)
98 flags |= ui::EF_SHIFT_DOWN;
99 if ((meta_state & AMETA_CTRL_ON) != 0)
100 flags |= ui::EF_CONTROL_DOWN;
101 if ((meta_state & AMETA_ALT_ON) != 0)
102 flags |= ui::EF_ALT_DOWN;
103 if ((meta_state & AMETA_META_ON) != 0)
104 flags |= ui::EF_COMMAND_DOWN;
105 if ((meta_state & AMETA_CAPS_LOCK_ON) != 0)
106 flags |= ui::EF_CAPS_LOCK_DOWN;
107 return flags;
108 }
109
92 int64 ToAndroidTime(base::TimeTicks time) { 110 int64 ToAndroidTime(base::TimeTicks time) {
93 return (time - base::TimeTicks()).InMilliseconds(); 111 return (time - base::TimeTicks()).InMilliseconds();
94 } 112 }
95 113
96 base::TimeTicks FromAndroidTime(int64 time_ms) { 114 base::TimeTicks FromAndroidTime(int64 time_ms) {
97 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms); 115 return base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms);
98 } 116 }
99 117
100 float ToValidFloat(float x) { 118 float ToValidFloat(float x) {
101 return base::IsNaN(x) ? 0.f : x; 119 return base::IsNaN(x) ? 0.f : x;
(...skipping 18 matching lines...) Expand all
120 jfloat touch_major_0_pixels, 138 jfloat touch_major_0_pixels,
121 jfloat touch_major_1_pixels, 139 jfloat touch_major_1_pixels,
122 jfloat touch_minor_0_pixels, 140 jfloat touch_minor_0_pixels,
123 jfloat touch_minor_1_pixels, 141 jfloat touch_minor_1_pixels,
124 jfloat orientation_0_rad, 142 jfloat orientation_0_rad,
125 jfloat orientation_1_rad, 143 jfloat orientation_1_rad,
126 jfloat raw_pos_x_pixels, 144 jfloat raw_pos_x_pixels,
127 jfloat raw_pos_y_pixels, 145 jfloat raw_pos_y_pixels,
128 jint android_tool_type_0, 146 jint android_tool_type_0,
129 jint android_tool_type_1, 147 jint android_tool_type_1,
130 jint android_button_state) 148 jint android_button_state,
149 jint meta_state)
131 : cached_time_(FromAndroidTime(time_ms)), 150 : cached_time_(FromAndroidTime(time_ms)),
132 cached_action_(FromAndroidAction(android_action)), 151 cached_action_(FromAndroidAction(android_action)),
133 cached_pointer_count_(pointer_count), 152 cached_pointer_count_(pointer_count),
134 cached_history_size_(history_size), 153 cached_history_size_(history_size),
135 cached_action_index_(action_index), 154 cached_action_index_(action_index),
136 cached_button_state_(FromAndroidButtonState(android_button_state)), 155 cached_button_state_(FromAndroidButtonState(android_button_state)),
156 cached_flags_(FromAndroidMetaState(meta_state)),
137 pix_to_dip_(pix_to_dip), 157 pix_to_dip_(pix_to_dip),
138 should_recycle_(false) { 158 should_recycle_(false) {
139 DCHECK_GT(pointer_count, 0); 159 DCHECK_GT(pointer_count, 0);
140 DCHECK_GE(history_size, 0); 160 DCHECK_GE(history_size, 0);
141 161
142 event_.Reset(env, event); 162 event_.Reset(env, event);
143 DCHECK(event_.obj()); 163 DCHECK(event_.obj());
144 164
145 cached_positions_[0] = ToDips(gfx::PointF(pos_x_0_pixels, pos_y_0_pixels)); 165 cached_positions_[0] = ToDips(gfx::PointF(pos_x_0_pixels, pos_y_0_pixels));
146 cached_positions_[1] = ToDips(gfx::PointF(pos_x_1_pixels, pos_y_1_pixels)); 166 cached_positions_[1] = ToDips(gfx::PointF(pos_x_1_pixels, pos_y_1_pixels));
(...skipping 16 matching lines...) Expand all
163 JNIEnv* env, 183 JNIEnv* env,
164 jobject event) 184 jobject event)
165 : cached_time_(FromAndroidTime(Java_MotionEvent_getEventTime(env, event))), 185 : cached_time_(FromAndroidTime(Java_MotionEvent_getEventTime(env, event))),
166 cached_action_( 186 cached_action_(
167 FromAndroidAction(Java_MotionEvent_getActionMasked(env, event))), 187 FromAndroidAction(Java_MotionEvent_getActionMasked(env, event))),
168 cached_pointer_count_(Java_MotionEvent_getPointerCount(env, event)), 188 cached_pointer_count_(Java_MotionEvent_getPointerCount(env, event)),
169 cached_history_size_(Java_MotionEvent_getHistorySize(env, event)), 189 cached_history_size_(Java_MotionEvent_getHistorySize(env, event)),
170 cached_action_index_(Java_MotionEvent_getActionIndex(env, event)), 190 cached_action_index_(Java_MotionEvent_getActionIndex(env, event)),
171 cached_button_state_( 191 cached_button_state_(
172 FromAndroidButtonState(Java_MotionEvent_getButtonState(env, event))), 192 FromAndroidButtonState(Java_MotionEvent_getButtonState(env, event))),
193 cached_flags_(
194 FromAndroidMetaState(Java_MotionEvent_getMetaState(env, event))),
173 pix_to_dip_(pix_to_dip), 195 pix_to_dip_(pix_to_dip),
174 should_recycle_(true) { 196 should_recycle_(true) {
175 event_.Reset(env, event); 197 event_.Reset(env, event);
176 DCHECK(event_.obj()); 198 DCHECK(event_.obj());
177 199
178 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) { 200 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
179 if (i < cached_pointer_count_) { 201 if (i < cached_pointer_count_) {
180 cached_positions_[i] = 202 cached_positions_[i] =
181 ToDips(gfx::PointF(Java_MotionEvent_getXF_I(env, event, i), 203 ToDips(gfx::PointF(Java_MotionEvent_getXF_I(env, event, i),
182 Java_MotionEvent_getYF_I(env, event, i))); 204 Java_MotionEvent_getYF_I(env, event, i)));
(...skipping 23 matching lines...) Expand all
206 228
207 MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other) 229 MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other)
208 : event_(Obtain(other)), 230 : event_(Obtain(other)),
209 cached_time_(other.cached_time_), 231 cached_time_(other.cached_time_),
210 cached_action_(other.cached_action_), 232 cached_action_(other.cached_action_),
211 cached_pointer_count_(other.cached_pointer_count_), 233 cached_pointer_count_(other.cached_pointer_count_),
212 cached_history_size_(other.cached_history_size_), 234 cached_history_size_(other.cached_history_size_),
213 cached_action_index_(other.cached_action_index_), 235 cached_action_index_(other.cached_action_index_),
214 cached_raw_position_offset_(other.cached_raw_position_offset_), 236 cached_raw_position_offset_(other.cached_raw_position_offset_),
215 cached_button_state_(other.cached_button_state_), 237 cached_button_state_(other.cached_button_state_),
238 cached_flags_(other.cached_flags_),
216 pix_to_dip_(other.pix_to_dip_), 239 pix_to_dip_(other.pix_to_dip_),
217 should_recycle_(true) { 240 should_recycle_(true) {
218 DCHECK(event_.obj()); 241 DCHECK(event_.obj());
219 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) { 242 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
220 cached_positions_[i] = other.cached_positions_[i]; 243 cached_positions_[i] = other.cached_positions_[i];
221 cached_pointer_ids_[i] = other.cached_pointer_ids_[i]; 244 cached_pointer_ids_[i] = other.cached_pointer_ids_[i];
222 cached_touch_majors_[i] = other.cached_touch_majors_[i]; 245 cached_touch_majors_[i] = other.cached_touch_majors_[i];
223 cached_touch_minors_[i] = other.cached_touch_minors_[i]; 246 cached_touch_minors_[i] = other.cached_touch_minors_[i];
224 cached_orientations_[i] = other.cached_orientations_[i]; 247 cached_orientations_[i] = other.cached_orientations_[i];
225 cached_tool_types_[i] = other.cached_tool_types_[i]; 248 cached_tool_types_[i] = other.cached_tool_types_[i];
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 if (pointer_index < MAX_POINTERS_TO_CACHE) 371 if (pointer_index < MAX_POINTERS_TO_CACHE)
349 return cached_tool_types_[pointer_index]; 372 return cached_tool_types_[pointer_index];
350 return FromAndroidToolType(Java_MotionEvent_getToolType( 373 return FromAndroidToolType(Java_MotionEvent_getToolType(
351 AttachCurrentThread(), event_.obj(), pointer_index)); 374 AttachCurrentThread(), event_.obj(), pointer_index));
352 } 375 }
353 376
354 int MotionEventAndroid::GetButtonState() const { 377 int MotionEventAndroid::GetButtonState() const {
355 return cached_button_state_; 378 return cached_button_state_;
356 } 379 }
357 380
381 int MotionEventAndroid::GetFlags() const {
382 return cached_flags_;
383 }
384
358 scoped_ptr<ui::MotionEvent> MotionEventAndroid::Clone() const { 385 scoped_ptr<ui::MotionEvent> MotionEventAndroid::Clone() const {
359 return scoped_ptr<MotionEvent>(new MotionEventAndroid(*this)); 386 return scoped_ptr<MotionEvent>(new MotionEventAndroid(*this));
360 } 387 }
361 388
362 scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const { 389 scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const {
363 // The input coordinates to |MotionEventAndroid| are always in device pixels, 390 // The input coordinates to |MotionEventAndroid| are always in device pixels,
364 // but the cached coordinates are in DIPs. 391 // but the cached coordinates are in DIPs.
365 const gfx::PointF position_pixels = 392 const gfx::PointF position_pixels =
366 gfx::ScalePoint(cached_positions_[0], 1.f / pix_to_dip_); 393 gfx::ScalePoint(cached_positions_[0], 1.f / pix_to_dip_);
367 return scoped_ptr<MotionEvent>( 394 return scoped_ptr<MotionEvent>(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(), 436 return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(),
410 ToAndroidTime(down_time), 437 ToAndroidTime(down_time),
411 ToAndroidTime(event_time), 438 ToAndroidTime(event_time),
412 ToAndroidAction(action), 439 ToAndroidAction(action),
413 x_pixels, 440 x_pixels,
414 y_pixels, 441 y_pixels,
415 0); 442 0);
416 } 443 }
417 444
418 } // namespace content 445 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698