--- old/src/java.desktop/share/classes/sun/java2d/SunGraphicsEnvironment.java 2015-10-22 07:46:45.312929300 -0700 +++ new/src/java.desktop/share/classes/sun/java2d/SunGraphicsEnvironment.java 2015-10-22 07:46:44.969152000 -0700 @@ -66,6 +66,8 @@ import sun.font.FontManagerFactory; import sun.font.FontManagerForSGE; import sun.font.NativeFont; +import java.security.AccessController; +import sun.security.action.GetPropertyAction; /** * This is an implementation of a GraphicsEnvironment object for the @@ -80,6 +82,15 @@ public static boolean isOpenSolaris; private static Font defaultFont; + private static final boolean uiScaleEnabled; + private static final double debugScale; + + static { + uiScaleEnabled = "true".equals(AccessController.doPrivileged( + new GetPropertyAction("sun.java2d.uiScale.enabled", "true"))); + debugScale = uiScaleEnabled ? getScaleFactor("sun.java2d.uiScale") : -1; + } + public SunGraphicsEnvironment() { java.security.AccessController.doPrivileged( new java.security.PrivilegedAction() { @@ -341,4 +352,43 @@ public boolean isFlipStrategyPreferred(ComponentPeer peer) { return false; } + + public static boolean isUIScaleEnabled() { + return uiScaleEnabled; + } + + public static double getDebugScale() { + return debugScale; + } + + public static double getScaleFactor(String propertyName) { + + String scaleFactor = AccessController.doPrivileged( + new GetPropertyAction(propertyName, "-1")); + + if (scaleFactor == null || scaleFactor.equals("-1")) { + return -1; + } + + try { + + if (scaleFactor.endsWith("dpi")) { + scaleFactor = scaleFactor.substring(0, scaleFactor.length() - 3); + double scale = Double.parseDouble(scaleFactor); + return scale <= 0 ? -1 : scale / 96; + } + + if (scaleFactor.endsWith("%")) { + scaleFactor = scaleFactor.substring(0, scaleFactor.length() - 1); + double scale = Double.parseDouble(scaleFactor); + return scale <= 0 ? -1 : scale / 100; + } + + double scale = Double.parseDouble(scaleFactor); + return (scale <= 0) ? -1 : scale; + + } catch (NumberFormatException ignoread) { + } + return -1; + } }