From 1d39d34d7c1086a808f5c33509a1dc0cc882a4a6 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 31 Oct 2021 17:30:43 +0100 Subject: [PATCH 1/6] CheckBox and RadioButton: - added `CheckBox.icon.hoverCheckmarkColor` - added `CheckBox.icon.selectedHoverBorderColor` - added `CheckBox.icon.pressedBorderColor` - added `CheckBox.icon.selectedPressedBorderColor` - added `CheckBox.icon.pressedCheckmarkColor` - renamed `CheckBox.icon.selectedFocusedBorderColor` to `CheckBox.icon.focusedSelectedBorderColor` - renamed `CheckBox.icon.selectedFocusedBackground` to `CheckBox.icon.focusedSelectedBackground` - renamed `CheckBox.icon.selectedFocusedCheckmarkColor` to `CheckBox.icon.focusedCheckmarkColor` - renamed `CheckBox.icon.selectedHoverBackground` to `CheckBox.icon.hoverSelectedBackground` - renamed `CheckBox.icon.selectedPressedBackground` to `CheckBox.icon.pressedSelectedBackground` - renamed `CheckBox.icon[filled].selectedFocusedBorderColor` to `CheckBox.icon[filled].focusedSelectedBorderColor` - renamed `CheckBox.icon[filled].selectedFocusedBackground` to `CheckBox.icon[filled].focusedSelectedBackground` - renamed `CheckBox.icon[filled].selectedFocusedCheckmarkColor` to `CheckBox.icon[filled].focusedCheckmarkColor` - renamed `CheckBox.icon[filled].selectedHoverBackground` to `CheckBox.icon[filled].hoverSelectedBackground` - renamed `CheckBox.icon[filled].selectedPressedBackground` to `CheckBox.icon[filled].pressedSelectedBackground` (Note: this are incompatible changes!) --- CHANGELOG.md | 7 +- .../com/formdev/flatlaf/IntelliJTheme.java | 8 +-- .../flatlaf/icons/FlatCheckBoxIcon.java | 65 ++++++++++++------- .../formdev/flatlaf/FlatDarkLaf.properties | 4 +- .../formdev/flatlaf/FlatLightLaf.properties | 10 +-- .../flatlaf/ui/TestFlatStyleableInfo.java | 30 ++++++--- .../formdev/flatlaf/ui/TestFlatStyling.java | 30 ++++++--- .../resources/DerivedColorKeys.properties | 12 ++-- .../dumps/uidefaults/FlatDarkLaf_1.8.0.txt | 4 +- .../dumps/uidefaults/FlatLightLaf_1.8.0.txt | 10 +-- .../dumps/uidefaults/FlatTestLaf_1.8.0.txt | 11 +++- .../flatlaf/testing/FlatTestLaf.properties | 11 +++- .../flatlaf/themeeditor/FlatLafUIKeys.txt | 30 ++++++--- 13 files changed, 147 insertions(+), 85 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 519bfd2f..eef6d099 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,8 +34,11 @@ FlatLaf Change Log - if moving focus into the toolbar, focus recently focused toolbar button - ComboBox, Spinner, TextField and subclasses: Support specifying width of border (see UI value `Component.borderWidth`). -- CheckBox and RadioButton: Support specifying width of icon border (see UI - value `CheckBox.icon.borderWidth`). +- CheckBox and RadioButton: + - Support specifying width of icon border (see UI value + `CheckBox.icon.borderWidth`). + - Reworked icon UI defaults and added missing ones. **Note**: There are minor + incompatible changes in FlatLaf properties files. - Slider: Support specifying width of thumb border (see UI value `Slider.thumbBorderWidth`). - Added more color functions to class `ColorFunctions` for easy use in diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java index ce600309..277831b3 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java @@ -504,7 +504,7 @@ public class IntelliJTheme // for filled checkbox/radiobutton used in light themes defaults.remove( "CheckBox.icon[filled].focusWidth" ); defaults.put( "CheckBox.icon[filled].hoverBorderColor", defaults.get( "CheckBox.icon[filled].focusedBorderColor" ) ); - defaults.put( "CheckBox.icon[filled].selectedFocusedBackground", defaults.get( "CheckBox.icon[filled].selectedBackground" ) ); + defaults.put( "CheckBox.icon[filled].focusedSelectedBackground", defaults.get( "CheckBox.icon[filled].selectedBackground" ) ); if( dark ) { // IDEA Darcula checkBoxFocused.svg, checkBoxSelectedFocused.svg, @@ -513,9 +513,9 @@ public class IntelliJTheme // --> add alpha to focused border colors String[] focusedBorderColorKeys = new String[] { "CheckBox.icon.focusedBorderColor", - "CheckBox.icon.selectedFocusedBorderColor", + "CheckBox.icon.focusedSelectedBorderColor", "CheckBox.icon[filled].focusedBorderColor", - "CheckBox.icon[filled].selectedFocusedBorderColor", + "CheckBox.icon[filled].focusedSelectedBorderColor", }; for( String key : focusedBorderColorKeys ) { Color color = defaults.getColor( key ); @@ -624,7 +624,7 @@ public class IntelliJTheme checkboxKeyMapping.put( "Checkbox.Background.Selected", "CheckBox.icon.selectedBackground" ); checkboxKeyMapping.put( "Checkbox.Border.Selected", "CheckBox.icon.selectedBorderColor" ); checkboxKeyMapping.put( "Checkbox.Foreground.Selected", "CheckBox.icon.checkmarkColor" ); - checkboxKeyMapping.put( "Checkbox.Focus.Thin.Selected", "CheckBox.icon.selectedFocusedBorderColor" ); + checkboxKeyMapping.put( "Checkbox.Focus.Thin.Selected", "CheckBox.icon.focusedSelectedBorderColor" ); checkboxDuplicateColors.put( "Checkbox.Background.Default.Dark", "Checkbox.Background.Selected.Dark" ); checkboxDuplicateColors.put( "Checkbox.Border.Default.Dark", "Checkbox.Border.Selected.Dark" ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java index 7c467a53..ae73dda6 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java @@ -46,6 +46,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * @uiDefault Component.focusColor Color * @uiDefault CheckBox.icon.focusWidth int optional; defaults to Component.focusWidth * @uiDefault CheckBox.icon.borderWidth int or float optional; defaults to Component.borderWidth + * @uiDefault CheckBox.arc int * * @uiDefault CheckBox.icon.focusColor Color optional; defaults to Component.focusColor * @uiDefault CheckBox.icon.borderColor Color @@ -53,20 +54,28 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * @uiDefault CheckBox.icon.selectedBorderColor Color * @uiDefault CheckBox.icon.selectedBackground Color * @uiDefault CheckBox.icon.checkmarkColor Color + * * @uiDefault CheckBox.icon.disabledBorderColor Color * @uiDefault CheckBox.icon.disabledBackground Color * @uiDefault CheckBox.icon.disabledCheckmarkColor Color + * * @uiDefault CheckBox.icon.focusedBorderColor Color optional * @uiDefault CheckBox.icon.focusedBackground Color optional - * @uiDefault CheckBox.icon.selectedFocusedBorderColor Color optional; CheckBox.icon.focusedBorderColor is used if not specified - * @uiDefault CheckBox.icon.selectedFocusedBackground Color optional; CheckBox.icon.focusedBackground is used if not specified - * @uiDefault CheckBox.icon.selectedFocusedCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified + * @uiDefault CheckBox.icon.focusedSelectedBorderColor Color optional; CheckBox.icon.focusedBorderColor is used if not specified + * @uiDefault CheckBox.icon.focusedSelectedBackground Color optional; CheckBox.icon.focusedBackground is used if not specified + * @uiDefault CheckBox.icon.focusedCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified + * * @uiDefault CheckBox.icon.hoverBorderColor Color optional * @uiDefault CheckBox.icon.hoverBackground Color optional - * @uiDefault CheckBox.icon.selectedHoverBackground Color optional; CheckBox.icon.hoverBackground is used if not specified + * @uiDefault CheckBox.icon.hoverSelectedBorderColor Color optional; CheckBox.icon.hoverBorderColor is used if not specified + * @uiDefault CheckBox.icon.hoverSelectedBackground Color optional; CheckBox.icon.hoverBackground is used if not specified + * @uiDefault CheckBox.icon.hoverCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified + * + * @uiDefault CheckBox.icon.pressedBorderColor Color optional * @uiDefault CheckBox.icon.pressedBackground Color optional - * @uiDefault CheckBox.icon.selectedPressedBackground Color optional; CheckBox.icon.pressedBackground is used if not specified - * @uiDefault CheckBox.arc int + * @uiDefault CheckBox.icon.pressedSelectedBorderColor Color optional; CheckBox.icon.pressedBorderColor is used if not specified + * @uiDefault CheckBox.icon.pressedSelectedBackground Color optional; CheckBox.icon.pressedBackground is used if not specified + * @uiDefault CheckBox.icon.pressedCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified * * @author Karl Tauber */ @@ -97,18 +106,23 @@ public class FlatCheckBoxIcon // focused @Styleable protected Color focusedBorderColor = getUIColor( "CheckBox.icon.focusedBorderColor", style ); @Styleable protected Color focusedBackground = getUIColor( "CheckBox.icon.focusedBackground", style ); - @Styleable protected Color selectedFocusedBorderColor = getUIColor( "CheckBox.icon.selectedFocusedBorderColor", style ); - @Styleable protected Color selectedFocusedBackground = getUIColor( "CheckBox.icon.selectedFocusedBackground", style ); - @Styleable protected Color selectedFocusedCheckmarkColor = getUIColor( "CheckBox.icon.selectedFocusedCheckmarkColor", style ); + /** @since 2 */ @Styleable protected Color focusedSelectedBorderColor = getUIColor( "CheckBox.icon.focusedSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color focusedSelectedBackground = getUIColor( "CheckBox.icon.focusedSelectedBackground", style ); + /** @since 2 */ @Styleable protected Color focusedCheckmarkColor = getUIColor( "CheckBox.icon.focusedCheckmarkColor", style ); // hover @Styleable protected Color hoverBorderColor = getUIColor( "CheckBox.icon.hoverBorderColor", style ); @Styleable protected Color hoverBackground = getUIColor( "CheckBox.icon.hoverBackground", style ); - @Styleable protected Color selectedHoverBackground = getUIColor( "CheckBox.icon.selectedHoverBackground", style ); + /** @since 2 */ @Styleable protected Color hoverSelectedBorderColor = getUIColor( "CheckBox.icon.hoverSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color hoverSelectedBackground = getUIColor( "CheckBox.icon.hoverSelectedBackground", style ); + /** @since 2 */ @Styleable protected Color hoverCheckmarkColor = getUIColor( "CheckBox.icon.hoverCheckmarkColor", style ); // pressed + /** @since 2 */ @Styleable protected Color pressedBorderColor = getUIColor( "CheckBox.icon.pressedBorderColor", style ); @Styleable protected Color pressedBackground = getUIColor( "CheckBox.icon.pressedBackground", style ); - @Styleable protected Color selectedPressedBackground = getUIColor( "CheckBox.icon.selectedPressedBackground", style ); + /** @since 2 */ @Styleable protected Color pressedSelectedBorderColor = getUIColor( "CheckBox.icon.pressedSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color pressedSelectedBackground = getUIColor( "CheckBox.icon.pressedSelectedBackground", style ); + /** @since 2 */ @Styleable protected Color pressedCheckmarkColor = getUIColor( "CheckBox.icon.pressedCheckmarkColor", style ); protected static Color getUIColor( String key, String style ) { if( style != null ) { @@ -186,8 +200,8 @@ public class FlatCheckBoxIcon paintBackground( c, g ); // paint checkmark - if( selected || indeterminate ) { - g.setColor( getCheckmarkColor( c, selected, isFocused ) ); + if( selected ) { + g.setColor( getCheckmarkColor( c ) ); if( indeterminate ) paintIndeterminate( c, g ); else @@ -244,25 +258,26 @@ public class FlatCheckBoxIcon return FlatButtonUI.buttonStateColor( c, selected ? selectedBorderColor : borderColor, disabledBorderColor, - selected && selectedFocusedBorderColor != null ? selectedFocusedBorderColor : focusedBorderColor, - hoverBorderColor, - null ); + (selected && focusedSelectedBorderColor != null) ? focusedSelectedBorderColor : focusedBorderColor, + (selected && hoverSelectedBorderColor != null) ? hoverSelectedBorderColor : hoverBorderColor, + (selected && pressedSelectedBorderColor != null) ? pressedSelectedBorderColor : pressedBorderColor ); } protected Color getBackground( Component c, boolean selected ) { return FlatButtonUI.buttonStateColor( c, selected ? selectedBackground : background, disabledBackground, - (selected && selectedFocusedBackground != null) ? selectedFocusedBackground : focusedBackground, - (selected && selectedHoverBackground != null) ? selectedHoverBackground : hoverBackground, - (selected && selectedPressedBackground != null) ? selectedPressedBackground : pressedBackground ); + (selected && focusedSelectedBackground != null) ? focusedSelectedBackground : focusedBackground, + (selected && hoverSelectedBackground != null) ? hoverSelectedBackground : hoverBackground, + (selected && pressedSelectedBackground != null) ? pressedSelectedBackground : pressedBackground ); } - protected Color getCheckmarkColor( Component c, boolean selected, boolean isFocused ) { - return c.isEnabled() - ? ((selected && isFocused && selectedFocusedCheckmarkColor != null) - ? selectedFocusedCheckmarkColor - : checkmarkColor) - : disabledCheckmarkColor; + protected Color getCheckmarkColor( Component c ) { + return FlatButtonUI.buttonStateColor( c, + checkmarkColor, + disabledCheckmarkColor, + focusedCheckmarkColor, + hoverCheckmarkColor, + pressedCheckmarkColor ); } } diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties index 19bd9622..029979ce 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties @@ -158,9 +158,9 @@ CheckBox.icon[filled].selectedBorderColor = $CheckBox.icon.checkmarkColor CheckBox.icon[filled].selectedBackground = $CheckBox.icon.checkmarkColor CheckBox.icon[filled].checkmarkColor = $CheckBox.icon.background # hover -CheckBox.icon[filled].selectedHoverBackground = darken($CheckBox.icon[filled].selectedBackground,3%,derived) +CheckBox.icon[filled].hoverSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,3%,derived) # pressed -CheckBox.icon[filled].selectedPressedBackground = darken($CheckBox.icon[filled].selectedBackground,6%,derived) +CheckBox.icon[filled].pressedSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,6%,derived) #---- CheckBoxMenuItem ---- diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties index aed961da..90bf9a8a 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties @@ -161,13 +161,13 @@ CheckBox.icon[filled].selectedBorderColor = shade($CheckBox.icon[filled].selecte CheckBox.icon[filled].selectedBackground = @accentCheckmarkColor CheckBox.icon[filled].checkmarkColor = @buttonBackground # focused -CheckBox.icon[filled].selectedFocusedBorderColor = tint($CheckBox.icon[filled].selectedBackground,50%) -CheckBox.icon[filled].selectedFocusedBackground = $CheckBox.icon[filled].selectedBackground -CheckBox.icon[filled].selectedFocusedCheckmarkColor = $CheckBox.icon.focusedBackground +CheckBox.icon[filled].focusedSelectedBorderColor = tint($CheckBox.icon[filled].selectedBackground,50%) +CheckBox.icon[filled].focusedSelectedBackground = $CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].focusedCheckmarkColor = $CheckBox.icon.focusedBackground # hover -CheckBox.icon[filled].selectedHoverBackground = darken($CheckBox.icon[filled].selectedBackground,5%,derived) +CheckBox.icon[filled].hoverSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,5%,derived) # pressed -CheckBox.icon[filled].selectedPressedBackground = darken($CheckBox.icon[filled].selectedBackground,10%,derived) +CheckBox.icon[filled].pressedSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,10%,derived) #---- CheckBoxMenuItem ---- 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 868d7ddb..adf092d4 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 @@ -489,18 +489,23 @@ public class TestFlatStyleableInfo // focused "icon.focusedBorderColor", Color.class, "icon.focusedBackground", Color.class, - "icon.selectedFocusedBorderColor", Color.class, - "icon.selectedFocusedBackground", Color.class, - "icon.selectedFocusedCheckmarkColor", Color.class, + "icon.focusedSelectedBorderColor", Color.class, + "icon.focusedSelectedBackground", Color.class, + "icon.focusedCheckmarkColor", Color.class, // hover "icon.hoverBorderColor", Color.class, "icon.hoverBackground", Color.class, - "icon.selectedHoverBackground", Color.class, + "icon.hoverSelectedBorderColor", Color.class, + "icon.hoverSelectedBackground", Color.class, + "icon.hoverCheckmarkColor", Color.class, // pressed + "icon.pressedBorderColor", Color.class, "icon.pressedBackground", Color.class, - "icon.selectedPressedBackground", Color.class + "icon.pressedSelectedBorderColor", Color.class, + "icon.pressedSelectedBackground", Color.class, + "icon.pressedCheckmarkColor", Color.class ); } @@ -1060,18 +1065,23 @@ public class TestFlatStyleableInfo // focused "focusedBorderColor", Color.class, "focusedBackground", Color.class, - "selectedFocusedBorderColor", Color.class, - "selectedFocusedBackground", Color.class, - "selectedFocusedCheckmarkColor", Color.class, + "focusedSelectedBorderColor", Color.class, + "focusedSelectedBackground", Color.class, + "focusedCheckmarkColor", Color.class, // hover "hoverBorderColor", Color.class, "hoverBackground", Color.class, - "selectedHoverBackground", Color.class, + "hoverSelectedBorderColor", Color.class, + "hoverSelectedBackground", Color.class, + "hoverCheckmarkColor", Color.class, // pressed + "pressedBorderColor", Color.class, "pressedBackground", Color.class, - "selectedPressedBackground", Color.class + "pressedSelectedBorderColor", Color.class, + "pressedSelectedBackground", Color.class, + "pressedCheckmarkColor", Color.class ); } 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 f8b585bf..ba5385a8 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 @@ -628,18 +628,23 @@ public class TestFlatStyling // focused ui.applyStyle( b, "icon.focusedBorderColor: #fff" ); ui.applyStyle( b, "icon.focusedBackground: #fff" ); - ui.applyStyle( b, "icon.selectedFocusedBorderColor: #fff" ); - ui.applyStyle( b, "icon.selectedFocusedBackground: #fff" ); - ui.applyStyle( b, "icon.selectedFocusedCheckmarkColor: #fff" ); + ui.applyStyle( b, "icon.focusedSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.focusedSelectedBackground: #fff" ); + ui.applyStyle( b, "icon.focusedCheckmarkColor: #fff" ); // hover ui.applyStyle( b, "icon.hoverBorderColor: #fff" ); ui.applyStyle( b, "icon.hoverBackground: #fff" ); - ui.applyStyle( b, "icon.selectedHoverBackground: #fff" ); + ui.applyStyle( b, "icon.hoverSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.hoverSelectedBackground: #fff" ); + ui.applyStyle( b, "icon.hoverCheckmarkColor: #fff" ); // pressed + ui.applyStyle( b, "icon.pressedBorderColor: #fff" ); ui.applyStyle( b, "icon.pressedBackground: #fff" ); - ui.applyStyle( b, "icon.selectedPressedBackground: #fff" ); + ui.applyStyle( b, "icon.pressedSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.pressedSelectedBackground: #fff" ); + ui.applyStyle( b, "icon.pressedCheckmarkColor: #fff" ); } @Test @@ -1283,18 +1288,23 @@ public class TestFlatStyling // focused icon.applyStyleProperty( "focusedBorderColor", Color.WHITE ); icon.applyStyleProperty( "focusedBackground", Color.WHITE ); - icon.applyStyleProperty( "selectedFocusedBorderColor", Color.WHITE ); - icon.applyStyleProperty( "selectedFocusedBackground", Color.WHITE ); - icon.applyStyleProperty( "selectedFocusedCheckmarkColor", Color.WHITE ); + icon.applyStyleProperty( "focusedSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "focusedSelectedBackground", Color.WHITE ); + icon.applyStyleProperty( "focusedCheckmarkColor", Color.WHITE ); // hover icon.applyStyleProperty( "hoverBorderColor", Color.WHITE ); icon.applyStyleProperty( "hoverBackground", Color.WHITE ); - icon.applyStyleProperty( "selectedHoverBackground", Color.WHITE ); + icon.applyStyleProperty( "hoverSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "hoverSelectedBackground", Color.WHITE ); + icon.applyStyleProperty( "hoverCheckmarkColor", Color.WHITE ); // pressed + icon.applyStyleProperty( "pressedBorderColor", Color.WHITE ); icon.applyStyleProperty( "pressedBackground", Color.WHITE ); - icon.applyStyleProperty( "selectedPressedBackground", Color.WHITE ); + icon.applyStyleProperty( "pressedSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "pressedSelectedBackground", Color.WHITE ); + icon.applyStyleProperty( "pressedCheckmarkColor", Color.WHITE ); } @Test diff --git a/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties b/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties index 05d01807..f26977df 100644 --- a/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties +++ b/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties @@ -58,17 +58,17 @@ CheckBox.icon.disabledBackground = CheckBox.icon.background CheckBox.icon.focusedBackground = CheckBox.icon.background CheckBox.icon.hoverBackground = CheckBox.icon.background CheckBox.icon.pressedBackground = CheckBox.icon.background -CheckBox.icon.selectedFocusedBackground = CheckBox.icon.selectedBackground -CheckBox.icon.selectedHoverBackground = CheckBox.icon.selectedBackground -CheckBox.icon.selectedPressedBackground = CheckBox.icon.selectedBackground +CheckBox.icon.focusedSelectedBackground = CheckBox.icon.selectedBackground +CheckBox.icon.hoverSelectedBackground = CheckBox.icon.selectedBackground +CheckBox.icon.pressedSelectedBackground = CheckBox.icon.selectedBackground CheckBox.icon[filled].disabledBackground = CheckBox.icon[filled].background CheckBox.icon[filled].focusedBackground = CheckBox.icon[filled].background CheckBox.icon[filled].hoverBackground = CheckBox.icon[filled].background CheckBox.icon[filled].pressedBackground = CheckBox.icon[filled].background -CheckBox.icon[filled].selectedFocusedBackground = CheckBox.icon[filled].selectedBackground -CheckBox.icon[filled].selectedHoverBackground = CheckBox.icon[filled].selectedBackground -CheckBox.icon[filled].selectedPressedBackground = CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].focusedSelectedBackground = CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].hoverSelectedBackground = CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].pressedSelectedBackground = CheckBox.icon[filled].selectedBackground #---- CheckBoxMenuItem ---- diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt index f1845746..eca1cbee 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt @@ -138,10 +138,10 @@ CheckBox.icon.selectedBorderColor #696b6d HSL 210 2 42 javax.swing.plaf.C CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] CheckBox.iconTextGap 4 CheckBox.icon[filled].checkmarkColor #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].hoverSelectedBackground #a0a0a0 HSL 0 0 63 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) +CheckBox.icon[filled].pressedSelectedBackground #999999 HSL 0 0 60 com.formdev.flatlaf.util.DerivedColor [UI] darken(6% autoInverse) CheckBox.icon[filled].selectedBackground #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon[filled].selectedBorderColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedHoverBackground #a0a0a0 HSL 0 0 63 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -CheckBox.icon[filled].selectedPressedBackground #999999 HSL 0 0 60 com.formdev.flatlaf.util.DerivedColor [UI] darken(6% autoInverse) CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] CheckBox.rollover true CheckBox.textIconGap 4 diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt index cd9780c8..6797cbd9 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt @@ -139,13 +139,13 @@ CheckBox.icon.selectedBorderColor #afafaf HSL 0 0 69 javax.swing.plaf.C CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] CheckBox.iconTextGap 4 CheckBox.icon[filled].checkmarkColor #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].focusedCheckmarkColor #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].focusedSelectedBackground #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].focusedSelectedBorderColor #a7cef3 HSL 209 76 80 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].hoverSelectedBackground #3891e4 HSL 209 76 56 com.formdev.flatlaf.util.DerivedColor [UI] darken(5% autoInverse) +CheckBox.icon[filled].pressedSelectedBackground #2184e1 HSL 209 76 51 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) CheckBox.icon[filled].selectedBackground #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon[filled].selectedBorderColor #4a95db HSL 209 67 57 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedFocusedBackground #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedFocusedBorderColor #a7cef3 HSL 209 76 80 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedFocusedCheckmarkColor #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedHoverBackground #3891e4 HSL 209 76 56 com.formdev.flatlaf.util.DerivedColor [UI] darken(5% autoInverse) -CheckBox.icon[filled].selectedPressedBackground #2184e1 HSL 209 76 51 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] CheckBox.rollover true CheckBox.textIconGap 4 diff --git a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt index 7a465092..51a88b32 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt @@ -135,12 +135,19 @@ CheckBox.icon.disabledBorderColor #bdbdbd HSL 0 0 74 javax.swing.plaf.C CheckBox.icon.disabledCheckmarkColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusedBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusedBorderColor #7b9fc7 HSL 212 40 63 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusedSelectedBorderColor #accff7 HSL 212 82 82 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.hoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.hoverBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.pressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverCheckmarkColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverSelectedBackground #ff88ff HSL 300 100 77 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverSelectedBorderColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedBackground #ffe99e HSL 46 100 81 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedBorderColor #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedCheckmarkColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedSelectedBackground #88ffff HSL 180 100 77 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedSelectedBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.selectedBackground #4d89c9 HSL 211 53 55 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.selectedBorderColor #4982cc HSL 214 56 54 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedFocusedBorderColor #accff7 HSL 212 82 82 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] CheckBox.iconTextGap 4 CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [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 6f01e70d..f2e48de9 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 @@ -125,14 +125,21 @@ CheckBox.icon.disabledCheckmarkColor = #ABABAB # focused CheckBox.icon.focusedBorderColor = #7B9FC7 CheckBox.icon.focusedBackground = #0ff -CheckBox.icon.selectedFocusedBorderColor = #ACCFF7 +CheckBox.icon.focusedSelectedBorderColor = #ACCFF7 # hover CheckBox.icon.hoverBorderColor = #f00 CheckBox.icon.hoverBackground = #ff0 +CheckBox.icon.hoverSelectedBorderColor = #00f +CheckBox.icon.hoverSelectedBackground = #f8f +CheckBox.icon.hoverCheckmarkColor = #0f0 # pressed -CheckBox.icon.pressedBackground = #FFC800 +CheckBox.icon.pressedBorderColor = #FFC800 +CheckBox.icon.pressedBackground = #ffe99e +CheckBox.icon.pressedSelectedBorderColor = #f00 +CheckBox.icon.pressedSelectedBackground = #8ff +CheckBox.icon.pressedCheckmarkColor = #00f #---- CheckBoxMenuItem ---- 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 5370d6c7..38cfddc3 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 @@ -85,16 +85,21 @@ CheckBox.icon.focusColor CheckBox.icon.focusWidth CheckBox.icon.focusedBackground CheckBox.icon.focusedBorderColor +CheckBox.icon.focusedCheckmarkColor +CheckBox.icon.focusedSelectedBackground +CheckBox.icon.focusedSelectedBorderColor CheckBox.icon.hoverBackground CheckBox.icon.hoverBorderColor +CheckBox.icon.hoverCheckmarkColor +CheckBox.icon.hoverSelectedBackground +CheckBox.icon.hoverSelectedBorderColor CheckBox.icon.pressedBackground +CheckBox.icon.pressedBorderColor +CheckBox.icon.pressedCheckmarkColor +CheckBox.icon.pressedSelectedBackground +CheckBox.icon.pressedSelectedBorderColor CheckBox.icon.selectedBackground CheckBox.icon.selectedBorderColor -CheckBox.icon.selectedFocusedBackground -CheckBox.icon.selectedFocusedBorderColor -CheckBox.icon.selectedFocusedCheckmarkColor -CheckBox.icon.selectedHoverBackground -CheckBox.icon.selectedPressedBackground CheckBox.icon.style CheckBox.iconTextGap CheckBox.icon[filled].background @@ -105,16 +110,21 @@ CheckBox.icon[filled].disabledBorderColor CheckBox.icon[filled].disabledCheckmarkColor CheckBox.icon[filled].focusedBackground CheckBox.icon[filled].focusedBorderColor +CheckBox.icon[filled].focusedCheckmarkColor +CheckBox.icon[filled].focusedSelectedBackground +CheckBox.icon[filled].focusedSelectedBorderColor CheckBox.icon[filled].hoverBackground CheckBox.icon[filled].hoverBorderColor +CheckBox.icon[filled].hoverCheckmarkColor +CheckBox.icon[filled].hoverSelectedBackground +CheckBox.icon[filled].hoverSelectedBorderColor CheckBox.icon[filled].pressedBackground +CheckBox.icon[filled].pressedBorderColor +CheckBox.icon[filled].pressedCheckmarkColor +CheckBox.icon[filled].pressedSelectedBackground +CheckBox.icon[filled].pressedSelectedBorderColor CheckBox.icon[filled].selectedBackground CheckBox.icon[filled].selectedBorderColor -CheckBox.icon[filled].selectedFocusedBackground -CheckBox.icon[filled].selectedFocusedBorderColor -CheckBox.icon[filled].selectedFocusedCheckmarkColor -CheckBox.icon[filled].selectedHoverBackground -CheckBox.icon[filled].selectedPressedBackground CheckBox.margin CheckBox.rollover CheckBox.textIconGap From 00a3ad738f1326a28ef9f54fd28458b65fff4af6 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 31 Oct 2021 18:26:31 +0100 Subject: [PATCH 2/6] CheckBox and RadioButton: made selected icon better recognizable in **FlatLaf Light** (use blue border), **Dark** and **Darcula** (use lighter border) themes; **IntelliJ** theme is not changed --- CHANGELOG.md | 3 +++ .../main/resources/com/formdev/flatlaf/FlatDarkLaf.properties | 3 ++- .../main/resources/com/formdev/flatlaf/FlatLightLaf.properties | 3 ++- flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt | 3 ++- flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt | 3 ++- 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eef6d099..e165e463 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,9 @@ FlatLaf Change Log - ComboBox, Spinner, TextField and subclasses: Support specifying width of border (see UI value `Component.borderWidth`). - CheckBox and RadioButton: + - Made selected icon better recognizable in **FlatLaf Light** (use blue + border), **Dark** and **Darcula** (use lighter border) themes. **IntelliJ** + theme is not changed. - Support specifying width of icon border (see UI value `CheckBox.icon.borderWidth`). - Reworked icon UI defaults and added missing ones. **Note**: There are minor diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties index 029979ce..6ba407e6 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties @@ -131,7 +131,7 @@ Button.toolbar.selectedBackground = lighten($Button.background,7%,derived) # enabled CheckBox.icon.borderColor = tint($Component.borderColor,5%) CheckBox.icon.background = tint(@background,5%) -CheckBox.icon.selectedBorderColor = $CheckBox.icon.borderColor +CheckBox.icon.selectedBorderColor = tint($CheckBox.icon.borderColor,20%) CheckBox.icon.selectedBackground = $CheckBox.icon.background CheckBox.icon.checkmarkColor = shade(@foreground,10%) @@ -149,6 +149,7 @@ CheckBox.icon.hoverBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.hoverBackground = lighten($CheckBox.icon.background,3%,derived) # pressed +CheckBox.icon.pressedBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.pressedBackground = lighten($CheckBox.icon.background,6%,derived) diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties index 90bf9a8a..7f73d7a4 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties @@ -134,7 +134,7 @@ Button.toolbar.selectedBackground = $Button.selectedBackground # enabled CheckBox.icon.borderColor = shade($Component.borderColor,10%) CheckBox.icon.background = @buttonBackground -CheckBox.icon.selectedBorderColor = $CheckBox.icon.borderColor +CheckBox.icon.selectedBorderColor = $CheckBox.icon.checkmarkColor CheckBox.icon.selectedBackground = $CheckBox.icon.background CheckBox.icon.checkmarkColor = @accentCheckmarkColor @@ -152,6 +152,7 @@ CheckBox.icon.hoverBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.hoverBackground = darken($CheckBox.icon.background,3%,derived) # pressed +CheckBox.icon.pressedBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.pressedBackground = darken($CheckBox.icon.background,10%,derived) diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt index eca1cbee..aa8743f5 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt @@ -133,8 +133,9 @@ CheckBox.icon.focusedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.Co CheckBox.icon.hoverBackground #4d5153 HSL 200 4 31 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) CheckBox.icon.hoverBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.pressedBackground #55585b HSL 210 3 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) +CheckBox.icon.pressedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.selectedBackground #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedBorderColor #696b6d HSL 210 2 42 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBorderColor #87898a HSL 200 1 54 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] CheckBox.iconTextGap 4 CheckBox.icon[filled].checkmarkColor #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt index 6797cbd9..105871df 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt @@ -134,8 +134,9 @@ CheckBox.icon.focusedBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.Co CheckBox.icon.hoverBackground #f7f7f7 HSL 0 0 97 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) CheckBox.icon.hoverBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.pressedBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +CheckBox.icon.pressedBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.selectedBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedBorderColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBorderColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] CheckBox.iconTextGap 4 CheckBox.icon[filled].checkmarkColor #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] From d67cfc911be265d5d5a69c2e95d7d57ec02685f7 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Tue, 2 Nov 2021 15:03:18 +0100 Subject: [PATCH 3/6] CheckBox and RadioButton: - added `CheckBox.icon.selectedBorderWidth` - added `CheckBox.icon.disabledSelectedBorderWidth` - added `CheckBox.icon.disabledSelectedBorderColor` - added `CheckBox.icon.disabledSelectedBackground` - changed `CheckBox.icon.focusWidth` from `int` `float` --- .../flatlaf/icons/FlatCheckBoxIcon.java | 63 +++++++++++-------- .../flatlaf/icons/FlatRadioButtonIcon.java | 11 ++-- .../formdev/flatlaf/ui/FlatRadioButtonUI.java | 9 ++- .../flatlaf/ui/TestFlatStyleableInfo.java | 12 +++- .../formdev/flatlaf/ui/TestFlatStyling.java | 14 ++++- .../uidefaults/FlatIntelliJLaf_1.8.0.txt | 2 +- .../dumps/uidefaults/FlatTestLaf_1.8.0.txt | 3 + .../flatlaf/testing/FlatTestLaf.properties | 4 ++ .../flatlaf/themeeditor/FlatLafUIKeys.txt | 10 +++ 9 files changed, 89 insertions(+), 39 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java index ae73dda6..be6346c5 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java @@ -44,8 +44,10 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * @uiDefault Component.focusWidth int * @uiDefault Component.borderWidth int * @uiDefault Component.focusColor Color - * @uiDefault CheckBox.icon.focusWidth int optional; defaults to Component.focusWidth + * @uiDefault CheckBox.icon.focusWidth int or float optional; defaults to Component.focusWidth * @uiDefault CheckBox.icon.borderWidth int or float optional; defaults to Component.borderWidth + * @uiDefault CheckBox.icon.selectedBorderWidth int or float optional; defaults to CheckBox.icon.borderWidth + * @uiDefault CheckBox.icon.disabledSelectedBorderWidth int or float optional; defaults to CheckBox.icon.selectedBorderWidth * @uiDefault CheckBox.arc int * * @uiDefault CheckBox.icon.focusColor Color optional; defaults to Component.focusColor @@ -57,6 +59,8 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * * @uiDefault CheckBox.icon.disabledBorderColor Color * @uiDefault CheckBox.icon.disabledBackground Color + * @uiDefault CheckBox.icon.disabledSelectedBorderColor Color optional; CheckBox.icon.disabledBorderColor is used if not specified + * @uiDefault CheckBox.icon.disabledSelectedBackground Color optional; CheckBox.icon.disabledBackground is used if not specified * @uiDefault CheckBox.icon.disabledCheckmarkColor Color * * @uiDefault CheckBox.icon.focusedBorderColor Color optional @@ -83,12 +87,11 @@ public class FlatCheckBoxIcon extends FlatAbstractIcon { protected final String style = UIManager.getString( "CheckBox.icon.style" ); - @Styleable public int focusWidth = getUIInt( "CheckBox.icon.focusWidth", - UIManager.getInt( "Component.focusWidth" ), style ); - @Styleable protected Color focusColor = FlatUIUtils.getUIColor( "CheckBox.icon.focusColor", - UIManager.getColor( "Component.focusColor" ) ); - /** @since 2 */ @Styleable protected float borderWidth = getUIFloat( "CheckBox.icon.borderWidth", - FlatUIUtils.getUIFloat( "Component.borderWidth", 1 ), style ); + @Styleable protected float focusWidth = getUIFloat( "CheckBox.icon.focusWidth", UIManager.getInt( "Component.focusWidth" ), style ); + @Styleable protected Color focusColor = FlatUIUtils.getUIColor( "CheckBox.icon.focusColor", UIManager.getColor( "Component.focusColor" ) ); + /** @since 2 */ @Styleable protected float borderWidth = getUIFloat( "CheckBox.icon.borderWidth", FlatUIUtils.getUIFloat( "Component.borderWidth", 1 ), style ); + /** @since 2 */ @Styleable protected float selectedBorderWidth = getUIFloat( "CheckBox.icon.selectedBorderWidth", Float.MIN_VALUE, style ); + /** @since 2 */ @Styleable protected float disabledSelectedBorderWidth = getUIFloat( "CheckBox.icon.disabledSelectedBorderWidth", Float.MIN_VALUE, style ); @Styleable protected int arc = FlatUIUtils.getUIInt( "CheckBox.arc", 2 ); // enabled @@ -101,6 +104,8 @@ public class FlatCheckBoxIcon // disabled @Styleable protected Color disabledBorderColor = getUIColor( "CheckBox.icon.disabledBorderColor", style ); @Styleable protected Color disabledBackground = getUIColor( "CheckBox.icon.disabledBackground", style ); + /** @since 2 */ @Styleable protected Color disabledSelectedBorderColor = getUIColor( "CheckBox.icon.disabledSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color disabledSelectedBackground = getUIColor( "CheckBox.icon.disabledSelectedBackground", style ); @Styleable protected Color disabledCheckmarkColor = getUIColor( "CheckBox.icon.disabledCheckmarkColor", style ); // focused @@ -133,15 +138,6 @@ public class FlatCheckBoxIcon return UIManager.getColor( key ); } - protected static int getUIInt( String key, int defaultValue, String style ) { - if( style != null ) { - int value = FlatUIUtils.getUIInt( styleKey( key, style ), Integer.MIN_VALUE ); - if( value != Integer.MIN_VALUE ) - return value; - } - return FlatUIUtils.getUIInt( key, defaultValue ); - } - /** @since 2 */ protected static float getUIFloat( String key, float defaultValue, String style ) { if( style != null ) { @@ -177,6 +173,11 @@ public class FlatCheckBoxIcon boolean indeterminate = isIndeterminate( c ); boolean selected = indeterminate || isSelected( c ); boolean isFocused = FlatUIUtils.isPermanentFocusOwner( c ); + float bw = selected + ? (disabledSelectedBorderWidth != Float.MIN_VALUE && !c.isEnabled() + ? disabledSelectedBorderWidth + : (selectedBorderWidth != Float.MIN_VALUE ? selectedBorderWidth : borderWidth)) + : borderWidth; // paint focused border if( isFocused && focusWidth > 0 && FlatButtonUI.isFocusPainted( c ) ) { @@ -186,7 +187,7 @@ public class FlatCheckBoxIcon // paint border g.setColor( getBorderColor( c, selected ) ); - paintBorder( c, g ); + paintBorder( c, g, bw ); // paint background Color bg = FlatUIUtils.deriveColor( getBackground( c, selected ), @@ -194,10 +195,10 @@ public class FlatCheckBoxIcon if( bg.getAlpha() < 255 ) { // fill background with default color before filling with non-opaque background g.setColor( selected ? selectedBackground : background ); - paintBackground( c, g ); + paintBackground( c, g, bw ); } g.setColor( bg ); - paintBackground( c, g ); + paintBackground( c, g, bw ); // paint checkmark if( selected ) { @@ -211,20 +212,23 @@ public class FlatCheckBoxIcon protected void paintFocusBorder( Component c, Graphics2D g ) { // the outer focus border is painted outside of the icon - int wh = ICON_SIZE - 1 + (focusWidth * 2); - int arcwh = arc + (focusWidth * 2); - g.fillRoundRect( -focusWidth + 1, -focusWidth, wh, wh, arcwh, arcwh ); + float wh = ICON_SIZE - 1 + (focusWidth * 2); + float arcwh = arc + (focusWidth * 2); + g.fill( new RoundRectangle2D.Float( -focusWidth + 1, -focusWidth, wh, wh, arcwh, arcwh ) ); } - protected void paintBorder( Component c, Graphics2D g ) { + protected void paintBorder( Component c, Graphics2D g, float borderWidth ) { + if( borderWidth == 0 ) + return; + int arcwh = arc; g.fillRoundRect( 1, 0, 14, 14, arcwh, arcwh ); } - protected void paintBackground( Component c, Graphics2D g ) { + protected void paintBackground( Component c, Graphics2D g, float borderWidth ) { float xy = borderWidth; float wh = 14 - (borderWidth * 2); - int arcwh = arc - 1; + float arcwh = arc - borderWidth; g.fill( new RoundRectangle2D.Float( 1 + xy, xy, wh, wh, arcwh, arcwh ) ); } @@ -250,6 +254,11 @@ public class FlatCheckBoxIcon return c instanceof AbstractButton && ((AbstractButton)c).isSelected(); } + /** @since 2 */ + public float getFocusWidth() { + return focusWidth; + } + protected Color getFocusColor( Component c ) { return focusColor; } @@ -257,7 +266,7 @@ public class FlatCheckBoxIcon protected Color getBorderColor( Component c, boolean selected ) { return FlatButtonUI.buttonStateColor( c, selected ? selectedBorderColor : borderColor, - disabledBorderColor, + (selected && disabledSelectedBorderColor != null) ? disabledSelectedBorderColor : disabledBorderColor, (selected && focusedSelectedBorderColor != null) ? focusedSelectedBorderColor : focusedBorderColor, (selected && hoverSelectedBorderColor != null) ? hoverSelectedBorderColor : hoverBorderColor, (selected && pressedSelectedBorderColor != null) ? pressedSelectedBorderColor : pressedBorderColor ); @@ -266,7 +275,7 @@ public class FlatCheckBoxIcon protected Color getBackground( Component c, boolean selected ) { return FlatButtonUI.buttonStateColor( c, selected ? selectedBackground : background, - disabledBackground, + (selected && disabledSelectedBackground != null) ? disabledSelectedBackground : disabledBackground, (selected && focusedSelectedBackground != null) ? focusedSelectedBackground : focusedBackground, (selected && hoverSelectedBackground != null) ? hoverSelectedBackground : hoverBackground, (selected && pressedSelectedBackground != null) ? pressedSelectedBackground : pressedBackground ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java index 14ad53df..c2636c84 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java @@ -41,17 +41,20 @@ public class FlatRadioButtonIcon @Override protected void paintFocusBorder( Component c, Graphics2D g ) { // the outer focus border is painted outside of the icon - int wh = ICON_SIZE + (focusWidth * 2); - g.fillOval( -focusWidth, -focusWidth, wh, wh ); + float wh = ICON_SIZE + (focusWidth * 2); + g.fill( new Ellipse2D.Float( -focusWidth, -focusWidth, wh, wh ) ); } @Override - protected void paintBorder( Component c, Graphics2D g ) { + protected void paintBorder( Component c, Graphics2D g, float borderWidth ) { + if( borderWidth == 0 ) + return; + g.fillOval( 0, 0, 15, 15 ); } @Override - protected void paintBackground( Component c, Graphics2D g ) { + protected void paintBackground( Component c, Graphics2D g, float borderWidth ) { float xy = borderWidth; float wh = 15 - (borderWidth * 2); g.fill( new Ellipse2D.Float( xy, xy, wh, wh ) ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java index 409a2e97..60c4fa83 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Objects; import javax.swing.AbstractButton; import javax.swing.CellRendererPane; +import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.LookAndFeel; import javax.swing.UIManager; @@ -279,8 +280,12 @@ public class FlatRadioButtonUI private int getIconFocusWidth( JComponent c ) { AbstractButton b = (AbstractButton) c; - return (b.getIcon() == null && getDefaultIcon() instanceof FlatCheckBoxIcon) - ? UIScale.scale( ((FlatCheckBoxIcon)getDefaultIcon()).focusWidth ) + Icon icon = b.getIcon(); + if( icon == null ) + icon = getDefaultIcon(); + + return (icon instanceof FlatCheckBoxIcon) + ? Math.round( UIScale.scale( ((FlatCheckBoxIcon)icon).getFocusWidth() ) ) : 0; } 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 adf092d4..c85f6003 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 @@ -469,9 +469,11 @@ public class TestFlatStyleableInfo //---- icon ---- - "icon.focusWidth", int.class, + "icon.focusWidth", float.class, "icon.focusColor", Color.class, "icon.borderWidth", float.class, + "icon.selectedBorderWidth", float.class, + "icon.disabledSelectedBorderWidth", float.class, "icon.arc", int.class, // enabled @@ -484,6 +486,8 @@ public class TestFlatStyleableInfo // disabled "icon.disabledBorderColor", Color.class, "icon.disabledBackground", Color.class, + "icon.disabledSelectedBorderColor", Color.class, + "icon.disabledSelectedBackground", Color.class, "icon.disabledCheckmarkColor", Color.class, // focused @@ -1045,9 +1049,11 @@ public class TestFlatStyleableInfo private void flatCheckBoxIcon( Map> expected ) { expectedMap( expected, - "focusWidth", int.class, + "focusWidth", float.class, "focusColor", Color.class, "borderWidth", float.class, + "selectedBorderWidth", float.class, + "disabledSelectedBorderWidth", float.class, "arc", int.class, // enabled @@ -1060,6 +1066,8 @@ public class TestFlatStyleableInfo // disabled "disabledBorderColor", Color.class, "disabledBackground", Color.class, + "disabledSelectedBorderColor", Color.class, + "disabledSelectedBackground", Color.class, "disabledCheckmarkColor", Color.class, // focused 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 ba5385a8..4aa654ab 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 @@ -608,9 +608,11 @@ public class TestFlatStyling //---- icon ---- - ui.applyStyle( b, "icon.focusWidth: 2" ); + ui.applyStyle( b, "icon.focusWidth: 1.5" ); ui.applyStyle( b, "icon.focusColor: #fff" ); - ui.applyStyle( b, "icon.borderWidth: 1" ); + ui.applyStyle( b, "icon.borderWidth: 1.5" ); + ui.applyStyle( b, "icon.selectedBorderWidth: 1.5" ); + ui.applyStyle( b, "icon.disabledSelectedBorderWidth: 1.5" ); ui.applyStyle( b, "icon.arc: 5" ); // enabled @@ -623,6 +625,8 @@ public class TestFlatStyling // disabled ui.applyStyle( b, "icon.disabledBorderColor: #fff" ); ui.applyStyle( b, "icon.disabledBackground: #fff" ); + ui.applyStyle( b, "icon.disabledSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.disabledSelectedBackground: #fff" ); ui.applyStyle( b, "icon.disabledCheckmarkColor: #fff" ); // focused @@ -1268,9 +1272,11 @@ public class TestFlatStyling } private void flatCheckBoxIcon( FlatCheckBoxIcon icon ) { - icon.applyStyleProperty( "focusWidth", 2 ); + icon.applyStyleProperty( "focusWidth", 1.5f ); icon.applyStyleProperty( "focusColor", Color.WHITE ); icon.applyStyleProperty( "borderWidth", 1.5f ); + icon.applyStyleProperty( "selectedBorderWidth", 1.5f ); + icon.applyStyleProperty( "disabledSelectedBorderWidth", 1.5f ); icon.applyStyleProperty( "arc", 5 ); // enabled @@ -1283,6 +1289,8 @@ public class TestFlatStyling // disabled icon.applyStyleProperty( "disabledBorderColor", Color.WHITE ); icon.applyStyleProperty( "disabledBackground", Color.WHITE ); + icon.applyStyleProperty( "disabledSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "disabledSelectedBackground", Color.WHITE ); icon.applyStyleProperty( "disabledCheckmarkColor", Color.WHITE ); // focused diff --git a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt index 80784f67..df1a31e8 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt @@ -49,7 +49,7 @@ + CheckBox.icon.style filled -- CheckBox.icon[filled].selectedFocusedCheckmarkColor #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] +- CheckBox.icon[filled].focusedCheckmarkColor #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] #---- ComboBox ---- diff --git a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt index 51a88b32..6110addd 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt @@ -133,6 +133,9 @@ CheckBox.icon.checkmarkColor #ffffff HSL 0 0 100 javax.swing.plaf.Colo CheckBox.icon.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledBorderColor #bdbdbd HSL 0 0 74 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledCheckmarkColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledSelectedBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledSelectedBorderColor #dbdbdb HSL 0 0 86 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledSelectedBorderWidth 2 CheckBox.icon.focusedBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusedBorderColor #7b9fc7 HSL 212 40 63 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusedSelectedBorderColor #accff7 HSL 212 82 82 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 f2e48de9..9e47fa47 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 @@ -110,6 +110,8 @@ Button.toolbar.selectedBackground = #ddd #---- CheckBox ---- +CheckBox.icon.disabledSelectedBorderWidth = 2 + # enabled CheckBox.icon.borderColor = #878787 CheckBox.icon.background = #fff @@ -120,6 +122,8 @@ CheckBox.icon.checkmarkColor = #fff # disabled CheckBox.icon.disabledBorderColor = #BDBDBD CheckBox.icon.disabledBackground = #F2F2F2 +CheckBox.icon.disabledSelectedBorderColor = #dbdbdb +CheckBox.icon.disabledSelectedBackground = #F2F2F2 CheckBox.icon.disabledCheckmarkColor = #ABABAB # focused 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 38cfddc3..565950b2 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 @@ -81,6 +81,9 @@ CheckBox.icon.checkmarkColor CheckBox.icon.disabledBackground CheckBox.icon.disabledBorderColor CheckBox.icon.disabledCheckmarkColor +CheckBox.icon.disabledSelectedBackground +CheckBox.icon.disabledSelectedBorderColor +CheckBox.icon.disabledSelectedBorderWidth CheckBox.icon.focusColor CheckBox.icon.focusWidth CheckBox.icon.focusedBackground @@ -100,14 +103,20 @@ CheckBox.icon.pressedSelectedBackground CheckBox.icon.pressedSelectedBorderColor CheckBox.icon.selectedBackground CheckBox.icon.selectedBorderColor +CheckBox.icon.selectedBorderWidth CheckBox.icon.style CheckBox.iconTextGap CheckBox.icon[filled].background CheckBox.icon[filled].borderColor +CheckBox.icon[filled].borderWidth CheckBox.icon[filled].checkmarkColor CheckBox.icon[filled].disabledBackground CheckBox.icon[filled].disabledBorderColor CheckBox.icon[filled].disabledCheckmarkColor +CheckBox.icon[filled].disabledSelectedBackground +CheckBox.icon[filled].disabledSelectedBorderColor +CheckBox.icon[filled].disabledSelectedBorderWidth +CheckBox.icon[filled].focusWidth CheckBox.icon[filled].focusedBackground CheckBox.icon[filled].focusedBorderColor CheckBox.icon[filled].focusedCheckmarkColor @@ -125,6 +134,7 @@ CheckBox.icon[filled].pressedSelectedBackground CheckBox.icon[filled].pressedSelectedBorderColor CheckBox.icon[filled].selectedBackground CheckBox.icon[filled].selectedBorderColor +CheckBox.icon[filled].selectedBorderWidth CheckBox.margin CheckBox.rollover CheckBox.textIconGap From aa4e013097dea0b1bc3c009eea0d0ec8cf6cad82 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Wed, 3 Nov 2021 11:15:17 +0100 Subject: [PATCH 4/6] CheckBox and RadioButton: made focused icon better recognizable in **FlatLaf Light** and **Dark** themes by painting a 1px focus border; **Darcula** and **IntelliJ** themes are not changed --- .../resources/com/formdev/flatlaf/FlatDarculaLaf.properties | 1 + .../main/resources/com/formdev/flatlaf/FlatDarkLaf.properties | 2 ++ .../resources/com/formdev/flatlaf/FlatIntelliJLaf.properties | 1 + .../main/resources/com/formdev/flatlaf/FlatLightLaf.properties | 2 ++ flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt | 1 + flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt | 1 + flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt | 1 + flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt | 1 + 8 files changed, 10 insertions(+) diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties index fe3c3949..b2b669aa 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties @@ -46,6 +46,7 @@ Button.default.boldText = true #---- CheckBox ---- +CheckBox.icon.focusWidth = null CheckBox.icon.focusedBackground = null diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties index 6ba407e6..5603c832 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties @@ -128,6 +128,8 @@ Button.toolbar.selectedBackground = lighten($Button.background,7%,derived) #---- CheckBox ---- +CheckBox.icon.focusWidth = 1 + # enabled CheckBox.icon.borderColor = tint($Component.borderColor,5%) CheckBox.icon.background = tint(@background,5%) diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties index 21d3f218..510b9c2e 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties @@ -54,6 +54,7 @@ Button.default.borderWidth = 1 #---- CheckBox ---- CheckBox.icon.style = filled +CheckBox.icon.focusWidth = null CheckBox.icon.focusedBackground = null diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties index 7f73d7a4..b87e47d6 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties @@ -131,6 +131,8 @@ Button.toolbar.selectedBackground = $Button.selectedBackground #---- CheckBox ---- +CheckBox.icon.focusWidth = 1 + # enabled CheckBox.icon.borderColor = shade($Component.borderColor,10%) CheckBox.icon.background = @buttonBackground diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt index cbb0c791..8291260a 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt @@ -18,6 +18,7 @@ #---- CheckBox ---- +- CheckBox.icon.focusWidth 1 - CheckBox.icon.focusedBackground #446e9e4d 30% HSLA 212 40 44 30 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt index aa8743f5..ebe78cbd 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt @@ -128,6 +128,7 @@ CheckBox.icon.checkmarkColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.Colo CheckBox.icon.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledBorderColor #545657 HSL 200 2 34 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledCheckmarkColor #686868 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusWidth 1 CheckBox.icon.focusedBackground #446e9e4d 30% HSLA 212 40 44 30 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.hoverBackground #4d5153 HSL 200 4 31 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) diff --git a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt index df1a31e8..943c0881 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt @@ -45,6 +45,7 @@ #---- CheckBox ---- +- CheckBox.icon.focusWidth 1 - CheckBox.icon.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] + CheckBox.icon.style filled diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt index 105871df..18a37bd7 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt @@ -129,6 +129,7 @@ CheckBox.icon.checkmarkColor #4e9de7 HSL 209 76 61 javax.swing.plaf.Colo CheckBox.icon.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledBorderColor #bfbfbf HSL 0 0 75 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledCheckmarkColor #a9a9a9 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusWidth 1 CheckBox.icon.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusedBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.hoverBackground #f7f7f7 HSL 0 0 97 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) From 88576f68fdc604c5a05d798ceae5f14ce0a02e0f Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Wed, 3 Nov 2021 11:27:18 +0100 Subject: [PATCH 5/6] CheckBox and RadioButton: added `RadioButton.icon.style` (similar to `CheckBox.icon.style`) to support different styles for checkbox and radiobutton (e.g. Material design uses filled checkboxes, but outlined radiobuttons) --- .../java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java | 6 +++++- .../java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java | 6 ++++++ .../resources/com/formdev/flatlaf/FlatDarkLaf.properties | 2 +- .../com/formdev/flatlaf/FlatIntelliJLaf.properties | 5 +++++ .../resources/com/formdev/flatlaf/FlatLightLaf.properties | 2 +- flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt | 5 +++++ .../com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt | 1 + 7 files changed, 24 insertions(+), 3 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java index be6346c5..f371679c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java @@ -86,7 +86,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; public class FlatCheckBoxIcon extends FlatAbstractIcon { - protected final String style = UIManager.getString( "CheckBox.icon.style" ); + protected final String style = UIManager.getString( getPropertyPrefix() + "icon.style" ); @Styleable protected float focusWidth = getUIFloat( "CheckBox.icon.focusWidth", UIManager.getInt( "Component.focusWidth" ), style ); @Styleable protected Color focusColor = FlatUIUtils.getUIColor( "CheckBox.icon.focusColor", UIManager.getColor( "Component.focusColor" ) ); /** @since 2 */ @Styleable protected float borderWidth = getUIFloat( "CheckBox.icon.borderWidth", FlatUIUtils.getUIFloat( "Component.borderWidth", 1 ), style ); @@ -129,6 +129,10 @@ public class FlatCheckBoxIcon /** @since 2 */ @Styleable protected Color pressedSelectedBackground = getUIColor( "CheckBox.icon.pressedSelectedBackground", style ); /** @since 2 */ @Styleable protected Color pressedCheckmarkColor = getUIColor( "CheckBox.icon.pressedCheckmarkColor", style ); + protected String getPropertyPrefix() { + return "CheckBox."; + } + protected static Color getUIColor( String key, String style ) { if( style != null ) { Color color = UIManager.getColor( styleKey( key, style ) ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java index c2636c84..87df538c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java @@ -29,6 +29,7 @@ import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; * is painted outside of the icon bounds. Make sure that the radiobutton * has margins, which are equal or greater than focusWidth. * + * @uiDefault RadioButton.icon.style String optional; "outlined"/null (default) or "filled" * @uiDefault RadioButton.icon.centerDiameter int or float * * @author Karl Tauber @@ -38,6 +39,11 @@ public class FlatRadioButtonIcon { @Styleable protected float centerDiameter = getUIFloat( "RadioButton.icon.centerDiameter", 8, style ); + @Override + protected String getPropertyPrefix() { + return "RadioButton."; + } + @Override protected void paintFocusBorder( Component c, Graphics2D g ) { // the outer focus border is painted outside of the icon diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties index 5603c832..82c080a7 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties @@ -155,7 +155,7 @@ CheckBox.icon.pressedBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.pressedBackground = lighten($CheckBox.icon.background,6%,derived) -# used if CheckBox.icon.style = filled +# used if CheckBox.icon.style or RadioButton.icon.style = filled # enabled CheckBox.icon[filled].selectedBorderColor = $CheckBox.icon.checkmarkColor CheckBox.icon[filled].selectedBackground = $CheckBox.icon.checkmarkColor diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties index 510b9c2e..d0c256be 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties @@ -64,3 +64,8 @@ Component.focusWidth = 2 Component.innerFocusWidth = 0 Component.innerOutlineWidth = 0 Component.arrowType = triangle + + +#---- RadioButton ---- + +RadioButton.icon.style = filled diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties index b87e47d6..544280e0 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties @@ -158,7 +158,7 @@ CheckBox.icon.pressedBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.pressedBackground = darken($CheckBox.icon.background,10%,derived) -# used if CheckBox.icon.style = filled +# used if CheckBox.icon.style or RadioButton.icon.style = filled # enabled CheckBox.icon[filled].selectedBorderColor = shade($CheckBox.icon[filled].selectedBackground,5%) CheckBox.icon[filled].selectedBackground = @accentCheckmarkColor diff --git a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt index 943c0881..f579ab89 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt @@ -100,6 +100,11 @@ + PasswordField.border [lazy] 3,3,3,3 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +#---- RadioButton ---- + ++ RadioButton.icon.style filled + + #---- ScrollPane ---- - ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] 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 565950b2..9d35f08c 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 @@ -601,6 +601,7 @@ RadioButton.foreground RadioButton.highlight RadioButton.icon RadioButton.icon.centerDiameter +RadioButton.icon.style RadioButton.iconTextGap RadioButton.icon[filled].centerDiameter RadioButton.light From 57405b2f565b185fbb4c02767ce6062bf7fe7c48 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Wed, 3 Nov 2021 14:29:56 +0100 Subject: [PATCH 6/6] CheckBox and RadioButton: derive `CheckBox.icon.disabledCheckmarkColor` from `CheckBox.icon.checkmarkColor` in light themes (as in dark themes) --- .../main/resources/com/formdev/flatlaf/FlatLightLaf.properties | 2 +- flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties index 544280e0..a0ab8a28 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties @@ -143,7 +143,7 @@ CheckBox.icon.checkmarkColor = @accentCheckmarkColor # disabled CheckBox.icon.disabledBorderColor = tint($CheckBox.icon.borderColor,20%) CheckBox.icon.disabledBackground = @disabledBackground -CheckBox.icon.disabledCheckmarkColor = shade(@background,30%) +CheckBox.icon.disabledCheckmarkColor = lighten(changeSaturation($CheckBox.icon.checkmarkColor,0%),5%) # focused CheckBox.icon.focusedBorderColor = shade($Component.focusedBorderColor,10%) diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt index 18a37bd7..ffe60224 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt @@ -128,7 +128,7 @@ CheckBox.icon.borderColor #afafaf HSL 0 0 69 javax.swing.plaf.Colo CheckBox.icon.checkmarkColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.disabledBorderColor #bfbfbf HSL 0 0 75 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledCheckmarkColor #a9a9a9 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledCheckmarkColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusWidth 1 CheckBox.icon.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] CheckBox.icon.focusedBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.ColorUIResource [UI]