| 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);
|
| }
|
| }
|
|
|
|
|