OLD | NEW |
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 "ui/events/android/motion_event_android.h" | 5 #include "ui/events/android/motion_event_android.h" |
6 | 6 |
7 #include <android/input.h> | 7 #include <android/input.h> |
8 | 8 |
9 #include <cmath> | 9 #include <cmath> |
10 | 10 |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 } | 206 } |
207 | 207 |
208 size_t MotionEventAndroid::GetPointerCount() const { | 208 size_t MotionEventAndroid::GetPointerCount() const { |
209 return cached_pointer_count_; | 209 return cached_pointer_count_; |
210 } | 210 } |
211 | 211 |
212 int MotionEventAndroid::GetPointerId(size_t pointer_index) const { | 212 int MotionEventAndroid::GetPointerId(size_t pointer_index) const { |
213 DCHECK_LT(pointer_index, cached_pointer_count_); | 213 DCHECK_LT(pointer_index, cached_pointer_count_); |
214 if (pointer_index < MAX_POINTERS_TO_CACHE) | 214 if (pointer_index < MAX_POINTERS_TO_CACHE) |
215 return cached_pointers_[pointer_index].id; | 215 return cached_pointers_[pointer_index].id; |
216 return Java_MotionEvent_getPointerId( | 216 return Java_MotionEvent_getPointerId(AttachCurrentThread(), event_, |
217 AttachCurrentThread(), event_.obj(), pointer_index); | 217 pointer_index); |
218 } | 218 } |
219 | 219 |
220 float MotionEventAndroid::GetX(size_t pointer_index) const { | 220 float MotionEventAndroid::GetX(size_t pointer_index) const { |
221 DCHECK_LT(pointer_index, cached_pointer_count_); | 221 DCHECK_LT(pointer_index, cached_pointer_count_); |
222 if (pointer_index < MAX_POINTERS_TO_CACHE) | 222 if (pointer_index < MAX_POINTERS_TO_CACHE) |
223 return cached_pointers_[pointer_index].position.x(); | 223 return cached_pointers_[pointer_index].position.x(); |
224 return ToDips(Java_MotionEvent_getXF_I( | 224 return ToDips( |
225 AttachCurrentThread(), event_.obj(), pointer_index)); | 225 Java_MotionEvent_getXF_I(AttachCurrentThread(), event_, pointer_index)); |
226 } | 226 } |
227 | 227 |
228 float MotionEventAndroid::GetY(size_t pointer_index) const { | 228 float MotionEventAndroid::GetY(size_t pointer_index) const { |
229 DCHECK_LT(pointer_index, cached_pointer_count_); | 229 DCHECK_LT(pointer_index, cached_pointer_count_); |
230 if (pointer_index < MAX_POINTERS_TO_CACHE) | 230 if (pointer_index < MAX_POINTERS_TO_CACHE) |
231 return cached_pointers_[pointer_index].position.y(); | 231 return cached_pointers_[pointer_index].position.y(); |
232 return ToDips(Java_MotionEvent_getYF_I( | 232 return ToDips( |
233 AttachCurrentThread(), event_.obj(), pointer_index)); | 233 Java_MotionEvent_getYF_I(AttachCurrentThread(), event_, pointer_index)); |
234 } | 234 } |
235 | 235 |
236 float MotionEventAndroid::GetRawX(size_t pointer_index) const { | 236 float MotionEventAndroid::GetRawX(size_t pointer_index) const { |
237 return GetX(pointer_index) + cached_raw_position_offset_.x(); | 237 return GetX(pointer_index) + cached_raw_position_offset_.x(); |
238 } | 238 } |
239 | 239 |
240 float MotionEventAndroid::GetRawY(size_t pointer_index) const { | 240 float MotionEventAndroid::GetRawY(size_t pointer_index) const { |
241 return GetY(pointer_index) + cached_raw_position_offset_.y(); | 241 return GetY(pointer_index) + cached_raw_position_offset_.y(); |
242 } | 242 } |
243 | 243 |
244 float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const { | 244 float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const { |
245 DCHECK_LT(pointer_index, cached_pointer_count_); | 245 DCHECK_LT(pointer_index, cached_pointer_count_); |
246 if (pointer_index < MAX_POINTERS_TO_CACHE) | 246 if (pointer_index < MAX_POINTERS_TO_CACHE) |
247 return cached_pointers_[pointer_index].touch_major; | 247 return cached_pointers_[pointer_index].touch_major; |
248 return ToDips(Java_MotionEvent_getTouchMajorF_I( | 248 return ToDips(Java_MotionEvent_getTouchMajorF_I(AttachCurrentThread(), event_, |
249 AttachCurrentThread(), event_.obj(), pointer_index)); | 249 pointer_index)); |
250 } | 250 } |
251 | 251 |
252 float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const { | 252 float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const { |
253 DCHECK_LT(pointer_index, cached_pointer_count_); | 253 DCHECK_LT(pointer_index, cached_pointer_count_); |
254 if (pointer_index < MAX_POINTERS_TO_CACHE) | 254 if (pointer_index < MAX_POINTERS_TO_CACHE) |
255 return cached_pointers_[pointer_index].touch_minor; | 255 return cached_pointers_[pointer_index].touch_minor; |
256 return ToDips(Java_MotionEvent_getTouchMinorF_I( | 256 return ToDips(Java_MotionEvent_getTouchMinorF_I(AttachCurrentThread(), event_, |
257 AttachCurrentThread(), event_.obj(), pointer_index)); | 257 pointer_index)); |
258 } | 258 } |
259 | 259 |
260 float MotionEventAndroid::GetOrientation(size_t pointer_index) const { | 260 float MotionEventAndroid::GetOrientation(size_t pointer_index) const { |
261 DCHECK_LT(pointer_index, cached_pointer_count_); | 261 DCHECK_LT(pointer_index, cached_pointer_count_); |
262 if (pointer_index < MAX_POINTERS_TO_CACHE) | 262 if (pointer_index < MAX_POINTERS_TO_CACHE) |
263 return cached_pointers_[pointer_index].orientation; | 263 return cached_pointers_[pointer_index].orientation; |
264 return ToValidFloat(Java_MotionEvent_getOrientationF_I( | 264 return ToValidFloat(Java_MotionEvent_getOrientationF_I( |
265 AttachCurrentThread(), event_.obj(), pointer_index)); | 265 AttachCurrentThread(), event_, pointer_index)); |
266 } | 266 } |
267 | 267 |
268 float MotionEventAndroid::GetPressure(size_t pointer_index) const { | 268 float MotionEventAndroid::GetPressure(size_t pointer_index) const { |
269 DCHECK_LT(pointer_index, cached_pointer_count_); | 269 DCHECK_LT(pointer_index, cached_pointer_count_); |
270 // Note that this early return is a special case exercised only in testing, as | 270 // Note that this early return is a special case exercised only in testing, as |
271 // caching the pressure values is not a worthwhile optimization (they're | 271 // caching the pressure values is not a worthwhile optimization (they're |
272 // accessed at most once per event instance). | 272 // accessed at most once per event instance). |
273 if (!event_.obj()) | 273 if (!event_.obj()) |
274 return 0.f; | 274 return 0.f; |
275 return Java_MotionEvent_getPressureF_I( | 275 return Java_MotionEvent_getPressureF_I(AttachCurrentThread(), event_, |
276 AttachCurrentThread(), event_.obj(), pointer_index); | 276 pointer_index); |
277 } | 277 } |
278 | 278 |
279 float MotionEventAndroid::GetTilt(size_t pointer_index) const { | 279 float MotionEventAndroid::GetTilt(size_t pointer_index) const { |
280 DCHECK_LT(pointer_index, cached_pointer_count_); | 280 DCHECK_LT(pointer_index, cached_pointer_count_); |
281 if (pointer_index < MAX_POINTERS_TO_CACHE) | 281 if (pointer_index < MAX_POINTERS_TO_CACHE) |
282 return cached_pointers_[pointer_index].tilt; | 282 return cached_pointers_[pointer_index].tilt; |
283 if (!event_.obj()) | 283 if (!event_.obj()) |
284 return 0.f; | 284 return 0.f; |
285 return ToValidFloat(Java_MotionEvent_getAxisValueF_I_I( | 285 return ToValidFloat(Java_MotionEvent_getAxisValueF_I_I( |
286 AttachCurrentThread(), event_.obj(), AXIS_TILT, pointer_index)); | 286 AttachCurrentThread(), event_, AXIS_TILT, pointer_index)); |
287 } | 287 } |
288 | 288 |
289 base::TimeTicks MotionEventAndroid::GetEventTime() const { | 289 base::TimeTicks MotionEventAndroid::GetEventTime() const { |
290 return cached_time_; | 290 return cached_time_; |
291 } | 291 } |
292 | 292 |
293 size_t MotionEventAndroid::GetHistorySize() const { | 293 size_t MotionEventAndroid::GetHistorySize() const { |
294 return cached_history_size_; | 294 return cached_history_size_; |
295 } | 295 } |
296 | 296 |
297 base::TimeTicks MotionEventAndroid::GetHistoricalEventTime( | 297 base::TimeTicks MotionEventAndroid::GetHistoricalEventTime( |
298 size_t historical_index) const { | 298 size_t historical_index) const { |
299 return FromAndroidTime(Java_MotionEvent_getHistoricalEventTime( | 299 return FromAndroidTime(Java_MotionEvent_getHistoricalEventTime( |
300 AttachCurrentThread(), event_.obj(), historical_index)); | 300 AttachCurrentThread(), event_, historical_index)); |
301 } | 301 } |
302 | 302 |
303 float MotionEventAndroid::GetHistoricalTouchMajor( | 303 float MotionEventAndroid::GetHistoricalTouchMajor( |
304 size_t pointer_index, | 304 size_t pointer_index, |
305 size_t historical_index) const { | 305 size_t historical_index) const { |
306 return ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I( | 306 return ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I( |
307 AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); | 307 AttachCurrentThread(), event_, pointer_index, historical_index)); |
308 } | 308 } |
309 | 309 |
310 float MotionEventAndroid::GetHistoricalX(size_t pointer_index, | 310 float MotionEventAndroid::GetHistoricalX(size_t pointer_index, |
311 size_t historical_index) const { | 311 size_t historical_index) const { |
312 return ToDips(Java_MotionEvent_getHistoricalXF_I_I( | 312 return ToDips(Java_MotionEvent_getHistoricalXF_I_I( |
313 AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); | 313 AttachCurrentThread(), event_, pointer_index, historical_index)); |
314 } | 314 } |
315 | 315 |
316 float MotionEventAndroid::GetHistoricalY(size_t pointer_index, | 316 float MotionEventAndroid::GetHistoricalY(size_t pointer_index, |
317 size_t historical_index) const { | 317 size_t historical_index) const { |
318 return ToDips(Java_MotionEvent_getHistoricalYF_I_I( | 318 return ToDips(Java_MotionEvent_getHistoricalYF_I_I( |
319 AttachCurrentThread(), event_.obj(), pointer_index, historical_index)); | 319 AttachCurrentThread(), event_, pointer_index, historical_index)); |
320 } | 320 } |
321 | 321 |
322 ui::MotionEvent::ToolType MotionEventAndroid::GetToolType( | 322 ui::MotionEvent::ToolType MotionEventAndroid::GetToolType( |
323 size_t pointer_index) const { | 323 size_t pointer_index) const { |
324 DCHECK_LT(pointer_index, cached_pointer_count_); | 324 DCHECK_LT(pointer_index, cached_pointer_count_); |
325 if (pointer_index < MAX_POINTERS_TO_CACHE) | 325 if (pointer_index < MAX_POINTERS_TO_CACHE) |
326 return cached_pointers_[pointer_index].tool_type; | 326 return cached_pointers_[pointer_index].tool_type; |
327 return FromAndroidToolType(Java_MotionEvent_getToolType( | 327 return FromAndroidToolType(Java_MotionEvent_getToolType( |
328 AttachCurrentThread(), event_.obj(), pointer_index)); | 328 AttachCurrentThread(), event_, pointer_index)); |
329 } | 329 } |
330 | 330 |
331 int MotionEventAndroid::GetButtonState() const { | 331 int MotionEventAndroid::GetButtonState() const { |
332 return cached_button_state_; | 332 return cached_button_state_; |
333 } | 333 } |
334 | 334 |
335 int MotionEventAndroid::GetFlags() const { | 335 int MotionEventAndroid::GetFlags() const { |
336 return cached_flags_; | 336 return cached_flags_; |
337 } | 337 } |
338 | 338 |
339 float MotionEventAndroid::ToDips(float pixels) const { | 339 float MotionEventAndroid::ToDips(float pixels) const { |
340 return pixels * pix_to_dip_; | 340 return pixels * pix_to_dip_; |
341 } | 341 } |
342 | 342 |
343 MotionEventAndroid::CachedPointer MotionEventAndroid::FromAndroidPointer( | 343 MotionEventAndroid::CachedPointer MotionEventAndroid::FromAndroidPointer( |
344 const Pointer& pointer) const { | 344 const Pointer& pointer) const { |
345 CachedPointer result; | 345 CachedPointer result; |
346 result.id = pointer.id; | 346 result.id = pointer.id; |
347 result.position = | 347 result.position = |
348 gfx::PointF(ToDips(pointer.pos_x_pixels), ToDips(pointer.pos_y_pixels)); | 348 gfx::PointF(ToDips(pointer.pos_x_pixels), ToDips(pointer.pos_y_pixels)); |
349 result.touch_major = ToDips(pointer.touch_major_pixels); | 349 result.touch_major = ToDips(pointer.touch_major_pixels); |
350 result.touch_minor = ToDips(pointer.touch_minor_pixels); | 350 result.touch_minor = ToDips(pointer.touch_minor_pixels); |
351 result.orientation = ToValidFloat(pointer.orientation_rad); | 351 result.orientation = ToValidFloat(pointer.orientation_rad); |
352 result.tilt = ToValidFloat(pointer.tilt_rad); | 352 result.tilt = ToValidFloat(pointer.tilt_rad); |
353 result.tool_type = FromAndroidToolType(pointer.tool_type); | 353 result.tool_type = FromAndroidToolType(pointer.tool_type); |
354 return result; | 354 return result; |
355 } | 355 } |
356 | 356 |
357 } // namespace content | 357 } // namespace content |
OLD | NEW |