< 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 >