diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java index 9283b49d..9faee940 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java @@ -24,7 +24,9 @@ import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; +import com.formdev.flatlaf.ui.FlatStyleSupport; import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.ui.FlatStyleSupport.Styleable; /** * Help button icon for {@link javax.swing.JButton}. @@ -50,29 +52,34 @@ import com.formdev.flatlaf.ui.FlatUIUtils; public class FlatHelpButtonIcon extends FlatAbstractIcon { - protected final int focusWidth = UIManager.getInt( "Component.focusWidth" ); - protected final Color focusColor = UIManager.getColor( "Component.focusColor" ); - protected final float innerFocusWidth = FlatUIUtils.getUIFloat( "HelpButton.innerFocusWidth", FlatUIUtils.getUIFloat( "Component.innerFocusWidth", 0 ) ); - protected final int borderWidth = FlatUIUtils.getUIInt( "HelpButton.borderWidth", 1 ); + @Styleable protected int focusWidth = UIManager.getInt( "Component.focusWidth" ); + @Styleable protected Color focusColor = UIManager.getColor( "Component.focusColor" ); + @Styleable protected float innerFocusWidth = FlatUIUtils.getUIFloat( "HelpButton.innerFocusWidth", FlatUIUtils.getUIFloat( "Component.innerFocusWidth", 0 ) ); + @Styleable protected int borderWidth = FlatUIUtils.getUIInt( "HelpButton.borderWidth", 1 ); - protected final Color borderColor = UIManager.getColor( "HelpButton.borderColor" ); - protected final Color disabledBorderColor = UIManager.getColor( "HelpButton.disabledBorderColor" ); - protected final Color focusedBorderColor = UIManager.getColor( "HelpButton.focusedBorderColor" ); - protected final Color hoverBorderColor = UIManager.getColor( "HelpButton.hoverBorderColor" ); - protected final Color background = UIManager.getColor( "HelpButton.background" ); - protected final Color disabledBackground = UIManager.getColor( "HelpButton.disabledBackground" ); - protected final Color focusedBackground = UIManager.getColor( "HelpButton.focusedBackground" ); - protected final Color hoverBackground = UIManager.getColor( "HelpButton.hoverBackground" ); - protected final Color pressedBackground = UIManager.getColor( "HelpButton.pressedBackground" ); - protected final Color questionMarkColor = UIManager.getColor( "HelpButton.questionMarkColor" ); - protected final Color disabledQuestionMarkColor = UIManager.getColor( "HelpButton.disabledQuestionMarkColor" ); - - protected final int iconSize = 22 + (focusWidth * 2); + @Styleable protected Color borderColor = UIManager.getColor( "HelpButton.borderColor" ); + @Styleable protected Color disabledBorderColor = UIManager.getColor( "HelpButton.disabledBorderColor" ); + @Styleable protected Color focusedBorderColor = UIManager.getColor( "HelpButton.focusedBorderColor" ); + @Styleable protected Color hoverBorderColor = UIManager.getColor( "HelpButton.hoverBorderColor" ); + @Styleable protected Color background = UIManager.getColor( "HelpButton.background" ); + @Styleable protected Color disabledBackground = UIManager.getColor( "HelpButton.disabledBackground" ); + @Styleable protected Color focusedBackground = UIManager.getColor( "HelpButton.focusedBackground" ); + @Styleable protected Color hoverBackground = UIManager.getColor( "HelpButton.hoverBackground" ); + @Styleable protected Color pressedBackground = UIManager.getColor( "HelpButton.pressedBackground" ); + @Styleable protected Color questionMarkColor = UIManager.getColor( "HelpButton.questionMarkColor" ); + @Styleable protected Color disabledQuestionMarkColor = UIManager.getColor( "HelpButton.disabledQuestionMarkColor" ); public FlatHelpButtonIcon() { super( 0, 0, null ); } + /** + * @since TODO + */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStyleSupport.applyToAnnotatedObject( this, key, value ); + } + @Override protected void paintIcon( Component c, Graphics2D g2 ) { /* @@ -89,7 +96,7 @@ public class FlatHelpButtonIcon boolean focused = FlatUIUtils.isPermanentFocusOwner( c ); float xy = 0.5f; - float wh = iconSize - 1; + float wh = iconSize() - 1; // paint outer focus border if( focused && FlatButtonUI.isFocusPainted( c ) ) { @@ -151,11 +158,15 @@ public class FlatHelpButtonIcon @Override public int getIconWidth() { - return scale( iconSize ); + return scale( iconSize() ); } @Override public int getIconHeight() { - return scale( iconSize ); + return scale( iconSize() ); + } + + private int iconSize() { + return 22 + (focusWidth * 2); } } 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 34ea010b..77d3b5fa 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 @@ -46,6 +46,7 @@ import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicButtonListener; import javax.swing.plaf.basic.BasicButtonUI; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.icons.FlatHelpButtonIcon; import com.formdev.flatlaf.ui.FlatStyleSupport.Styleable; import com.formdev.flatlaf.ui.FlatStyleSupport.UnknownStyleException; import com.formdev.flatlaf.util.UIScale; @@ -137,6 +138,7 @@ public class FlatButtonUI private final boolean shared; private boolean borderShared = true; + private boolean helpButtonIconShared = true; private boolean defaults_initialized = false; private Map oldStyleValues; @@ -274,6 +276,19 @@ public class FlatButtonUI * @since TODO */ protected Object applyStyleProperty( AbstractButton b, String key, Object value ) { + if( key.startsWith( "help." ) ) { + if( !(helpButtonIcon instanceof FlatHelpButtonIcon) ) + return new UnknownStyleException( key ); + + if( helpButtonIconShared ) { + helpButtonIcon = FlatStyleSupport.cloneIcon( helpButtonIcon ); + helpButtonIconShared = false; + } + + key = key.substring( "help.".length() ); + return ((FlatHelpButtonIcon)helpButtonIcon).applyStyleProperty( key, value ); + } + try { return FlatStyleSupport.applyToAnnotatedObject( this, key, value ); } catch( UnknownStyleException ex ) { 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 d28b2907..0f0de186 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 @@ -37,6 +37,7 @@ import javax.swing.plaf.basic.BasicRadioButtonUI; import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.icons.FlatCheckBoxIcon; import com.formdev.flatlaf.ui.FlatStyleSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStyleSupport.UnknownStyleException; import com.formdev.flatlaf.util.UIScale; /** @@ -164,16 +165,15 @@ public class FlatRadioButtonUI protected Object applyStyleProperty( String key, Object value ) { // style icon if( key.startsWith( "icon." ) ) { - key = key.substring( "icon.".length() ); - if( !(icon instanceof FlatCheckBoxIcon) ) - return null; + return new UnknownStyleException( key ); if( iconShared ) { icon = FlatStyleSupport.cloneIcon( icon ); iconShared = false; } + key = key.substring( "icon.".length() ); return ((FlatCheckBoxIcon)icon).applyStyleProperty( key, value ); } diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/FlatStylingTests.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/FlatStylingTests.java index 40ed3a4b..635f5da2 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/FlatStylingTests.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/FlatStylingTests.java @@ -70,6 +70,25 @@ public class FlatStylingTests ui.installUI( b ); button( b, ui ); + + //---- FlatHelpButtonIcon ---- + + ui.applyStyle( b, "help.focusWidth: 2" ); + ui.applyStyle( b, "help.focusColor: #fff" ); + ui.applyStyle( b, "help.innerFocusWidth: {float}0.5" ); + ui.applyStyle( b, "help.borderWidth: 1" ); + + ui.applyStyle( b, "help.borderColor: #fff" ); + ui.applyStyle( b, "help.disabledBorderColor: #fff" ); + ui.applyStyle( b, "help.focusedBorderColor: #fff" ); + ui.applyStyle( b, "help.hoverBorderColor: #fff" ); + ui.applyStyle( b, "help.background: #fff" ); + ui.applyStyle( b, "help.disabledBackground: #fff" ); + ui.applyStyle( b, "help.focusedBackground: #fff" ); + ui.applyStyle( b, "help.hoverBackground: #fff" ); + ui.applyStyle( b, "help.pressedBackground: #fff" ); + ui.applyStyle( b, "help.questionMarkColor: #fff" ); + ui.applyStyle( b, "help.disabledQuestionMarkColor: #fff" ); } private void button( AbstractButton b, FlatButtonUI ui ) { @@ -821,4 +840,25 @@ public class FlatStylingTests icon.applyStyleProperty( "disabledArrowColor", Color.WHITE ); icon.applyStyleProperty( "selectionForeground", Color.WHITE ); } + @Test + void flatHelpButtonIcon() { + FlatHelpButtonIcon icon = new FlatHelpButtonIcon(); + + icon.applyStyleProperty( "focusWidth", 2 ); + icon.applyStyleProperty( "focusColor", Color.WHITE ); + icon.applyStyleProperty( "innerFocusWidth", 0.5f ); + icon.applyStyleProperty( "borderWidth", 1 ); + + icon.applyStyleProperty( "borderColor", Color.WHITE ); + icon.applyStyleProperty( "disabledBorderColor", Color.WHITE ); + icon.applyStyleProperty( "focusedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "hoverBorderColor", Color.WHITE ); + icon.applyStyleProperty( "background", Color.WHITE ); + icon.applyStyleProperty( "disabledBackground", Color.WHITE ); + icon.applyStyleProperty( "focusedBackground", Color.WHITE ); + icon.applyStyleProperty( "hoverBackground", Color.WHITE ); + icon.applyStyleProperty( "pressedBackground", Color.WHITE ); + icon.applyStyleProperty( "questionMarkColor", Color.WHITE ); + icon.applyStyleProperty( "disabledQuestionMarkColor", Color.WHITE ); + } }