<AWT Dev> [11] Review Request: 8196030 and 8190326
Kevin Rushforth
kevin.rushforth at oracle.com
Tue May 22 23:57:42 UTC 2018
I can confirm that the patch fixes the problem for me on the Windows 10
machine on which I initially reported the bug. The change in
awt_Robot.cpp looks reasonable to me. I didn't review it thoroughly,
though (and just skimmed the rest).
-- Kevin
On 5/18/2018 12:38 PM, Sergey Bylokhov wrote:
> Hello.
> Please review the fix for jdk11.
>
> Bugs:
> 8196030: AWT Robot mouseMove fails on Windows 10 1709 with HiDPI
> https://bugs.openjdk.java.net/browse/JDK-8196030
> 8190326: Robot.mouseMove uses scaling factor of main display on
> unscaled second display
> https://bugs.openjdk.java.net/browse/JDK-8190326
>
> Webrev: http://cr.openjdk.java.net/~serb/8196030/webrev.04
>
> Description:
> This change will fix two issues:
> - 8196030: In the Windows 10 relative mouse moving is broken.
> Solution is to change the code to use the absolute mouse location.
> Actually the fix reverts the changes which were done in JDK-4288230
> [1](It is interesting that previously the absolute mouse position was
> broken). Take a look to the function which is used to calculate the
> mouse position, this is the only way I found to align coordinates
> which passed to windows(::SendInput() and coordinate which returned by
> windows(::GetCursorPos().
>
> - 8190326: the logic how we convert coordinates from the user space
> to device space is changed. Previously we use the transformation of
> the main screen, now we will find the appropriate screen(where
> coordinates are located) and then use transformation of this screen.
>
> I have tested the fix on win7/10 using scales:100%,125%,%150,%175,%200
> in multi-monitor configuration. But the new test is quite strict and
> may fail if there are some rounding error in some variations of screen
> resolution+scale+screen locations. So I expect some reports for this
> test.
>
> Notes:
> - The logic in the new method in SwingUtilities2 is similar to
> Robot.createCompatibleImage(), but the new method uses
> Region.clipRound() instead of floor/ceil. The reason is that we use
> same logic in native. I think that Robot.createCompatibleImage()
> should use clipRound() as well. Will check this later in separate bug.
>
> - Similar but not the same bug exists in Robot.getPixelColor() which
> uses the scale of the main screen, and uses simple cast to (int), but
> it affects all platforms. Will check this later in separate bug.
>
>
> [1] https://bugs.openjdk.java.net/browse/JDK-4288230
>
More information about the awt-dev
mailing list