< prev index next >

src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java

Print this page

        

*** 42,51 **** --- 42,52 ---- import sun.java2d.xr.XRGraphicsConfig; import sun.java2d.loops.SurfaceType; import sun.awt.util.ThreadGroupUtils; import sun.misc.ManagedLocalsThread; + import sun.security.action.GetPropertyAction; /** * This is an implementation of a GraphicsDevice object for a single * X11 screen. *
*** 61,73 **** --- 62,76 ---- private static Boolean xrandrExtSupported; private final Object configLock = new Object(); private SunDisplayChanger topLevels = new SunDisplayChanger(); private DisplayMode origDisplayMode; private boolean shutdownHookRegistered; + private int scale; public X11GraphicsDevice(int screennum) { this.screen = screennum; + this.scale = initScaleFactor(); } /* * Initialize JNI field and method IDs for fields that may be * accessed from C.
*** 277,286 **** --- 280,290 ---- ArrayList<DisplayMode> modes); private static native void configDisplayMode(int screen, int width, int height, int displayMode); private static native void resetNativeData(int screen); + private static native int getNativeScaleFactor(int screen); /** * Returns true only if: * - the Xrandr extension is present * - the necessary Xrandr functions were loaded successfully
*** 507,516 **** --- 511,547 ---- */ public void addDisplayChangedListener(DisplayChangedListener client) { topLevels.add(client); } + public int getScaleFactor(){ + return scale; + } + + private int initScaleFactor() { + + boolean hidpiEnabled = "true".equals(AccessController.doPrivileged( + new GetPropertyAction("sun.java2d.uiScale.enabled", "true"))); + + if (!hidpiEnabled) { + return 1; + } + + String hidpiScale = AccessController.doPrivileged( + new GetPropertyAction("sun.java2d.uiScale", "-1")); + try { + int scale = Integer.parseInt(hidpiScale); + if (scale >= 1) { + return scale; + } + } catch (NumberFormatException ignore) { + } + + int scale = getNativeScaleFactor(screen); + return scale >= 1 ? scale : 1; + } + /** * Remove a DisplayChangeListener from this X11GraphicsDevice. */ public void removeDisplayChangedListener(DisplayChangedListener client) { topLevels.remove(client);
< prev index next >