< prev index next >
src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java
Print this page
*** 41,50 ****
--- 41,51 ----
import sun.java2d.opengl.GLXGraphicsConfig;
import sun.java2d.xr.XRGraphicsConfig;
import sun.java2d.loops.SurfaceType;
import sun.awt.util.ThreadGroupUtils;
+ import sun.java2d.SunGraphicsEnvironment;
import sun.misc.ManagedLocalsThread;
/**
* 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 final 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,541 ----
*/
public void addDisplayChangedListener(DisplayChangedListener client) {
topLevels.add(client);
}
+ public int getScaleFactor() {
+ return scale;
+ }
+
+ private int initScaleFactor() {
+
+ if (SunGraphicsEnvironment.isUIScaleEnabled()) {
+
+ double debugScale = SunGraphicsEnvironment.getDebugScale();
+
+ if (debugScale >= 1) {
+ return (int) debugScale;
+ }
+
+ int nativeScale = getNativeScaleFactor(screen);
+ return nativeScale >= 1 ? nativeScale : 1;
+ }
+
+ return 1;
+ }
+
/**
* Remove a DisplayChangeListener from this X11GraphicsDevice.
*/
public void removeDisplayChangedListener(DisplayChangedListener client) {
topLevels.remove(client);
< prev index next >