[rfc][icedtea-web] centre of dialogues to centre of active monitor
Adam Domurad
adomurad at redhat.com
Wed Jan 9 10:53:25 PST 2013
On 01/08/2013 10:54 AM, Jiri Vanek wrote:
> All dialogues in ITW are centred into middle of ALL monitors, which is
> really nasty.
> During splashscreen development I have centred into middle of default
> screen. Well better but not perfect.
> That time Omair suggested to centr into middle of active screen -
> active here is the one where is cursor.
> Well I have finally come with something like this:)
>
>
This looks OK to me, although I still get the dialog pop-ups flashing on
the wrong screen sometimes, before appearing on the correct one.
Comments on impl class:
> +public class ScreenFinder {
> +
> + public static GraphicsDevice getCurrentScreen() {
> + Point p = MouseInfo.getPointerInfo().getLocation();
> + return getScreenOnCoords(p);
> +
> + }
> + public static Rectangle getCurrentScreenSizeWithoutBounds() {
> + Point p = MouseInfo.getPointerInfo().getLocation();
> + return getScreenOnCoordsWithutBounds(p);
> +
> + }
> +
> + public static void centerWindowsToCurrentScreen(Window w) {
> + Rectangle bounds = getCurrentScreenSizeWithoutBounds();
> + w.setLocation(bounds.x + (bounds.width - w.getWidth())/2,
> + bounds.y + (bounds.height - w.getHeight())/2);
> +
> + }
> +
> + public static GraphicsDevice getScreenOnCoords(Point point) {
> + GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
> + GraphicsDevice[] devices = e.getScreenDevices();
> + GraphicsDevice result = null;
> + //now get the configuration(s) for each device
> + for (GraphicsDevice device : devices) {
> + //GraphicsConfiguration[] configurations = device.getConfigurations();
> + //or?
If you've settled on default device, I'd prefer to just simply use it.
> + GraphicsConfiguration[] configurations = new GraphicsConfiguration[]{device.getDefaultConfiguration()};
> + for (GraphicsConfiguration config : configurations) {
> + Rectangle gcBounds = config.getBounds();
> + if (gcBounds.contains(point)) {
> + result = device;
> + }
> + }
> + }
> + if (result == null) {
> + //not found, get the default display
> + result = e.getDefaultScreenDevice();
> + }
> + return result;
> + }
> +
> + public static Rectangle getScreenOnCoordsWithutBounds(Point p) {
> + GraphicsDevice device = getScreenOnCoords(p);
> + Rectangle screenSize = device.getDefaultConfiguration().getBounds();
> + Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(device.getDefaultConfiguration());
> + return new Rectangle((int)screenSize.getX()+insets.left, (int)screenSize.getY()+insets.top, (int)screenSize.getWidth()-insets.left, (int)screenSize.getHeight()-insets.bottom);
I'd prefer 4 temporary variables for these coordinates.
> + }
> +
> +
> +}
OK to push otherwise, though.
Thanks,
-Adam
More information about the distro-pkg-dev
mailing list