Hi Sergey,

The provided list of numbers gives the impression that deltaY =~ SUM(0.1 * scrollingDeltaY) and then the code uses 0.1 as a fixed multiplier to translate between the values. However, tests show that it's not the case – in reality, there's no such a linear mapping between the two values, and SUM(0.1 * scrollingDeltaY) might differ from deltaY significantly (x2-x5), especially on slow scrolling.


On 17.01.2017 0:34, Sergey Malenkov wrote:
Hello all,

A precise scrolling (introduced in Sierra) caused a fast scrolling in
old applications including Java. It was fixed in JDK by introducing an
accumulator for deltas. But Apple fixed this issue in 10.12.2 by
introducing own accumulator. So, the deltaX/Y do not correspond to the
scrollingDeltaX/Y for now. It does not affect current scrolling
implementation in Swing, but it breaks precise scrolling values in
MouseWheelEvent.

Java API assumes that all scrolling deltas are declared in terms of
unit scroll (i.e. a line height), so we should use deltaX/Y, but not
recommended scrollingDeltaX/Y. But since 10.12.2 these values are not
precise. Moreover, these values do not correspond to scrolling delta.

Actual Results:
deltaY =    0.4, scrollingDeltaY =   5,
deltaY =    0.4, scrollingDeltaY =   5,
deltaY =    0.0, scrollingDeltaY =   5,
deltaY =    0.0, scrollingDeltaY =   4,
deltaY =    0.0, scrollingDeltaY =   4,
deltaY =    1.4, scrollingDeltaY =   4,
deltaY =    0.0, scrollingDeltaY =   3,
deltaY =    0.0, scrollingDeltaY =   3,
deltaY =    0.0, scrollingDeltaY =   3,
deltaY =    0.0, scrollingDeltaY =   3,
deltaY =    1.1, scrollingDeltaY =   2,
deltaY =    0.0, scrollingDeltaY =   2,
deltaY =    0.0, scrollingDeltaY =   2,
deltaY =    0.0, scrollingDeltaY =   2,
deltaY =    0.0, scrollingDeltaY =   1,
deltaY =    0.0, scrollingDeltaY =   0,

Expected Results:
deltaY =    0.5, scrollingDeltaY =   5,
deltaY =    0.5, scrollingDeltaY =   5,
deltaY =    0.5, scrollingDeltaY =   5,
deltaY =    0.4, scrollingDeltaY =   4,
deltaY =    0.4, scrollingDeltaY =   4,
deltaY =    0.4, scrollingDeltaY =   4,
deltaY =    0.3, scrollingDeltaY =   3,
deltaY =    0.3, scrollingDeltaY =   3,
deltaY =    0.3, scrollingDeltaY =   3,
deltaY =    0.3, scrollingDeltaY =   3,
deltaY =    0.2, scrollingDeltaY =   2,
deltaY =    0.2, scrollingDeltaY =   2,
deltaY =    0.2, scrollingDeltaY =   2,
deltaY =    0.2, scrollingDeltaY =   2,
deltaY =    0.1, scrollingDeltaY =   1,
deltaY =    0.0, scrollingDeltaY =   0,

I suggest to calculate delta from the corresponding scrollingDelta if
a native event has precise scrolling deltas. Could you please review
attached webrev.zip ?


--
Sincerely, Pavel

Reply via email to