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

Unified Diff: ui/events/gestures/motion_event_aura.cc

Issue 800163005: Fixed ui::TouchEvent rotation angle out-of-bound issue. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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: ui/events/gestures/motion_event_aura.cc
diff --git a/ui/events/gestures/motion_event_aura.cc b/ui/events/gestures/motion_event_aura.cc
index 1f4d2855b2fc0cfc5d3cd32495f5586d6f6cea13..2f532e7f325f6ad0e9f5d211bdba2707ca89834f 100644
--- a/ui/events/gestures/motion_event_aura.cc
+++ b/ui/events/gestures/motion_event_aura.cc
@@ -28,11 +28,19 @@ PointerProperties GetPointerPropertiesFromTouchEvent(const TouchEvent& touch) {
float radius_x = touch.radius_x();
float radius_y = touch.radius_y();
float rotation_angle_rad = touch.rotation_angle() * M_PI / 180.f;
+
DCHECK_GE(radius_x, 0) << "Unexpected x-radius < 0";
DCHECK_GE(radius_y, 0) << "Unexpected y-radius < 0";
- DCHECK(0 <= rotation_angle_rad && rotation_angle_rad <= M_PI_2)
+ DCHECK(0 <= rotation_angle_rad && rotation_angle_rad < M_PI)
<< "Unexpected touch rotation angle";
+ // Make the angle acute to ease subsequent logic. The angle range effectively
+ // changes from [0, pi) to [0, pi/2).
+ if (rotation_angle_rad >= M_PI_2) {
+ rotation_angle_rad -= static_cast<float>(M_PI_2);
+ std::swap(radius_x, radius_y);
+ }
+
if (radius_x > radius_y) {
// The case radius_x == radius_y is omitted from here on purpose: for
// circles, we want to pass the angle (which could be any value in such

Powered by Google App Engine
This is Rietveld 408576698