From 576c0048d06babacc7468af2499ea3f6c9875ceb Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Fri, 29 May 2020 00:26:10 +0200 Subject: [PATCH] Window decorations: make title pane height smaller when frame is maximized (issues #47 and #82) --- .../com/formdev/flatlaf/ui/FlatTitlePane.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java index 7dca8e46..1de1b986 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java @@ -47,6 +47,7 @@ import javax.swing.JPanel; import javax.swing.JRootPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; +import com.formdev.flatlaf.util.UIScale; /** * Provides the Flat LaF title bar. @@ -58,6 +59,7 @@ import javax.swing.UIManager; * @uiDefault TitlePane.iconSize Dimension * @uiDefault TitlePane.iconMargins Insets * @uiDefault TitlePane.titleMargins Insets + * @uiDefault TitlePane.buttonMaximizedHeight int * @uiDefault TitlePane.closeIcon Icon * @uiDefault TitlePane.iconifyIcon Icon * @uiDefault TitlePane.maximizeIcon Icon @@ -74,6 +76,7 @@ class FlatTitlePane private final Color inactiveForeground = UIManager.getColor( "TitlePane.inactiveForeground" ); private final Dimension iconSize = UIManager.getDimension( "TitlePane.iconSize" ); + private final int buttonMaximizedHeight = UIManager.getInt( "TitlePane.buttonMaximizedHeight" ); private final JRootPane rootPane; @@ -118,7 +121,20 @@ class FlatTitlePane restoreButton = createButton( "TitlePane.restoreIcon", "Restore", e -> restore() ); closeButton = createButton( "TitlePane.closeIcon", "Close", e -> close() ); - buttonPanel = new JPanel(); + buttonPanel = new JPanel() { + @Override + public Dimension getPreferredSize() { + Dimension size = super.getPreferredSize(); + if( buttonMaximizedHeight > 0 && + window instanceof Frame && + (((Frame)window).getExtendedState() & Frame.MAXIMIZED_BOTH) != 0 ) + { + // make title pane height smaller when frame is maximized + size = new Dimension( size.width, Math.min( size.height, UIScale.scale( buttonMaximizedHeight ) ) ); + } + return size; + } + }; buttonPanel.setOpaque( false ); buttonPanel.setLayout( new BoxLayout( buttonPanel, BoxLayout.X_AXIS ) ); if( rootPane.getWindowDecorationStyle() == JRootPane.FRAME ) {