From e292d3444cb81d50176bb8b0fa3b032c0292c1d1 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Tue, 15 Sep 2020 15:09:03 +0200 Subject: [PATCH] UI defaults inspector: avoid that restored window bounds are outside of screens --- .../extras/FlatUIDefaultsInspector.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java index d3852b1c..2ba7e014 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java @@ -87,6 +87,7 @@ public class FlatUIDefaultsInspector public static void show() { if( inspector != null ) { + inspector.ensureOnScreen(); inspector.frame.toFront(); return; } @@ -143,9 +144,10 @@ public class FlatUIDefaultsInspector int width = prefs.getInt( "width", UIScale.scale( 600 ) ); int height = prefs.getInt( "height", UIScale.scale( 800 ) ); frame.setSize( width, height ); - if( x >= 0 && y >= 0 ) + if( x != -1 && y != -1 ) { frame.setLocation( x, y ); - else + ensureOnScreen(); + } else frame.setLocationRelativeTo( null ); // restore column widths @@ -193,6 +195,23 @@ public class FlatUIDefaultsInspector } ); } + private void ensureOnScreen() { + Rectangle frameBounds = frame.getBounds(); + boolean onScreen = false; + for( GraphicsDevice screen : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() ) { + GraphicsConfiguration gc = screen.getDefaultConfiguration(); + Rectangle screenBounds = FlatUIUtils.subtractInsets( gc.getBounds(), + Toolkit.getDefaultToolkit().getScreenInsets( gc ) ); + if( frameBounds.intersects( screenBounds ) ) { + onScreen = true; + break; + } + } + + if( !onScreen ) + frame.setLocationRelativeTo( null ); + } + void lafChanged( PropertyChangeEvent e ) { if( "lookAndFeel".equals( e.getPropertyName() ) ) refresh();