| 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 |