<AWT Dev> Fix for precise scrolling on Mac Sierra 10.12.2

Sergey Malenkov malenkov at gmail.com
Mon Jan 23 10:57:22 UTC 2017


Pavel,

Could you please provide your tests and their results for different
versions of MacOS, including 10.12.1 and 10.12.2?

Thanks,
SAM

On Thu, Jan 19, 2017 at 6:28 PM, Pavel Fatin <pavel.fatin at jetbrains.com> wrote:
> 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



-- 
Best regards,
Sergey A. Malenkov


More information about the awt-dev mailing list