diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java index f8777677..3ad8e454 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java @@ -16,7 +16,6 @@ package com.formdev.flatlaf.icons; -import static com.formdev.flatlaf.util.UIScale.*; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; @@ -29,7 +28,7 @@ import com.formdev.flatlaf.util.UIScale; /** * Base class for icons that scales width and height, creates and initializes * a scaled graphics context for icon painting. - * + *

* Subclasses do not need to scale icon painting. * * @author Karl Tauber @@ -37,10 +36,15 @@ import com.formdev.flatlaf.util.UIScale; public abstract class FlatAbstractIcon implements Icon, UIResource { + /** Unscaled icon width. */ protected final int width; + /** Unscaled icon height. */ protected final int height; protected Color color; + /** Additional icon scale factor. */ + private float scale = 1; + public FlatAbstractIcon( int width, int height, Color color ) { this.width = width; this.height = height; @@ -61,6 +65,9 @@ public abstract class FlatAbstractIcon g2.translate( x, y ); UIScale.scaleGraphics( g2 ); + float scale = getScale(); + if( scale != 1 ) + g2.scale( scale, scale ); if( color != null ) g2.setColor( color ); @@ -71,19 +78,71 @@ public abstract class FlatAbstractIcon } } - /** @since 3.5.2 */ + /** + * Paints icon background. Default implementation does nothing. + * Can be overridden to paint specific icon background. + *

+ * The bounds of the area to be filled are: + * x, y, {@link #getIconWidth()}, {@link #getIconHeight()}. + *

+ * In contrast to {@link #paintIcon(Component, Graphics2D)}, + * the graphics context {@code g} is not translated and not scaled. + * + * @since 3.5.2 + */ protected void paintBackground( Component c, Graphics2D g, int x, int y ) { } + /** + * Paints icon. + *

+ * The graphics context is translated and scaled. + * This means that icon x,y coordinates are {@code 0,0} + * and it is not necessary to scale coordinates within this method. + *

+ * The bounds to be used for icon painting are: + * 0, 0, {@link #width}, {@link #height}. + */ protected abstract void paintIcon( Component c, Graphics2D g ); + /** + * Returns the scaled icon width. + */ @Override public int getIconWidth() { - return scale( width ); + return scale( UIScale.scale( width ) ); } + /** + * Returns the scaled icon height. + */ @Override public int getIconHeight() { - return scale( height ); + return scale( UIScale.scale( height ) ); + } + + /** @since 3.7 */ + public float getScale() { + return scale; + } + + /** @since 3.7 */ + public void setScale( float scale ) { + this.scale = scale; + } + + /** + * Multiplies the given value by the icon scale factor {@link #getScale()} and rounds the result. + *

+ * If you want scale a {@code float} or {@code double} value, + * simply use: {@code myFloatValue * }{@link #getScale()}. + *

+ * Do not use this method when painting icon in {@link #paintIcon(Component, Graphics2D)}. + * + * @since 3.7 + */ + protected int scale( int size ) { + float scale = getScale(); + return (scale == 1) ? size : Math.round( size * scale ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java index a4e4e978..c0e3424a 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java @@ -17,7 +17,6 @@ package com.formdev.flatlaf.icons; import java.awt.BasicStroke; -import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.RenderingHints; @@ -25,11 +24,9 @@ import java.awt.geom.Area; import java.awt.geom.Path2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; -import java.util.Collections; -import java.util.Map; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; -import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -39,6 +36,8 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * * @author Karl Tauber */ +@StyleableField( cls=FlatAbstractIcon.class, key="capsLockIconScale", fieldName="scale" ) +@StyleableField( cls=FlatAbstractIcon.class, key="capsLockIconColor", fieldName="color" ) public class FlatCapsLockIcon extends FlatAbstractIcon implements StyleableObject @@ -49,31 +48,6 @@ public class FlatCapsLockIcon super( 16, 16, UIManager.getColor( "PasswordField.capsLockIconColor" ) ); } - /** @since 2 */ - @Override - public Object applyStyleProperty( String key, Object value ) { - Object oldValue; - switch( key ) { - case "capsLockIconColor": oldValue = color; color = (Color) value; return oldValue; - default: throw new UnknownStyleException( key ); - } - } - - /** @since 3.7 */ - @Override - public Map> getStyleableInfos() throws IllegalArgumentException { - return Collections.singletonMap( "capsLockIconColor", Color.class ); - } - - /** @since 2.5 */ - @Override - public Object getStyleableValue( String key ) { - switch( key ) { - case "capsLockIconColor": return color; - default: return null; - } - } - @Override protected void paintIcon( Component c, Graphics2D g ) { /* 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 5127c006..e7af7d43 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 @@ -29,6 +29,7 @@ import javax.swing.JComponent; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; import com.formdev.flatlaf.ui.FlatUIUtils; @@ -100,6 +101,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * * @author Karl Tauber */ +@StyleableField( cls=FlatAbstractIcon.class, key="scale" ) public class FlatCheckBoxIcon extends FlatAbstractIcon implements StyleableObject @@ -291,7 +293,7 @@ public class FlatCheckBoxIcon /** @since 2 */ public float getFocusWidth() { - return focusWidth; + return focusWidth * getScale(); } protected Color getFocusColor( Component c ) { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java index 535e0977..a8efd216 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java @@ -25,6 +25,7 @@ import javax.swing.AbstractButton; import javax.swing.JMenuItem; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; /** @@ -37,6 +38,7 @@ import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; * * @author Karl Tauber */ +@StyleableField( cls=FlatAbstractIcon.class, key="scale" ) public class FlatCheckBoxMenuItemIcon extends FlatAbstractIcon implements StyleableObject diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java index de3cd135..49b81b22 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java @@ -25,6 +25,7 @@ import javax.swing.AbstractButton; import javax.swing.ButtonModel; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; import com.formdev.flatlaf.ui.FlatUIUtils; @@ -38,6 +39,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * @author Karl Tauber * @since 1.5 */ +@StyleableField( cls=FlatAbstractIcon.class, key="clearIconScale", fieldName="scale" ) public class FlatClearIcon extends FlatAbstractIcon implements StyleableObject 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 4e531681..1b891429 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 @@ -16,7 +16,6 @@ package com.formdev.flatlaf.icons; -import static com.formdev.flatlaf.util.UIScale.*; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; @@ -27,7 +26,9 @@ import java.awt.geom.Path2D; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; +import com.formdev.flatlaf.util.UIScale; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -51,6 +52,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * * @author Karl Tauber */ +@StyleableField( cls=FlatAbstractIcon.class, key="scale" ) public class FlatHelpButtonIcon extends FlatAbstractIcon implements StyleableObject @@ -152,12 +154,12 @@ public class FlatHelpButtonIcon @Override public int getIconWidth() { - return scale( iconSize() ); + return scale( UIScale.scale( iconSize() ) ); } @Override public int getIconHeight() { - return scale( iconSize() ); + return scale( UIScale.scale( iconSize() ) ); } private int iconSize() { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java index 3bd1b071..cd6a851a 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java @@ -25,6 +25,7 @@ import javax.swing.JMenu; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; /** @@ -38,6 +39,7 @@ import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; * * @author Karl Tauber */ +@StyleableField( cls=FlatAbstractIcon.class, key="scale" ) public class FlatMenuArrowIcon extends FlatAbstractIcon implements StyleableObject diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchIcon.java index ecba9e26..d612cec6 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchIcon.java @@ -24,6 +24,7 @@ import java.awt.geom.Ellipse2D; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; import com.formdev.flatlaf.ui.FlatUIUtils; @@ -37,6 +38,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * @author Karl Tauber * @since 1.5 */ +@StyleableField( cls=FlatAbstractIcon.class, key="searchIconScale", fieldName="scale" ) public class FlatSearchIcon extends FlatAbstractIcon implements StyleableObject diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java index efd69ac4..004470ed 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java @@ -25,6 +25,7 @@ import java.awt.geom.Path2D; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableObject; import com.formdev.flatlaf.ui.FlatUIUtils; @@ -45,6 +46,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * * @author Karl Tauber */ +@StyleableField( cls=FlatAbstractIcon.class, key="closeScale", fieldName="scale" ) public class FlatTabbedPaneCloseIcon extends FlatAbstractIcon implements StyleableObject diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java index c24a0bb1..b9506635 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java @@ -214,7 +214,7 @@ public class FlatPasswordFieldUI /** @since 2 */ @Override protected Object applyStyleProperty( String key, Object value ) { - if( key.equals( "capsLockIconColor" ) && capsLockIcon instanceof StyleableObject ) { + if( key.startsWith( "capsLockIcon" ) && capsLockIcon instanceof StyleableObject ) { if( capsLockIconShared ) { capsLockIcon = FlatStylingSupport.cloneIcon( capsLockIcon ); capsLockIconShared = false; @@ -236,7 +236,7 @@ public class FlatPasswordFieldUI @Override public Object getStyleableValue( JComponent c, String key ) { - if( key.equals( "capsLockIconColor" ) && capsLockIcon instanceof StyleableObject ) + if( key.startsWith( "capsLockIcon" ) && capsLockIcon instanceof StyleableObject ) return ((StyleableObject)capsLockIcon).getStyleableValue( key ); return super.getStyleableValue( c, key ); 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 d470cd61..54dfcbb1 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 @@ -228,10 +228,8 @@ public class FlatRadioButtonUI public Map> getStyleableInfos( JComponent c ) { Map> infos = FlatStylingSupport.getAnnotatedStyleableInfos( this ); Icon icon = getRealIcon( c ); - if( icon instanceof StyleableObject ) { - for( Map.Entry> e : ((StyleableObject)icon).getStyleableInfos().entrySet() ) - infos.put( "icon.".concat( e.getKey() ), e.getValue() ); - } + if( icon instanceof StyleableObject ) + FlatStylingSupport.putAllPrefixKey( infos, "icon.", ((StyleableObject)icon).getStyleableInfos() ); return infos; } 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 8ee1951c..704f7c14 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 @@ -74,6 +74,8 @@ public class TestFlatStyleableInfo //---- FlatHelpButtonIcon ---- expectedMap( expected, + "help.scale", float.class, + "help.focusWidth", int.class, "help.focusColor", Color.class, "help.innerFocusWidth", float.class, @@ -413,6 +415,8 @@ public class TestFlatStyleableInfo private void menuItem_checkIcon( Map> expected ) { expectedMap( expected, + "icon.scale", float.class, + "icon.checkmarkColor", Color.class, "icon.disabledCheckmarkColor", Color.class, "selectionForeground", Color.class @@ -421,6 +425,8 @@ public class TestFlatStyleableInfo private void menuItem_arrowIcon( Map> expected ) { expectedMap( expected, + "icon.scale", float.class, + "icon.arrowType", String.class, "icon.arrowColor", Color.class, "icon.disabledArrowColor", Color.class, @@ -456,7 +462,8 @@ public class TestFlatStyleableInfo expectedMap( expected, // capsLockIcon - "capsLockIconColor", Color.class + "capsLockIconColor", Color.class, + "capsLockIconScale", float.class ); // border @@ -553,6 +560,8 @@ public class TestFlatStyleableInfo //---- icon ---- + "icon.scale", float.class, + "icon.focusWidth", float.class, "icon.focusColor", Color.class, "icon.borderWidth", float.class, @@ -831,6 +840,7 @@ public class TestFlatStyleableInfo "tabIconPlacement", int.class, // FlatTabbedPaneCloseIcon + "closeScale", float.class, "closeSize", Dimension.class, "closeArc", int.class, "closeCrossPlainSize", float.class, @@ -1269,6 +1279,8 @@ public class TestFlatStyleableInfo private void flatCheckBoxIcon( Map> expected ) { expectedMap( expected, + "scale", float.class, + "focusWidth", float.class, "focusColor", Color.class, "borderWidth", float.class, @@ -1353,6 +1365,8 @@ public class TestFlatStyleableInfo private void flatCheckBoxMenuItemIcon( Map> expected ) { expectedMap( expected, + "scale", float.class, + "checkmarkColor", Color.class, "disabledCheckmarkColor", Color.class, "selectionForeground", Color.class @@ -1371,6 +1385,8 @@ public class TestFlatStyleableInfo private void flatMenuArrowIcon( Map> expected ) { expectedMap( expected, + "scale", float.class, + "arrowType", String.class, "arrowColor", Color.class, "disabledArrowColor", Color.class, @@ -1383,6 +1399,8 @@ public class TestFlatStyleableInfo FlatHelpButtonIcon icon = new FlatHelpButtonIcon(); Map> expected = expectedMap( + "scale", float.class, + "focusWidth", int.class, "focusColor", Color.class, "innerFocusWidth", float.class, @@ -1409,6 +1427,8 @@ public class TestFlatStyleableInfo FlatClearIcon icon = new FlatClearIcon(); Map> expected = expectedMap( + "clearIconScale", float.class, + "clearIconColor", Color.class, "clearIconHoverColor", Color.class, "clearIconPressedColor", Color.class @@ -1439,6 +1459,8 @@ public class TestFlatStyleableInfo private void flatSearchIcon( Map> expected ) { expectedMap( expected, + "searchIconScale", float.class, + "searchIconColor", Color.class, "searchIconHoverColor", Color.class, "searchIconPressedColor", Color.class @@ -1450,6 +1472,8 @@ public class TestFlatStyleableInfo FlatCapsLockIcon icon = new FlatCapsLockIcon(); Map> expected = expectedMap( + "capsLockIconScale", float.class, + "capsLockIconColor", Color.class ); @@ -1461,6 +1485,10 @@ public class TestFlatStyleableInfo FlatTabbedPaneCloseIcon icon = new FlatTabbedPaneCloseIcon(); Map> expected = expectedMap( + //TODO closeScale ? +// "scale", float.class, + "closeScale", float.class, + "closeSize", Dimension.class, "closeArc", int.class, "closeCrossPlainSize", float.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 c4f41848..c3b6d946 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 @@ -273,6 +273,8 @@ public class TestFlatStyleableValue //---- FlatHelpButtonIcon ---- + testFloat( c, ui, "help.scale" ); + testInteger( c, ui, "help.focusWidth" ); testColor( c, ui, "help.focusColor" ); testFloat( c, ui, "help.innerFocusWidth" ); @@ -569,12 +571,16 @@ public class TestFlatStyleableValue } private void menuItem_checkIcon( JComponent c, StyleableUI ui ) { + testFloat( c, ui, "icon.scale" ); + testColor( c, ui, "icon.checkmarkColor" ); testColor( c, ui, "icon.disabledCheckmarkColor" ); testColor( c, ui, "selectionForeground" ); } private void menuItem_arrowIcon( JComponent c, StyleableUI ui ) { + testFloat( c, ui, "icon.scale" ); + testString( c, ui, "icon.arrowType", "chevron" ); testColor( c, ui, "icon.arrowColor" ); testColor( c, ui, "icon.disabledArrowColor" ); @@ -603,6 +609,7 @@ public class TestFlatStyleableValue testBoolean( c, ui, "showRevealButton" ); // capsLockIcon + testFloat( c, ui, "capsLockIconScale" ); testColor( c, ui, "capsLockIconColor" ); // border @@ -694,6 +701,8 @@ public class TestFlatStyleableValue return; } + testFloat( b, ui, "icon.scale" ); + testFloat( b, ui, "icon.focusWidth" ); testColor( b, ui, "icon.focusColor" ); testFloat( b, ui, "icon.borderWidth" ); @@ -952,6 +961,7 @@ public class TestFlatStyleableValue testString( c, ui, "tabIconPlacement", "top" ); // FlatTabbedPaneCloseIcon + testFloat( c, ui, "closeScale" ); testDimension( c, ui, "closeSize" ); testInteger( c, ui, "closeArc" ); testFloat( c, ui, "closeCrossPlainSize" ); @@ -1383,6 +1393,8 @@ public class TestFlatStyleableValue } private void flatCheckBoxIcon( FlatCheckBoxIcon icon ) { + testValueFloat( icon, "scale" ); + testValueFloat( icon, "focusWidth" ); testValueColor( icon, "focusColor" ); testValueFloat( icon, "borderWidth" ); @@ -1461,6 +1473,8 @@ public class TestFlatStyleableValue } private void flatCheckBoxMenuItemIcon( FlatCheckBoxMenuItemIcon icon ) { + testValueFloat( icon, "scale" ); + testValueColor( icon, "checkmarkColor" ); testValueColor( icon, "disabledCheckmarkColor" ); testValueColor( icon, "selectionForeground" ); @@ -1471,6 +1485,8 @@ public class TestFlatStyleableValue FlatMenuArrowIcon icon = new FlatMenuArrowIcon(); expectedStyleableInfos = icon.getStyleableInfos(); + testValueFloat( icon, "scale" ); + testValueString( icon, "arrowType", "chevron" ); testValueColor( icon, "arrowColor" ); testValueColor( icon, "disabledArrowColor" ); @@ -1482,6 +1498,8 @@ public class TestFlatStyleableValue FlatHelpButtonIcon icon = new FlatHelpButtonIcon(); expectedStyleableInfos = icon.getStyleableInfos(); + testValueFloat( icon, "scale" ); + testValueInteger( icon, "focusWidth" ); testValueColor( icon, "focusColor" ); testValueFloat( icon, "innerFocusWidth" ); @@ -1505,6 +1523,8 @@ public class TestFlatStyleableValue FlatClearIcon icon = new FlatClearIcon(); expectedStyleableInfos = icon.getStyleableInfos(); + testValueFloat( icon, "clearIconScale" ); + testValueColor( icon, "clearIconColor" ); testValueColor( icon, "clearIconHoverColor" ); testValueColor( icon, "clearIconPressedColor" ); @@ -1527,6 +1547,8 @@ public class TestFlatStyleableValue } private void flatSearchIcon( FlatSearchIcon icon ) { + testValueFloat( icon, "searchIconScale" ); + testValueColor( icon, "searchIconColor" ); testValueColor( icon, "searchIconHoverColor" ); testValueColor( icon, "searchIconPressedColor" ); @@ -1537,6 +1559,7 @@ public class TestFlatStyleableValue FlatCapsLockIcon icon = new FlatCapsLockIcon(); expectedStyleableInfos = icon.getStyleableInfos(); + testValueFloat( icon, "capsLockIconScale" ); testValueColor( icon, "capsLockIconColor" ); } @@ -1545,6 +1568,8 @@ public class TestFlatStyleableValue FlatTabbedPaneCloseIcon icon = new FlatTabbedPaneCloseIcon(); expectedStyleableInfos = icon.getStyleableInfos(); + testValueFloat( icon, "closeScale" ); + testValueDimension( icon, "closeSize" ); testValueInteger( icon, "closeArc" ); testValueFloat( icon, "closeCrossPlainSize" ); diff --git a/flatlaf-testing/dumps/styleable-infos.txt b/flatlaf-testing/dumps/styleable-infos.txt index 3383b193..21d743ee 100644 --- a/flatlaf-testing/dumps/styleable-infos.txt +++ b/flatlaf-testing/dumps/styleable-infos.txt @@ -50,6 +50,7 @@ help.hoverBorderColor java.awt.Color help.innerFocusWidth float help.pressedBackground java.awt.Color help.questionMarkColor java.awt.Color +help.scale float hoverBackground java.awt.Color hoverBorderColor java.awt.Color hoverForeground java.awt.Color @@ -138,6 +139,7 @@ icon.pressedIndeterminateBorderColor java.awt.Color icon.pressedIndeterminateCheckmarkColor java.awt.Color icon.pressedSelectedBackground java.awt.Color icon.pressedSelectedBorderColor java.awt.Color +icon.scale float icon.selectedBackground java.awt.Color icon.selectedBorderColor java.awt.Color icon.selectedBorderWidth float @@ -154,6 +156,7 @@ checkMargins java.awt.Insets disabledForeground java.awt.Color icon.checkmarkColor java.awt.Color icon.disabledCheckmarkColor java.awt.Color +icon.scale float minimumIconSize java.awt.Dimension minimumWidth int selectionArc int @@ -304,6 +307,7 @@ disabledForeground java.awt.Color icon.arrowColor java.awt.Color icon.arrowType java.lang.String icon.disabledArrowColor java.awt.Color +icon.scale float minimumIconSize java.awt.Dimension minimumWidth int selectionArc int @@ -369,6 +373,7 @@ arc int borderColor java.awt.Color borderWidth float capsLockIconColor java.awt.Color +capsLockIconScale float custom.borderColor java.awt.Color disabledBackground java.awt.Color disabledBorderColor java.awt.Color @@ -473,6 +478,7 @@ icon.pressedIndeterminateBorderColor java.awt.Color icon.pressedIndeterminateCheckmarkColor java.awt.Color icon.pressedSelectedBackground java.awt.Color icon.pressedSelectedBorderColor java.awt.Color +icon.scale float icon.selectedBackground java.awt.Color icon.selectedBorderColor java.awt.Color icon.selectedBorderWidth float @@ -489,6 +495,7 @@ checkMargins java.awt.Insets disabledForeground java.awt.Color icon.checkmarkColor java.awt.Color icon.disabledCheckmarkColor java.awt.Color +icon.scale float minimumIconSize java.awt.Dimension minimumWidth int selectionArc int @@ -656,6 +663,7 @@ closeHoverBackground java.awt.Color closeHoverForeground java.awt.Color closePressedBackground java.awt.Color closePressedForeground java.awt.Color +closeScale float closeSize java.awt.Dimension contentAreaColor java.awt.Color contentSeparatorHeight int @@ -1076,6 +1084,7 @@ inactiveDropShadowOpacity float #---- FlatCapsLockIcon ---- capsLockIconColor java.awt.Color +capsLockIconScale float #---- FlatCheckBoxIcon ---- @@ -1125,6 +1134,7 @@ pressedIndeterminateBorderColor java.awt.Color pressedIndeterminateCheckmarkColor java.awt.Color pressedSelectedBackground java.awt.Color pressedSelectedBorderColor java.awt.Color +scale float selectedBackground java.awt.Color selectedBorderColor java.awt.Color selectedBorderWidth float @@ -1134,6 +1144,7 @@ selectedBorderWidth float checkmarkColor java.awt.Color disabledCheckmarkColor java.awt.Color +scale float selectionForeground java.awt.Color @@ -1142,6 +1153,7 @@ selectionForeground java.awt.Color clearIconColor java.awt.Color clearIconHoverColor java.awt.Color clearIconPressedColor java.awt.Color +clearIconScale float #---- FlatHelpButtonIcon ---- @@ -1161,6 +1173,7 @@ hoverBorderColor java.awt.Color innerFocusWidth float pressedBackground java.awt.Color questionMarkColor java.awt.Color +scale float #---- FlatMenuArrowIcon ---- @@ -1168,6 +1181,7 @@ questionMarkColor java.awt.Color arrowColor java.awt.Color arrowType java.lang.String disabledArrowColor java.awt.Color +scale float selectionForeground java.awt.Color @@ -1219,6 +1233,7 @@ pressedIndeterminateBorderColor java.awt.Color pressedIndeterminateCheckmarkColor java.awt.Color pressedSelectedBackground java.awt.Color pressedSelectedBorderColor java.awt.Color +scale float selectedBackground java.awt.Color selectedBorderColor java.awt.Color selectedBorderWidth float @@ -1228,6 +1243,7 @@ selectedBorderWidth float checkmarkColor java.awt.Color disabledCheckmarkColor java.awt.Color +scale float selectionForeground java.awt.Color @@ -1236,6 +1252,7 @@ selectionForeground java.awt.Color searchIconColor java.awt.Color searchIconHoverColor java.awt.Color searchIconPressedColor java.awt.Color +searchIconScale float #---- FlatSearchWithHistoryIcon ---- @@ -1243,6 +1260,7 @@ searchIconPressedColor java.awt.Color searchIconColor java.awt.Color searchIconHoverColor java.awt.Color searchIconPressedColor java.awt.Color +searchIconScale float #---- FlatTabbedPaneCloseIcon ---- @@ -1257,6 +1275,7 @@ closeHoverBackground java.awt.Color closeHoverForeground java.awt.Color closePressedBackground java.awt.Color closePressedForeground java.awt.Color +closeScale float closeSize java.awt.Dimension diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.java index 76edcb71..a87491c5 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.java @@ -17,8 +17,6 @@ package com.formdev.flatlaf.themeeditor; import java.awt.Component; -import java.awt.Graphics; -import java.awt.Graphics2D; import java.beans.Beans; import java.util.function.Predicate; import javax.swing.*; @@ -797,31 +795,8 @@ class FlatThemePreviewSwitches extends FlatCheckBoxIcon { @Override - public void paintIcon( Component c, Graphics g, int x, int y ) { - Graphics2D g2 = (Graphics2D) g.create(); - try { - g2.translate( x, y ); - g2.scale( zoom, zoom ); - - super.paintIcon( c, g2, 0, 0 ); - } finally { - g2.dispose(); - } - } - - @Override - public int getIconWidth() { - return Math.round( super.getIconWidth() * zoom ); - } - - @Override - public int getIconHeight() { - return Math.round( super.getIconHeight() * zoom ); - } - - @Override - public float getFocusWidth() { - return super.getFocusWidth() * zoom; + public float getScale() { + return zoom; } } @@ -831,31 +806,8 @@ class FlatThemePreviewSwitches extends FlatRadioButtonIcon { @Override - public void paintIcon( Component c, Graphics g, int x, int y ) { - Graphics2D g2 = (Graphics2D) g.create(); - try { - g2.translate( x, y ); - g2.scale( zoom, zoom ); - - super.paintIcon( c, g2, 0, 0 ); - } finally { - g2.dispose(); - } - } - - @Override - public int getIconWidth() { - return Math.round( super.getIconWidth() * zoom ); - } - - @Override - public int getIconHeight() { - return Math.round( super.getIconHeight() * zoom ); - } - - @Override - public float getFocusWidth() { - return super.getFocusWidth() * zoom; + public float getScale() { + return zoom; } } }