On Thu, 20 Oct 2022 14:37:04 GMT, Johan Vos <[email protected]> wrote:
> The root problem is actually broader than stated in the JBS issue. This PR
> now translates screencoordinates from absolute coordinates into coordinates
> that take the platformScale into account.
> The whole process is complicated by the fact that throughout our code, we use
> e.g. `x` and `y` without clearly stating if those are absolute, logical,
> screen or rendering coordinates.
> I believe the most consistent approach is to have the different entry points
> (e.g. a Glass Window or a JFXPanel) to deal with platformScale before passing
> screen coordinates. This is already done in the Glass approach, and this PR
> does the same in JFXPanel. That means some code is duplicated, but since this
> is only about 12 lines, and said code lives in 2 different modules, I think
> it's not worth the hassle of moving that into e.g. the base module.
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.
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() ?
modules/javafx.swing/src/main/java/javafx/embed/swing/JFXPanel.java line 451:
> 449: Dimension2D onScreen =
> getSwingToFxPixel(getGraphicsConfiguration(), e.getXOnScreen(),
> e.getYOnScreen());
> 450: int fxXOnScreen = (int) onScreen.getWidth();
> 451: int fxYOnScreen = (int) onScreen.getHeight();
question: should it be (int) or Math.round()?
also, coordinates can be negative - will it work then?
modules/javafx.swing/src/main/java/javafx/embed/swing/JFXPanel.java line 646:
> 644: Dimension2D fxcoord =
> getSwingToFxPixel(getGraphicsConfiguration(), p.x, p.y);
> 645: screenX = (int)fxcoord.getWidth();
> 646: screenY = (int)fxcoord.getHeight();
same question about negative coordinates.
-------------
PR: https://git.openjdk.org/jfx/pull/924