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

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

Issue 494833003: Completed webkit radiusX, radiusY and rotationAngle handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "jni/MotionEvent_jni.h" 8 #include "jni/MotionEvent_jni.h"
9 9
10 using base::android::AttachCurrentThread; 10 using base::android::AttachCurrentThread;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 jint history_size, 107 jint history_size,
108 jint action_index, 108 jint action_index,
109 jfloat pos_x_0_pixels, 109 jfloat pos_x_0_pixels,
110 jfloat pos_y_0_pixels, 110 jfloat pos_y_0_pixels,
111 jfloat pos_x_1_pixels, 111 jfloat pos_x_1_pixels,
112 jfloat pos_y_1_pixels, 112 jfloat pos_y_1_pixels,
113 jint pointer_id_0, 113 jint pointer_id_0,
114 jint pointer_id_1, 114 jint pointer_id_1,
115 jfloat touch_major_0_pixels, 115 jfloat touch_major_0_pixels,
116 jfloat touch_major_1_pixels, 116 jfloat touch_major_1_pixels,
117 jfloat touch_minor_0_pixels,
118 jfloat touch_minor_1_pixels,
119 jfloat orientation_0_rad,
120 jfloat orientation_1_rad,
117 jfloat raw_pos_x_pixels, 121 jfloat raw_pos_x_pixels,
118 jfloat raw_pos_y_pixels, 122 jfloat raw_pos_y_pixels,
119 jint android_tool_type_0, 123 jint android_tool_type_0,
120 jint android_tool_type_1, 124 jint android_tool_type_1,
121 jint android_button_state) 125 jint android_button_state)
122 : cached_time_(FromAndroidTime(time_ms)), 126 : cached_time_(FromAndroidTime(time_ms)),
123 cached_action_(FromAndroidAction(android_action)), 127 cached_action_(FromAndroidAction(android_action)),
124 cached_pointer_count_(pointer_count), 128 cached_pointer_count_(pointer_count),
125 cached_history_size_(history_size), 129 cached_history_size_(history_size),
126 cached_action_index_(action_index), 130 cached_action_index_(action_index),
127 cached_button_state_(FromAndroidButtonState(android_button_state)), 131 cached_button_state_(FromAndroidButtonState(android_button_state)),
128 pix_to_dip_(pix_to_dip), 132 pix_to_dip_(pix_to_dip),
129 should_recycle_(false) { 133 should_recycle_(false) {
130 DCHECK_GT(pointer_count, 0); 134 DCHECK_GT(pointer_count, 0);
131 DCHECK_GE(history_size, 0); 135 DCHECK_GE(history_size, 0);
132 136
133 event_.Reset(env, event); 137 event_.Reset(env, event);
134 DCHECK(event_.obj()); 138 DCHECK(event_.obj());
135 139
136 cached_positions_[0] = ToDips(gfx::PointF(pos_x_0_pixels, pos_y_0_pixels)); 140 cached_positions_[0] = ToDips(gfx::PointF(pos_x_0_pixels, pos_y_0_pixels));
137 cached_positions_[1] = ToDips(gfx::PointF(pos_x_1_pixels, pos_y_1_pixels)); 141 cached_positions_[1] = ToDips(gfx::PointF(pos_x_1_pixels, pos_y_1_pixels));
138 cached_pointer_ids_[0] = pointer_id_0; 142 cached_pointer_ids_[0] = pointer_id_0;
139 cached_pointer_ids_[1] = pointer_id_1; 143 cached_pointer_ids_[1] = pointer_id_1;
140 cached_touch_majors_[0] = ToDips(touch_major_0_pixels); 144 cached_touch_majors_[0] = ToDips(touch_major_0_pixels);
141 cached_touch_majors_[1] = ToDips(touch_major_1_pixels); 145 cached_touch_majors_[1] = ToDips(touch_major_1_pixels);
146 cached_touch_minors_[0] = ToDips(touch_minor_0_pixels);
147 cached_touch_minors_[1] = ToDips(touch_minor_1_pixels);
148 cached_orientations_[0] = orientation_0_rad;
149 cached_orientations_[1] = orientation_1_rad;
142 cached_raw_position_offset_ = 150 cached_raw_position_offset_ =
143 ToDips(gfx::PointF(raw_pos_x_pixels, raw_pos_y_pixels)) - 151 ToDips(gfx::PointF(raw_pos_x_pixels, raw_pos_y_pixels)) -
144 cached_positions_[0]; 152 cached_positions_[0];
145 cached_tool_types_[0] = FromAndroidToolType(android_tool_type_0); 153 cached_tool_types_[0] = FromAndroidToolType(android_tool_type_0);
146 cached_tool_types_[1] = FromAndroidToolType(android_tool_type_1); 154 cached_tool_types_[1] = FromAndroidToolType(android_tool_type_1);
147 } 155 }
148 156
149 MotionEventAndroid::MotionEventAndroid(float pix_to_dip, 157 MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
150 JNIEnv* env, 158 JNIEnv* env,
151 jobject event) 159 jobject event)
(...skipping 11 matching lines...) Expand all
163 DCHECK(event_.obj()); 171 DCHECK(event_.obj());
164 172
165 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) { 173 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
166 if (i < cached_pointer_count_) { 174 if (i < cached_pointer_count_) {
167 cached_positions_[i] = 175 cached_positions_[i] =
168 ToDips(gfx::PointF(Java_MotionEvent_getXF_I(env, event, i), 176 ToDips(gfx::PointF(Java_MotionEvent_getXF_I(env, event, i),
169 Java_MotionEvent_getYF_I(env, event, i))); 177 Java_MotionEvent_getYF_I(env, event, i)));
170 cached_pointer_ids_[i] = Java_MotionEvent_getPointerId(env, event, i); 178 cached_pointer_ids_[i] = Java_MotionEvent_getPointerId(env, event, i);
171 cached_touch_majors_[i] = 179 cached_touch_majors_[i] =
172 ToDips(Java_MotionEvent_getTouchMajorF_I(env, event, i)); 180 ToDips(Java_MotionEvent_getTouchMajorF_I(env, event, i));
181 cached_touch_minors_[i] =
182 ToDips(Java_MotionEvent_getTouchMinorF_I(env, event, i));
183 cached_orientations_[i] =
184 Java_MotionEvent_getOrientationF_I(env, event, i);
173 cached_tool_types_[i] = 185 cached_tool_types_[i] =
174 FromAndroidToolType(Java_MotionEvent_getToolType(env, event, i)); 186 FromAndroidToolType(Java_MotionEvent_getToolType(env, event, i));
175 } else { 187 } else {
176 cached_pointer_ids_[i] = 0; 188 cached_pointer_ids_[i] = 0;
177 cached_touch_majors_[i] = 0.f; 189 cached_touch_majors_[i] = 0.f;
190 cached_touch_minors_[i] = 0.f;
191 cached_orientations_[i] = 0.f;
178 cached_tool_types_[i] = MotionEvent::TOOL_TYPE_UNKNOWN; 192 cached_tool_types_[i] = MotionEvent::TOOL_TYPE_UNKNOWN;
179 } 193 }
180 } 194 }
181 195
182 cached_raw_position_offset_ = 196 cached_raw_position_offset_ =
183 ToDips(gfx::PointF(Java_MotionEvent_getRawX(env, event), 197 ToDips(gfx::PointF(Java_MotionEvent_getRawX(env, event),
184 Java_MotionEvent_getRawY(env, event))) - 198 Java_MotionEvent_getRawY(env, event))) -
185 cached_positions_[0]; 199 cached_positions_[0];
186 } 200 }
187 201
188 MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other) 202 MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other)
189 : event_(Obtain(other)), 203 : event_(Obtain(other)),
190 cached_time_(other.cached_time_), 204 cached_time_(other.cached_time_),
191 cached_action_(other.cached_action_), 205 cached_action_(other.cached_action_),
192 cached_pointer_count_(other.cached_pointer_count_), 206 cached_pointer_count_(other.cached_pointer_count_),
193 cached_history_size_(other.cached_history_size_), 207 cached_history_size_(other.cached_history_size_),
194 cached_action_index_(other.cached_action_index_), 208 cached_action_index_(other.cached_action_index_),
195 cached_raw_position_offset_(other.cached_raw_position_offset_), 209 cached_raw_position_offset_(other.cached_raw_position_offset_),
196 cached_button_state_(other.cached_button_state_), 210 cached_button_state_(other.cached_button_state_),
197 pix_to_dip_(other.pix_to_dip_), 211 pix_to_dip_(other.pix_to_dip_),
198 should_recycle_(true) { 212 should_recycle_(true) {
199 DCHECK(event_.obj()); 213 DCHECK(event_.obj());
200 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) { 214 for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
201 cached_positions_[i] = other.cached_positions_[i]; 215 cached_positions_[i] = other.cached_positions_[i];
202 cached_pointer_ids_[i] = other.cached_pointer_ids_[i]; 216 cached_pointer_ids_[i] = other.cached_pointer_ids_[i];
203 cached_touch_majors_[i] = other.cached_touch_majors_[i]; 217 cached_touch_majors_[i] = other.cached_touch_majors_[i];
218 cached_touch_minors_[i] = other.cached_touch_minors_[i];
219 cached_orientations_[i] = other.cached_orientations_[i];
204 cached_tool_types_[i] = other.cached_tool_types_[i]; 220 cached_tool_types_[i] = other.cached_tool_types_[i];
205 } 221 }
206 } 222 }
207 223
208 MotionEventAndroid::~MotionEventAndroid() { 224 MotionEventAndroid::~MotionEventAndroid() {
209 if (should_recycle_) 225 if (should_recycle_)
210 Java_MotionEvent_recycle(AttachCurrentThread(), event_.obj()); 226 Java_MotionEvent_recycle(AttachCurrentThread(), event_.obj());
211 } 227 }
212 228
213 int MotionEventAndroid::GetId() const { 229 int MotionEventAndroid::GetId() const {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 } 275 }
260 276
261 float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const { 277 float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const {
262 DCHECK_LT(pointer_index, cached_pointer_count_); 278 DCHECK_LT(pointer_index, cached_pointer_count_);
263 if (pointer_index < MAX_POINTERS_TO_CACHE) 279 if (pointer_index < MAX_POINTERS_TO_CACHE)
264 return cached_touch_majors_[pointer_index]; 280 return cached_touch_majors_[pointer_index];
265 return ToDips(Java_MotionEvent_getTouchMajorF_I( 281 return ToDips(Java_MotionEvent_getTouchMajorF_I(
266 AttachCurrentThread(), event_.obj(), pointer_index)); 282 AttachCurrentThread(), event_.obj(), pointer_index));
267 } 283 }
268 284
285 float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const {
286 DCHECK_LT(pointer_index, cached_pointer_count_);
287 if (pointer_index < MAX_POINTERS_TO_CACHE)
288 return cached_touch_minors_[pointer_index];
289 return ToDips(Java_MotionEvent_getTouchMinorF_I(AttachCurrentThread(),
290 event_.obj(), pointer_index));
291 }
292
293 float MotionEventAndroid::GetOrientation(size_t pointer_index) const {
294 DCHECK_LT(pointer_index, cached_pointer_count_);
295 if (pointer_index < MAX_POINTERS_TO_CACHE)
jdduke (slow) 2014/08/27 18:21:09 I've seen devices return NaN here, which could be
mustaq 2014/08/27 20:51:08 Done.
296 return cached_orientations_[pointer_index];
297 return Java_MotionEvent_getOrientationF_I(
298 AttachCurrentThread(), event_.obj(), pointer_index);
299 }
300
269 float MotionEventAndroid::GetPressure(size_t pointer_index) const { 301 float MotionEventAndroid::GetPressure(size_t pointer_index) const {
270 DCHECK_LT(pointer_index, cached_pointer_count_); 302 DCHECK_LT(pointer_index, cached_pointer_count_);
271 return Java_MotionEvent_getPressureF_I( 303 return Java_MotionEvent_getPressureF_I(
272 AttachCurrentThread(), event_.obj(), pointer_index); 304 AttachCurrentThread(), event_.obj(), pointer_index);
273 } 305 }
274 306
275 base::TimeTicks MotionEventAndroid::GetEventTime() const { 307 base::TimeTicks MotionEventAndroid::GetEventTime() const {
276 return cached_time_; 308 return cached_time_;
277 } 309 }
278 310
279 size_t MotionEventAndroid::GetHistorySize() const { 311 size_t MotionEventAndroid::GetHistorySize() const {
280 return cached_history_size_; 312 return cached_history_size_;
281 } 313 }
282 314
283 base::TimeTicks MotionEventAndroid::GetHistoricalEventTime( 315 base::TimeTicks MotionEventAndroid::GetHistoricalEventTime(
284 size_t historical_index) const { 316 size_t historical_index) const {
285 return FromAndroidTime(Java_MotionEvent_getHistoricalEventTime( 317 return FromAndroidTime(Java_MotionEvent_getHistoricalEventTime(
286 AttachCurrentThread(), event_.obj(), historical_index)); 318 AttachCurrentThread(), event_.obj(), historical_index));
287 } 319 }
288 320
289 float MotionEventAndroid::GetHistoricalTouchMajor( 321 float MotionEventAndroid::GetHistoricalTouchMajor(
290 size_t pointer_index, 322 size_t pointer_index,
291 size_t historical_index) const { 323 size_t historical_index) const {
292 return ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I( 324 return ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I(
293 AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); 325 AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
294 } 326 }
295 327
328 float MotionEventAndroid::GetHistoricalTouchMinor(
329 size_t pointer_index,
330 size_t historical_index) const {
331 return ToDips(Java_MotionEvent_getHistoricalTouchMinorF_I_I(
332 AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
333 }
334
335 float MotionEventAndroid::GetHistoricalOrientation(
336 size_t pointer_index,
337 size_t historical_index) const {
338 return Java_MotionEvent_getHistoricalOrientationF_I_I(
339 AttachCurrentThread(), event_.obj(), pointer_index, historical_index);
340 }
341
296 float MotionEventAndroid::GetHistoricalX(size_t pointer_index, 342 float MotionEventAndroid::GetHistoricalX(size_t pointer_index,
297 size_t historical_index) const { 343 size_t historical_index) const {
298 return ToDips(Java_MotionEvent_getHistoricalXF_I_I( 344 return ToDips(Java_MotionEvent_getHistoricalXF_I_I(
299 AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); 345 AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
300 } 346 }
301 347
302 float MotionEventAndroid::GetHistoricalY(size_t pointer_index, 348 float MotionEventAndroid::GetHistoricalY(size_t pointer_index,
303 size_t historical_index) const { 349 size_t historical_index) const {
304 return ToDips(Java_MotionEvent_getHistoricalYF_I_I( 350 return ToDips(Java_MotionEvent_getHistoricalYF_I_I(
305 AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); 351 AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
(...skipping 24 matching lines...) Expand all
330 return scoped_ptr<MotionEvent>( 376 return scoped_ptr<MotionEvent>(
331 new MotionEventAndroid(pix_to_dip_, 377 new MotionEventAndroid(pix_to_dip_,
332 AttachCurrentThread(), 378 AttachCurrentThread(),
333 Obtain(GetDownTime(), 379 Obtain(GetDownTime(),
334 GetEventTime(), 380 GetEventTime(),
335 MotionEventAndroid::ACTION_CANCEL, 381 MotionEventAndroid::ACTION_CANCEL,
336 position_pixels.x(), 382 position_pixels.x(),
337 position_pixels.y()).obj())); 383 position_pixels.y()).obj()));
338 } 384 }
339 385
340 float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const {
341 return ToDips(Java_MotionEvent_getTouchMinorF_I(
342 AttachCurrentThread(), event_.obj(), pointer_index));
343 }
344
345 float MotionEventAndroid::GetOrientation() const {
346 return Java_MotionEvent_getOrientationF(AttachCurrentThread(), event_.obj());
347 }
348
349 base::TimeTicks MotionEventAndroid::GetDownTime() const { 386 base::TimeTicks MotionEventAndroid::GetDownTime() const {
350 return FromAndroidTime( 387 return FromAndroidTime(
351 Java_MotionEvent_getDownTime(AttachCurrentThread(), event_.obj())); 388 Java_MotionEvent_getDownTime(AttachCurrentThread(), event_.obj()));
352 } 389 }
353 390
354 float MotionEventAndroid::ToDips(float pixels) const { 391 float MotionEventAndroid::ToDips(float pixels) const {
355 return pixels * pix_to_dip_; 392 return pixels * pix_to_dip_;
356 } 393 }
357 394
358 gfx::PointF MotionEventAndroid::ToDips(const gfx::PointF& point_pixels) const { 395 gfx::PointF MotionEventAndroid::ToDips(const gfx::PointF& point_pixels) const {
(...skipping 22 matching lines...) Expand all
381 return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(), 418 return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(),
382 ToAndroidTime(down_time), 419 ToAndroidTime(down_time),
383 ToAndroidTime(event_time), 420 ToAndroidTime(event_time),
384 ToAndroidAction(action), 421 ToAndroidAction(action),
385 x_pixels, 422 x_pixels,
386 y_pixels, 423 y_pixels,
387 0); 424 0);
388 } 425 }
389 426
390 } // namespace content 427 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698