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

Unified Diff: ui/events/android/motion_event_android.cc

Issue 2860793003: Pass through tilt_x and tilt_y to blink (Closed)
Patch Set: Pass through tilt_x and tilt_y to blink Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/android/motion_event_android.h ('k') | ui/events/android/motion_event_android_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/android/motion_event_android.cc
diff --git a/ui/events/android/motion_event_android.cc b/ui/events/android/motion_event_android.cc
index adc13f780470eaa2749edc52fc3e34a1e51cafa2..3768d8c609e0435966467a7ef58fd432645b423d 100644
--- a/ui/events/android/motion_event_android.cc
+++ b/ui/events/android/motion_event_android.cc
@@ -152,6 +152,18 @@ size_t ToValidHistorySize(jint history_size, ui::MotionEvent::Action action) {
return history_size;
}
+// Convert tilt and orientation to tilt_x and tilt_y. Tilt_x and tilt_y will lie
+// in [-90, 90].
+void ConvertTiltOrientationToTiltXY(float tilt_rad,
+ float orientation_rad,
+ float* tilt_x,
+ float* tilt_y) {
+ float r = sin(tilt_rad);
+ float z = cos(tilt_rad);
+ *tilt_x = atan2(sin(-orientation_rad) * r, z) * 180.f / M_PI;
+ *tilt_y = atan2(cos(-orientation_rad) * r, z) * 180.f / M_PI;
+}
+
} // namespace
MotionEventAndroid::Pointer::Pointer(jint id,
@@ -177,9 +189,9 @@ MotionEventAndroid::CachedPointer::CachedPointer()
touch_major(0),
touch_minor(0),
orientation(0),
- tilt(0),
- tool_type(TOOL_TYPE_UNKNOWN) {
-}
+ tilt_x(0),
+ tilt_y(0),
+ tool_type(TOOL_TYPE_UNKNOWN) {}
MotionEventAndroid::MotionEventAndroid(JNIEnv* env,
jobject event,
@@ -363,14 +375,34 @@ float MotionEventAndroid::GetPressure(size_t pointer_index) const {
pointer_index);
}
-float MotionEventAndroid::GetTilt(size_t pointer_index) const {
+float MotionEventAndroid::GetTiltX(size_t pointer_index) const {
+ DCHECK_LT(pointer_index, cached_pointer_count_);
+ if (pointer_index < MAX_POINTERS_TO_CACHE)
+ return cached_pointers_[pointer_index].tilt_x;
+ if (!event_.obj())
+ return 0.f;
+ float tilt_x, tilt_y;
+ float tilt_rad = ToValidFloat(Java_MotionEvent_getAxisValueF_I_I(
+ AttachCurrentThread(), event_, AXIS_TILT, pointer_index));
+ float orientation_rad = ToValidFloat(Java_MotionEvent_getOrientationF_I(
+ AttachCurrentThread(), event_, pointer_index));
+ ConvertTiltOrientationToTiltXY(tilt_rad, orientation_rad, &tilt_x, &tilt_y);
+ return tilt_x;
+}
+
+float MotionEventAndroid::GetTiltY(size_t pointer_index) const {
DCHECK_LT(pointer_index, cached_pointer_count_);
if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].tilt;
+ return cached_pointers_[pointer_index].tilt_y;
if (!event_.obj())
return 0.f;
- return ToValidFloat(Java_MotionEvent_getAxisValueF_I_I(
+ float tilt_x, tilt_y;
+ float tilt_rad = ToValidFloat(Java_MotionEvent_getAxisValueF_I_I(
AttachCurrentThread(), event_, AXIS_TILT, pointer_index));
+ float orientation_rad = ToValidFloat(Java_MotionEvent_getOrientationF_I(
+ AttachCurrentThread(), event_, pointer_index));
+ ConvertTiltOrientationToTiltXY(tilt_rad, orientation_rad, &tilt_x, &tilt_y);
+ return tilt_y;
}
base::TimeTicks MotionEventAndroid::GetEventTime() const {
@@ -436,7 +468,9 @@ MotionEventAndroid::CachedPointer MotionEventAndroid::FromAndroidPointer(
result.touch_major = ToDips(pointer.touch_major_pixels);
result.touch_minor = ToDips(pointer.touch_minor_pixels);
result.orientation = ToValidFloat(pointer.orientation_rad);
- result.tilt = ToValidFloat(pointer.tilt_rad);
+ float tilt_rad = ToValidFloat(pointer.tilt_rad);
+ ConvertTiltOrientationToTiltXY(tilt_rad, result.orientation, &result.tilt_x,
+ &result.tilt_y);
result.tool_type = FromAndroidToolType(pointer.tool_type);
return result;
}
@@ -452,7 +486,8 @@ MotionEventAndroid::CachedPointer MotionEventAndroid::OffsetCachedPointer(
result.touch_major = pointer.touch_major;
result.touch_minor = pointer.touch_minor;
result.orientation = pointer.orientation;
- result.tilt = pointer.tilt;
+ result.tilt_x = pointer.tilt_x;
+ result.tilt_y = pointer.tilt_y;
result.tool_type = pointer.tool_type;
return result;
}
« no previous file with comments | « ui/events/android/motion_event_android.h ('k') | ui/events/android/motion_event_android_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698