RFR: 8222210: JFXPanel popups open at wrong coordinates when using multiple hidpi monitors [v2]
Johan Vos
jvos at openjdk.org
Fri Oct 28 06:58:31 UTC 2022
On Thu, 20 Oct 2022 16:02:46 GMT, Andy Goryachev <angorya at openjdk.org> wrote:
>> Johan Vos has updated the pull request incrementally with one additional commit since the last revision:
>>
>> address reviewer comments
>> Fix detection on screen, based on awtScale factors
>
> modules/javafx.swing/src/main/java/javafx/embed/swing/JFXPanel.java line 375:
>
>> 373: AffineTransform awtScales = graphicsConfiguration.getDefaultTransform();
>> 374: for (Screen screen : Screen.getScreens()) {
>> 375: if ((Math.abs(screen.getPlatformX() - awtBounds.getX() * awtScales.getScaleX()) < 0.001) &&
>
> minor: would it be better to create a standard method?
>
> isNearZero(double)?
>
> although the value of the constant might depend on a situation.
it's a good question, and I don't know the "best" answer. What we want to achieve here is to get the FX Screen that matches the AWT graphicsConfiguration. I *assume* that the `screen.getPlatformX()` being equal to the `bounds.getX()` etc, but I have no evidence for it. I could not find clear definitions of either the JavaFX Screen parameters nor the AWT concepts. In practice, the approach above (which I tweaked because at least on my Ubuntu, there are differences between the JavaFX platformScale and the AWT scales) works correctly. However, as I don't see any clear definition, I think it is safe to account for rounding errors (given the mixture of int, float, doubles that are used in the different areas).
> modules/javafx.swing/src/main/java/javafx/embed/swing/JFXPanel.java line 385:
>
>> 383: }
>> 384:
>> 385: private Dimension2D getSwingToFxPixel(GraphicsConfiguration g, float wx, float wy) {
>
> minor: convertSwingToFxPixel() ?
done.
-------------
PR: https://git.openjdk.org/jfx/pull/924
More information about the openjfx-dev
mailing list