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

Unified Diff: content/browser/renderer_host/input/motion_event_android.cc

Issue 1187273004: Pass MotionEvent tilt angles to Blink on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
Index: content/browser/renderer_host/input/motion_event_android.cc
diff --git a/content/browser/renderer_host/input/motion_event_android.cc b/content/browser/renderer_host/input/motion_event_android.cc
index 8d36c812cc0084dc9ba3d5cb2d9fa0459ff23832..4045a1875fd9e200d55c37457c14947e9ca33f7e 100644
--- a/content/browser/renderer_host/input/motion_event_android.cc
+++ b/content/browser/renderer_host/input/motion_event_android.cc
@@ -125,6 +125,7 @@ MotionEventAndroid::Pointer::Pointer(jint id,
jfloat touch_major_pixels,
jfloat touch_minor_pixels,
jfloat orientation_rad,
+ jfloat tilt_rad,
jint tool_type)
: id(id),
pos_x_pixels(pos_x_pixels),
@@ -132,6 +133,7 @@ MotionEventAndroid::Pointer::Pointer(jint id,
touch_major_pixels(touch_major_pixels),
touch_minor_pixels(touch_minor_pixels),
orientation_rad(orientation_rad),
+ tilt_rad(tilt_rad),
tool_type(tool_type) {
}
@@ -140,6 +142,7 @@ MotionEventAndroid::CachedPointer::CachedPointer()
touch_major(0),
touch_minor(0),
orientation(0),
+ tilt(0),
tool_type(TOOL_TYPE_UNKNOWN) {
}
@@ -269,6 +272,56 @@ float MotionEventAndroid::GetPressure(size_t pointer_index) const {
AttachCurrentThread(), event_.obj(), pointer_index);
}
+float MotionEventAndroid::GetTilt(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;
+ if (!event_.obj())
+ return 0.f;
+ return ToValidFloat(Java_MotionEvent_getAxisValueF_I_I(
+ AttachCurrentThread(), event_.obj(), AXIS_TILT, pointer_index));
+}
+
+// TODO(e_hakkinen): Remove either this or GetTiltX and GetTiltY.
+float MotionEventAndroid::GetTiltOrientation(size_t pointer_index) const {
+ DCHECK_LT(pointer_index, cached_pointer_count_);
+ if (GetToolType(pointer_index) != MotionEvent::TOOL_TYPE_STYLUS)
+ return 0.f;
+ float orientation;
+ if (pointer_index < MAX_POINTERS_TO_CACHE)
+ orientation = cached_pointers_[pointer_index].orientation;
+ else if (!event_.obj())
+ return 0.f;
+ else
+ orientation = ToValidFloat(Java_MotionEvent_getOrientationF_I(
+ AttachCurrentThread(), event_.obj(), pointer_index));
+ return orientation < 0 ? orientation + M_PI : orientation - M_PI;
+}
+
+// TODO(e_hakkinen): Remove either this and GetTiltY or GetTiltOrientation.
+float MotionEventAndroid::GetTiltX(size_t pointer_index) const {
+ DCHECK_LT(pointer_index, cached_pointer_count_);
+ if (GetToolType(pointer_index) != MotionEvent::TOOL_TYPE_STYLUS)
+ return 0.f;
+ float orientation = GetOrientation(pointer_index);
+ float tilt = GetTilt(pointer_index);
+ // A stylus points to a direction specified by orientation and tilts to
+ // the opposite direction. Coordinate system is left-handed.
+ return atan2(sin(-orientation) * sin(tilt), cos(tilt));
+}
+
+// TODO(e_hakkinen): Remove either this and GetTiltX or GetTiltOrientation.
+float MotionEventAndroid::GetTiltY(size_t pointer_index) const {
+ DCHECK_LT(pointer_index, cached_pointer_count_);
+ if (GetToolType(pointer_index) != MotionEvent::TOOL_TYPE_STYLUS)
+ return 0.f;
+ float orientation = GetOrientation(pointer_index);
+ float tilt = GetTilt(pointer_index);
+ // A stylus points to a direction specified by orientation and tilts to
+ // the opposite direction. Coordinate system is left-handed.
+ return atan2(cos(-orientation) * sin(tilt), cos(tilt));
+}
+
base::TimeTicks MotionEventAndroid::GetEventTime() const {
return cached_time_;
}
@@ -332,6 +385,7 @@ 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);
result.tool_type = FromAndroidToolType(pointer.tool_type);
return result;
}

Powered by Google App Engine
This is Rietveld 408576698