From 173e65937d9e76872df51f7ba39c9d58986dc38f Mon Sep 17 00:00:00 2001 From: Alexey Abramov Date: Fri, 3 Jan 2020 01:17:45 +0100 Subject: [PATCH] java-openjfx-build: Cannot compile JFXPanel with JDK 8 For more info please see https://bugs.openjdk.java.net/browse/JDK-8149967 --- .../java/javafx/embed/swing/JFXPanel.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java index 97515e2290..614ed656b9 100644 --- a/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java +++ b/modules/swing/src/main/java/javafx/embed/swing/JFXPanel.java @@ -81,6 +81,7 @@ import sun.awt.AppContext; import sun.awt.CausedFocusEvent; import sun.awt.SunToolkit; import sun.java2d.SunGraphics2D; +import sun.java2d.SurfaceData; import sun.util.logging.PlatformLogger; import sun.util.logging.PlatformLogger.Level; @@ -681,6 +682,23 @@ e.getCaret().getInsertionIndex()); } + // FIXME: once we move to JDK 9 as the boot JDK we should remove the + // reflection code from this method, consider changing it to + // use double rather than int, and account for the possibility of + // a different scale factor in X and Y. + private int getDefaultScale(SurfaceData surfaceData) { + /* + double scale = surfaceData.getDefaultScaleX(); + */ + double scale = 1; + try { + Method meth = SurfaceData.class.getMethod("getDefaultScaleX"); + scale = (Double)meth.invoke(surfaceData); + } catch (Exception ex) { + } + + return (int)Math.round(scale); + } /** * Overrides the {@link javax.swing.JComponent#paintComponent(Graphics)} @@ -720,7 +738,7 @@ public class JFXPanel extends JComponent { int newScaleFactor = scaleFactor; if (g instanceof SunGraphics2D) { - newScaleFactor = ((SunGraphics2D)g).surfaceData.getDefaultScale(); + newScaleFactor = getDefaultScale(((SunGraphics2D)g).surfaceData); } if (scaleFactor != newScaleFactor) { resizePixelBuffer(newScaleFactor); -- 2.24.1