From 6beda53238a29a19a0765ed88cfda4be9e458952 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Wed, 5 Jan 2022 18:46:00 +0100 Subject: [PATCH] Button: if boolbar button is in leading/trailing component of a text field, increase toolbar button corner arc to match text field corner arc (issue #451) --- .../com/formdev/flatlaf/ui/FlatButtonUI.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java index b0b59837..331fa6fb 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java @@ -38,15 +38,18 @@ import javax.swing.ButtonModel; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JComponent; +import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.JToolBar; import javax.swing.LookAndFeel; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.ButtonUI; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicButtonListener; import javax.swing.plaf.basic.BasicButtonUI; +import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.icons.FlatHelpButtonIcon; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; @@ -420,11 +423,21 @@ public class FlatButtonUI try { FlatUIUtils.setRenderingHints( g2 ); + boolean def = isDefaultButton( c ); boolean isToolBarButton = isToolBarButton( c ); float focusWidth = isToolBarButton ? 0 : FlatUIUtils.getBorderFocusWidth( c ); float arc = FlatUIUtils.getBorderArc( c ); + float textFieldArc = 0; - boolean def = isDefaultButton( c ); + // if toolbar button is in leading/trailing component of a text field, + // increase toolbar button arc to match text field arc (if necessary) + if( isToolBarButton && + FlatClientProperties.clientProperty( c, STYLE_CLASS, "", String.class ).contains( "inTextField" ) ) + { + JTextField textField = (JTextField) SwingUtilities.getAncestorOfClass( JTextField.class, c ); + if( textField != null ) + textFieldArc = FlatUIUtils.getBorderArc( textField ); + } int x = 0; int y = 0; @@ -437,8 +450,15 @@ public class FlatButtonUI y += spacing.top; width -= spacing.left + spacing.right; height -= spacing.top + spacing.bottom; + + // reduce text field arc + textFieldArc -= spacing.top + spacing.bottom; } + // increase toolbar button arc to match text field arc (if necessary) + if( arc < textFieldArc ) + arc = textFieldArc; + // paint shadow Color shadowColor = def ? defaultShadowColor : this.shadowColor; if( paintShadow &&