< prev index next >
src/java.desktop/share/classes/sun/java2d/SunGraphicsEnvironment.java
Print this page
rev 60071 : 8211999: Window positioning bugs due to overlapping GraphicsDevice bounds (Windows/HiDPI)
Reviewed-by: XXX
*** 25,34 ****
--- 25,35 ----
package sun.java2d;
import java.awt.AWTError;
import java.awt.Color;
+ import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
*** 347,401 ****
}
return current;
}
/**
! * Converts coordinates from the user's space to the device space using
! * appropriate device transformation.
*
! * @param x coordinate in the user space
! * @param y coordinate in the user space
* @return the point which uses device space(pixels)
*/
! public static Point convertToDeviceSpace(double x, double y) {
GraphicsConfiguration gc = getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration();
gc = getGraphicsConfigurationAtPoint(gc, x, y);
!
! AffineTransform tx = gc.getDefaultTransform();
! x = Region.clipRound(x * tx.getScaleX());
! y = Region.clipRound(y * tx.getScaleY());
! return new Point((int) x, (int) y);
}
/**
! * Converts bounds from the user's space to the device space using
* appropriate device transformation.
*
! * @param bounds the rectangle in the user space
* @return the rectangle which uses device space(pixels)
*/
! public static Rectangle convertToDeviceSpace(Rectangle bounds) {
GraphicsConfiguration gc = getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration();
! gc = getGraphicsConfigurationAtPoint(gc, bounds.x, bounds.y);
! return convertToDeviceSpace(gc, bounds);
}
/**
! * Converts bounds from the user's space to the device space using
! * appropriate device transformation of the passed graphics configuration.
*
! * @param bounds the rectangle in the user space
* @return the rectangle which uses device space(pixels)
*/
! public static Rectangle convertToDeviceSpace(GraphicsConfiguration gc,
! Rectangle bounds) {
AffineTransform tx = gc.getDefaultTransform();
return new Rectangle(
! Region.clipRound(bounds.x * tx.getScaleX()),
! Region.clipRound(bounds.y * tx.getScaleY()),
! Region.clipRound(bounds.width * tx.getScaleX()),
! Region.clipRound(bounds.height * tx.getScaleY())
);
}
}
--- 348,473 ----
}
return current;
}
/**
! * Returns the bounds of the graphics configuration in device space.
*
! * @param config the graphics configuration which bounds are requested
! * @return the bounds of the area covered by this
! * {@code GraphicsConfiguration} in device space(pixels).
! */
! public static Rectangle getGCDeviceBounds(GraphicsConfiguration config) {
! AffineTransform tx = config.getDefaultTransform();
! Rectangle bounds = config.getBounds();
! bounds.width *= tx.getScaleX();
! bounds.height *= tx.getScaleY();
! return bounds;
! }
!
! /**
! * Converts the size(w,h) from the device space to the user's space using
! * passed graphics configuration.
! *
! * @param gc the graphics configuration to be used for transformation
! * @param w the width in the device space
! * @param h the height in the device space
! * @return the size in the user's space
! */
! public static Dimension toUserSpace(GraphicsConfiguration gc,
! int w, int h) {
! AffineTransform tx = gc.getDefaultTransform();
! return new Dimension(
! Region.clipRound(w / tx.getScaleX()),
! Region.clipRound(h / tx.getScaleY())
! );
! }
!
! /**
! * Converts absolute coordinates from the user's space to the device space
! * using appropriate device transformation.
! *
! * @param x absolute coordinate in the user's space
! * @param y absolute coordinate in the user's space
* @return the point which uses device space(pixels)
*/
! public static Point toDeviceSpaceAbs(int x, int y) {
GraphicsConfiguration gc = getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration();
gc = getGraphicsConfigurationAtPoint(gc, x, y);
! return toDeviceSpaceAbs(gc, x, y, 0, 0).getLocation();
}
/**
! * Converts the rectangle from the user's space to the device space using
* appropriate device transformation.
*
! * @param rect the rectangle in the user's space
* @return the rectangle which uses device space(pixels)
*/
! public static Rectangle toDeviceSpaceAbs(Rectangle rect) {
GraphicsConfiguration gc = getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration();
! gc = getGraphicsConfigurationAtPoint(gc, rect.x, rect.y);
! return toDeviceSpaceAbs(gc, rect.x, rect.y, rect.width, rect.height);
! }
!
! /**
! * Converts absolute coordinates(x,y) and the size(w,h) from the user's
! * space to the device space using passed graphics configuration.
! *
! * @param gc the graphics configuration to be used for transformation
! * @param x absolute coordinate in the user's space
! * @param y absolute coordinate in the user's space
! * @param w the width in the user's space
! * @param h the height in the user's space
! * @return the rectangle which uses device space(pixels)
! */
! public static Rectangle toDeviceSpaceAbs(GraphicsConfiguration gc,
! int x, int y, int w, int h) {
! AffineTransform tx = gc.getDefaultTransform();
! Rectangle screen = gc.getBounds();
! return new Rectangle(
! screen.x + Region.clipRound((x - screen.x) * tx.getScaleX()),
! screen.y + Region.clipRound((y - screen.y) * tx.getScaleY()),
! Region.clipRound(w * tx.getScaleX()),
! Region.clipRound(h * tx.getScaleY())
! );
! }
!
! /**
! * Converts absolute coordinates from the user's space to the device space
! * using appropriate device transformation.
! *
! * @param x absolute coordinate in the user's space
! * @param y absolute coordinate in the user's space
! * @return the point which uses device space(pixels)
! */
! public static Point toDeviceSpace(int x, int y) {
! GraphicsConfiguration gc = getLocalGraphicsEnvironment()
! .getDefaultScreenDevice().getDefaultConfiguration();
! gc = getGraphicsConfigurationAtPoint(gc, x, y);
! return toDeviceSpace(gc, x, y, 0, 0).getLocation();
}
/**
! * Converts coordinates(x,y) and the size(w,h) from the user's
! * space to the device space using passed graphics configuration.
*
! * @param gc the graphics configuration to be used for transformation
! * @param x coordinate in the user's space
! * @param y coordinate in the user's space
! * @param w the width in the user's space
! * @param h the height in the user's space
* @return the rectangle which uses device space(pixels)
*/
! public static Rectangle toDeviceSpace(GraphicsConfiguration gc,
! int x, int y, int w, int h) {
AffineTransform tx = gc.getDefaultTransform();
return new Rectangle(
! Region.clipRound(x * tx.getScaleX()),
! Region.clipRound(y * tx.getScaleY()),
! Region.clipRound(w * tx.getScaleX()),
! Region.clipRound(h * tx.getScaleY())
);
}
}
< prev index next >