diff --git a/CHANGELOG.md b/CHANGELOG.md index 99255261..a22d288b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ FlatLaf Change Log #### New features and improvements +- Button and ToggleButton: Added missing border colors for pressed and selected + states. (issue #848) - Label: Support painting background with rounded corners. (issue #842) - Popup: Fixed flicker of popups (e.g. tooltips) while they are moving (e.g. following mouse pointer). (issues #832 and #672) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java index d312e210..f62b59a7 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java @@ -42,6 +42,9 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault Button.disabledBorderColor Color * @uiDefault Button.focusedBorderColor Color * @uiDefault Button.hoverBorderColor Color optional + * @uiDefault Button.pressedBorderColor Color optional + * @uiDefault Button.selectedBorderColor Color optional + * @uiDefault Button.disabledSelectedBorderColor Color optional * * @uiDefault Button.default.borderWidth int or float * @uiDefault Button.default.borderColor Color @@ -49,6 +52,7 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault Button.default.endBorderColor Color optional; if set, a gradient paint is used * @uiDefault Button.default.focusedBorderColor Color * @uiDefault Button.default.focusColor Color + * @uiDefault Button.default.pressedBorderColor Color optional * @uiDefault Button.default.hoverBorderColor Color optional * * @uiDefault Button.toolbar.focusWidth int or float optional; default is 1.5 @@ -65,6 +69,9 @@ public class FlatButtonBorder protected Color endBorderColor = UIManager.getColor( "Button.endBorderColor" ); @Styleable protected Color hoverBorderColor = UIManager.getColor( "Button.hoverBorderColor" ); + /** @since 3.5 */ @Styleable protected Color pressedBorderColor = UIManager.getColor( "Button.pressedBorderColor" ); + /** @since 3.5 */ @Styleable protected Color selectedBorderColor = UIManager.getColor( "Button.selectedBorderColor" ); + /** @since 3.5 */ @Styleable protected Color disabledSelectedBorderColor = UIManager.getColor( "Button.disabledSelectedBorderColor" ); @Styleable(dot=true) protected float defaultBorderWidth = FlatUIUtils.getUIFloat( "Button.default.borderWidth", 1 ); @Styleable(dot=true) protected Color defaultBorderColor = FlatUIUtils.getUIColor( "Button.default.startBorderColor", "Button.default.borderColor" ); @@ -72,6 +79,7 @@ public class FlatButtonBorder @Styleable(dot=true) protected Color defaultFocusedBorderColor = UIManager.getColor( "Button.default.focusedBorderColor" ); @Styleable(dot=true) protected Color defaultFocusColor = UIManager.getColor( "Button.default.focusColor" ); @Styleable(dot=true) protected Color defaultHoverBorderColor = UIManager.getColor( "Button.default.hoverBorderColor" ); + /** @since 3.5 */ @Styleable(dot=true) protected Color defaultPressedBorderColor = UIManager.getColor( "Button.default.pressedBorderColor" ); /** @since 1.4 */ @Styleable(dot=true) protected float toolbarFocusWidth = FlatUIUtils.getUIFloat( "Button.toolbar.focusWidth", 1.5f ); /** @since 1.4 */ @Styleable(dot=true) protected Color toolbarFocusColor = UIManager.getColor( "Button.toolbar.focusColor" ); @@ -139,12 +147,13 @@ public class FlatButtonBorder @Override protected Paint getBorderColor( Component c ) { boolean def = FlatButtonUI.isDefaultButton( c ); + boolean selected = (c instanceof AbstractButton && ((AbstractButton)c).isSelected()); Paint color = FlatButtonUI.buttonStateColor( c, - def ? defaultBorderColor : borderColor, - disabledBorderColor, + def ? defaultBorderColor : ((selected && selectedBorderColor != null) ? selectedBorderColor : borderColor), + (selected && disabledSelectedBorderColor != null) ? disabledSelectedBorderColor : disabledBorderColor, def ? defaultFocusedBorderColor : focusedBorderColor, def ? defaultHoverBorderColor : hoverBorderColor, - null ); + def ? defaultPressedBorderColor : pressedBorderColor ); // change to gradient paint if start/end colors are specified Color startBg = def ? defaultBorderColor : borderColor; diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java index c18456d7..29dda17c 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java @@ -994,12 +994,16 @@ public class TestFlatStyleableInfo "disabledBorderColor", Color.class, "focusedBorderColor", Color.class, "hoverBorderColor", Color.class, + "pressedBorderColor", Color.class, + "selectedBorderColor", Color.class, + "disabledSelectedBorderColor", Color.class, "default.borderWidth", float.class, "default.borderColor", Color.class, "default.focusedBorderColor", Color.class, "default.focusColor", Color.class, "default.hoverBorderColor", Color.class, + "default.pressedBorderColor", Color.class, "toolbar.focusWidth", float.class, "toolbar.focusColor", Color.class, diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java index 18d1f315..f1beab94 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java @@ -956,12 +956,16 @@ public class TestFlatStyleableValue testColor( c, ui, "disabledBorderColor", 0x123456 ); testColor( c, ui, "focusedBorderColor", 0x123456 ); testColor( c, ui, "hoverBorderColor", 0x123456 ); + testColor( c, ui, "pressedBorderColor", 0x123456 ); + testColor( c, ui, "selectedBorderColor", 0x123456 ); + testColor( c, ui, "disabledSelectedBorderColor", 0x123456 ); testFloat( c, ui, "default.borderWidth", 1.23f ); testColor( c, ui, "default.borderColor", 0x123456 ); testColor( c, ui, "default.focusedBorderColor", 0x123456 ); testColor( c, ui, "default.focusColor", 0x123456 ); testColor( c, ui, "default.hoverBorderColor", 0x123456 ); + testColor( c, ui, "default.pressedBorderColor", 0x123456 ); testFloat( c, ui, "toolbar.focusWidth", 1.23f ); testColor( c, ui, "toolbar.focusColor", 0x123456 ); @@ -1026,12 +1030,16 @@ public class TestFlatStyleableValue testValue( border, "disabledBorderColor", Color.WHITE ); testValue( border, "focusedBorderColor", Color.WHITE ); testValue( border, "hoverBorderColor", Color.WHITE ); + testValue( border, "pressedBorderColor", Color.WHITE ); + testValue( border, "selectedBorderColor", Color.WHITE ); + testValue( border, "disabledSelectedBorderColor", Color.WHITE ); testValue( border, "default.borderWidth", 2f ); testValue( border, "default.borderColor", Color.WHITE ); testValue( border, "default.focusedBorderColor", Color.WHITE ); testValue( border, "default.focusColor", Color.WHITE ); testValue( border, "default.hoverBorderColor", Color.WHITE ); + testValue( border, "default.pressedBorderColor", Color.WHITE ); testValue( border, "toolbar.focusWidth", 1.5f ); testValue( border, "toolbar.focusColor", Color.WHITE ); diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java index 010dfc6c..5aff9582 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java @@ -1295,12 +1295,16 @@ public class TestFlatStyling border.applyStyleProperty( "disabledBorderColor", Color.WHITE ); border.applyStyleProperty( "focusedBorderColor", Color.WHITE ); border.applyStyleProperty( "hoverBorderColor", Color.WHITE ); + border.applyStyleProperty( "pressedBorderColor", Color.WHITE ); + border.applyStyleProperty( "selectedBorderColor", Color.WHITE ); + border.applyStyleProperty( "disabledSelectedBorderColor", Color.WHITE ); border.applyStyleProperty( "default.borderWidth", 2 ); border.applyStyleProperty( "default.borderColor", Color.WHITE ); border.applyStyleProperty( "default.focusedBorderColor", Color.WHITE ); border.applyStyleProperty( "default.focusColor", Color.WHITE ); border.applyStyleProperty( "default.hoverBorderColor", Color.WHITE ); + border.applyStyleProperty( "default.pressedBorderColor", Color.WHITE ); border.applyStyleProperty( "toolbar.focusWidth", 1.5f ); border.applyStyleProperty( "toolbar.focusColor", Color.WHITE ); diff --git a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt index 112f9388..66f8fc30 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt @@ -79,6 +79,7 @@ Button.default.hoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.Colo Button.default.hoverBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] Button.default.hoverForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] Button.default.pressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.default.pressedBorderColor #8888ff HSL 240 100 77 javax.swing.plaf.ColorUIResource [UI] Button.default.pressedForeground #0080ff HSL 210 100 50 javax.swing.plaf.ColorUIResource [UI] Button.default.startBackground #dddddd HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] Button.default.startBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] @@ -87,6 +88,7 @@ Button.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.Colo Button.disabledBorderColor #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] Button.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] Button.disabledSelectedBackground #112233 HSL 210 50 13 javax.swing.plaf.ColorUIResource [UI] +Button.disabledSelectedBorderColor #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] Button.disabledSelectedForeground #ffcccc HSL 0 100 90 javax.swing.plaf.ColorUIResource [UI] Button.disabledText #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] Button.endBackground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] @@ -106,9 +108,11 @@ Button.light #e3e3e3 HSL 0 0 89 javax.swing.plaf.Colo Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] Button.minimumWidth 72 Button.pressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.pressedBorderColor #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] Button.pressedForeground #0080ff HSL 210 100 50 javax.swing.plaf.ColorUIResource [UI] Button.rollover true Button.selectedBackground #ffbbbb HSL 0 100 87 javax.swing.plaf.ColorUIResource [UI] +Button.selectedBorderColor #ff00ff HSL 300 100 50 javax.swing.plaf.ColorUIResource [UI] Button.selectedForeground #332211 HSL 30 50 13 javax.swing.plaf.ColorUIResource [UI] Button.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] Button.startBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties index 6bc61e14..a7754ec3 100644 --- a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties @@ -94,6 +94,9 @@ Button.endBorderColor = #f00 Button.disabledBorderColor = #008 Button.focusedBorderColor = #466d94 Button.hoverBorderColor = #f00 +Button.pressedBorderColor = #0ff +Button.selectedBorderColor = #f0f +Button.disabledSelectedBorderColor = #ff0 Button.innerFocusWidth = 1 @@ -109,6 +112,7 @@ Button.default.pressedForeground = #0080ff Button.default.startBorderColor = #f00 Button.default.endBorderColor = #00f Button.default.hoverBorderColor = #f00 +Button.default.pressedBorderColor = #88f Button.default.focusedBorderColor = #537699 Button.default.focusColor = #f00 diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt index 928cdfa2..7cc08a50 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt @@ -29,6 +29,7 @@ Button.default.hoverBackground Button.default.hoverBorderColor Button.default.hoverForeground Button.default.pressedBackground +Button.default.pressedBorderColor Button.default.pressedForeground Button.default.startBackground Button.default.startBorderColor @@ -37,6 +38,7 @@ Button.disabledBackground Button.disabledBorderColor Button.disabledForeground Button.disabledSelectedBackground +Button.disabledSelectedBorderColor Button.disabledSelectedForeground Button.disabledText Button.endBackground @@ -57,9 +59,11 @@ Button.light Button.margin Button.minimumWidth Button.pressedBackground +Button.pressedBorderColor Button.pressedForeground Button.rollover Button.selectedBackground +Button.selectedBorderColor Button.selectedForeground Button.shadow Button.startBackground