< prev index next >
src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java
Print this page
*** 79,88 ****
--- 79,91 ----
* Called (on the Toolkit thread) before the appropriate
* WindowStateEvent is posted to the EventQueue.
*/
private WindowListener windowListener;
+ private float scaleX;
+ private float scaleY;
+
/**
* Initialize JNI field IDs
*/
private static native void initIDs();
static {
*** 188,198 ****
((Window) target).setBackground(SystemColor.window);
}
// Express our interest in display changes
GraphicsConfiguration gc = getGraphicsConfiguration();
! ((Win32GraphicsDevice)gc.getDevice()).addDisplayChangedListener(this);
initActiveWindowsTracking((Window)target);
updateIconImages();
--- 191,204 ----
((Window) target).setBackground(SystemColor.window);
}
// Express our interest in display changes
GraphicsConfiguration gc = getGraphicsConfiguration();
! Win32GraphicsDevice gd = (Win32GraphicsDevice) gc.getDevice();
! gd.addDisplayChangedListener(this);
! scaleX = gd.getDefaultScaleX();
! scaleY = gd.getDefaultScaleY();
initActiveWindowsTracking((Window)target);
updateIconImages();
*** 537,548 ****
--- 543,569 ----
newDev.addDisplayChangedListener(this);
}
AWTAccessor.getComponentAccessor().
setGraphicsConfiguration((Component)target, winGraphicsConfig);
+
+ float newScaleX = newDev.getDefaultScaleX();
+ float newScaleY = newDev.getDefaultScaleY();
+
+ if (scaleX != newScaleX || scaleY != newScaleY) {
+ Window win = (Window) target;
+ setBounds(rescale(win.getX(), scaleX, newScaleX),
+ rescale(win.getY(), scaleY, newScaleY),
+ win.getWidth(), win.getHeight(), SET_BOUNDS);
+ scaleX = newScaleX;
+ scaleY = newScaleY;
+ }
}
+ private static int rescale(int position, float oldScale, float newScale) {
+ return Math.round(position * oldScale / newScale);
+ }
/**
* From the DisplayChangedListener interface.
*
* This method handles a display change - either when the display settings
* are changed, or when the window has been dragged onto a different
< prev index next >