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

Unified Diff: ui/events/cocoa/events_mac.mm

Issue 2461323002: Mac: Support Sierra's broken MouseWheel events. (Closed)
Patch Set: events_mac fix Created 4 years, 2 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/cocoa/events_mac.mm
diff --git a/ui/events/cocoa/events_mac.mm b/ui/events/cocoa/events_mac.mm
index 4a8347fd25f67bb93125ef6f5ff82f407334ee13..e2426620f424d4eefacf510ff64b12affb14b4e4 100644
--- a/ui/events/cocoa/events_mac.mm
+++ b/ui/events/cocoa/events_mac.mm
@@ -155,8 +155,24 @@ gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& event) {
// Use the same multiplier as content::WebMouseWheelEventBuilder. Note this
// differs from the value returned by CGEventSourceGetPixelsPerLine(), which
// is typically 10.
- return gfx::Vector2d(kScrollbarPixelsPerCocoaTick * [event deltaX],
- kScrollbarPixelsPerCocoaTick * [event deltaY]);
+ CGFloat deltaX = [event deltaX] * kScrollbarPixelsPerCocoaTick;
+ CGFloat deltaY = [event deltaY] * kScrollbarPixelsPerCocoaTick;
+ int64_t pointDeltaX = CGEventGetIntegerValueField(
+ [event CGEvent], kCGScrollWheelEventPointDeltaAxis2);
+ int64_t pointDeltaY = CGEventGetIntegerValueField(
+ [event CGEvent], kCGScrollWheelEventPointDeltaAxis1);
+
+ // A rounding bug on Sierra means that single-tick wheel scrolls may be
+ // truncated to zero. Prefer kCGScrollWheelEventPointDeltaAxisXY in those
+ // cases. First assume the CGEventSource has the default value of 10, rather
+ // than querying CGEventSourceGetPixelsPerLine() each time.
+ const float kPixelsPerLine = 10.0;
+ if (deltaX == 0 && pointDeltaX != 0)
+ deltaX = pointDeltaX * kPixelsPerLine;
+ if (deltaY == 0 && pointDeltaY != 0)
+ deltaY = pointDeltaY * kPixelsPerLine;
+
+ return gfx::Vector2d(deltaX, deltaY);
}
}

Powered by Google App Engine
This is Rietveld 408576698