Chromium Code Reviews| Index: content/browser/renderer_host/input/web_input_event_builders_mac.mm |
| diff --git a/content/browser/renderer_host/input/web_input_event_builders_mac.mm b/content/browser/renderer_host/input/web_input_event_builders_mac.mm |
| index 45c37416b0d02e754e0700ceaed613b8fbff8bc2..811d39d77ecda50b058d89f2a441e2004d76d7df 100644 |
| --- a/content/browser/renderer_host/input/web_input_event_builders_mac.mm |
| +++ b/content/browser/renderer_host/input/web_input_event_builders_mac.mm |
| @@ -551,17 +551,31 @@ blink::WebMouseWheelEvent WebMouseWheelEventBuilder::Build( |
| // the point delta data instead, since we cannot distinguish trackpad data |
| // from data from any other continuous device. |
| - if (CGEventGetIntegerValueField(cg_event, kCGScrollWheelEventIsContinuous)) { |
| - result.deltaX = CGEventGetIntegerValueField( |
| + int64_t pointDeltaX = CGEventGetIntegerValueField( |
| cg_event, kCGScrollWheelEventPointDeltaAxis2); |
| - result.deltaY = CGEventGetIntegerValueField( |
| + int64_t pointDeltaY = CGEventGetIntegerValueField( |
| cg_event, kCGScrollWheelEventPointDeltaAxis1); |
| - result.wheelTicksX = result.deltaX / ui::kScrollbarPixelsPerCocoaTick; |
| - result.wheelTicksY = result.deltaY / ui::kScrollbarPixelsPerCocoaTick; |
| + |
| + if (CGEventGetIntegerValueField(cg_event, kCGScrollWheelEventIsContinuous)) { |
| + result.deltaX = pointDeltaX; |
| + result.deltaY = pointDeltaY; |
| + result.wheelTicksX = pointDeltaX / ui::kScrollbarPixelsPerCocoaTick; |
| + result.wheelTicksY = pointDeltaY / ui::kScrollbarPixelsPerCocoaTick; |
| result.hasPreciseScrollingDeltas = true; |
| } else { |
| result.deltaX = [event deltaX] * ui::kScrollbarPixelsPerCocoaTick; |
| result.deltaY = [event deltaY] * ui::kScrollbarPixelsPerCocoaTick; |
| + |
| + // 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 |
|
Avi (use Gerrit)
2016/10/31 13:32:59
"First" assume? I'm not sure what you mean by that
tapted
2016/11/01 02:29:46
Ah, there were more steps earlier :). Should be mo
|
| + // than querying CGEventSourceGetPixelsPerLine() each time. |
| + const float kPixelsPerLine = 10.0; |
| + if (result.deltaX == 0 && pointDeltaX != 0) |
| + result.deltaX = pointDeltaX * kPixelsPerLine; |
| + if (result.deltaY == 0 && pointDeltaY != 0) |
| + result.deltaY = pointDeltaY * kPixelsPerLine; |
| + |
| result.wheelTicksY = |
| CGEventGetIntegerValueField(cg_event, kCGScrollWheelEventDeltaAxis1); |
| result.wheelTicksX = |