diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java index a1901142..fc79c8cf 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -212,7 +212,7 @@ class UIDefaultsLoader return resolveValue( properties, newValue ); } - private enum ValueType { UNKNOWN, STRING, INTEGER, BORDER, ICON, INSETS, DIMENSION, COLOR, SCALEDINTEGER, INSTANCE, CLASS } + private enum ValueType { UNKNOWN, STRING, INTEGER, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR, SCALEDINTEGER, INSTANCE, CLASS } static Object parseValue( String key, String value ) { return parseValue( key, value, v -> v, Collections.emptyList() ); @@ -242,7 +242,10 @@ class UIDefaultsLoader // check whether value type is specified in the value if( value.startsWith( "#" ) ) valueType = ValueType.COLOR; - else if( value.startsWith( TYPE_PREFIX ) ) { + else if( value.startsWith( "\"" ) && value.endsWith( "\"" ) ) { + valueType = ValueType.STRING; + value = value.substring( 1, value.length() - 1 ); + } else if( value.startsWith( TYPE_PREFIX ) ) { int end = value.indexOf( TYPE_PREFIX_END ); if( end != -1 ) { try { @@ -280,6 +283,7 @@ class UIDefaultsLoader switch( valueType ) { case STRING: return value; case INTEGER: return parseInteger( value, true ); + case FLOAT: return parseFloat( value, true ); case BORDER: return parseBorder( value, resolver, addonClassLoaders ); case ICON: return parseInstance( value, addonClassLoaders ); case INSETS: return parseInsets( value ); @@ -300,6 +304,11 @@ class UIDefaultsLoader if( integer != null ) return integer; + // float + Float f = parseFloat( value, false ); + if( f != null ) + return f; + // string return value; } @@ -594,6 +603,16 @@ class UIDefaultsLoader return null; } + private static Float parseFloat( String value, boolean reportError ) { + try { + return Float.parseFloat( value ); + } catch( NumberFormatException ex ) { + if( reportError ) + throw new NumberFormatException( "invalid float '" + value + "'" ); + } + return null; + } + private static ActiveValue parseScaledInteger( String value ) { int val = parseInteger( value, true ); return (ActiveValue) t -> { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java index 1449eb2a..6d489d6e 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java @@ -48,7 +48,7 @@ import javax.swing.text.JTextComponent; * {@link FlatUIUtils#paintParentBackground} to paint the empty space correctly. * * @uiDefault Component.focusWidth int - * @uiDefault Component.innerFocusWidth int + * @uiDefault Component.innerFocusWidth int or float * @uiDefault Component.focusColor Color * @uiDefault Component.borderColor Color * @uiDefault Component.disabledBorderColor Color @@ -60,7 +60,7 @@ public class FlatBorder extends BasicBorders.MarginBorder { protected final int focusWidth = UIManager.getInt( "Component.focusWidth" ); - protected final int innerFocusWidth = UIManager.getInt( "Component.innerFocusWidth" ); + protected final float innerFocusWidth = FlatUIUtils.getUIFloat( "Component.innerFocusWidth", 0 ); protected final Color focusColor = UIManager.getColor( "Component.focusColor" ); protected final Color borderColor = UIManager.getColor( "Component.borderColor" ); protected final Color disabledBorderColor = UIManager.getColor( "Component.disabledBorderColor" ); @@ -80,7 +80,7 @@ public class FlatBorder if( isFocused( c ) ) { g2.setColor( getFocusColor( c ) ); FlatUIUtils.paintComponentOuterBorder( g2, x, y, width, height, focusWidth, - getLineWidth() + scale( (float) innerFocusWidth ), arc ); + getLineWidth() + scale( innerFocusWidth ), arc ); } g2.setPaint( getBorderColor( c ) ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java index 386cac0a..13f8d2d3 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java @@ -102,6 +102,11 @@ public class FlatUIUtils return (value instanceof Integer) ? (Integer) value : defaultValue; } + public static float getUIFloat( String key, float defaultValue ) { + Object value = UIManager.get( key ); + return (value instanceof Number) ? ((Number)value).floatValue() : defaultValue; + } + public static Color nonUIResource( Color c ) { return (c instanceof ColorUIResource) ? new Color( c.getRGB(), true ) : c; } diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties index c4f72247..954275db 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties @@ -137,7 +137,7 @@ ComboBox.padding=2,6,2,6 #---- Component ---- Component.focusWidth=0 -Component.innerFocusWidth=0 +Component.innerFocusWidth={float}0.5 Component.arc=5 Component.minimumWidth=64 Component.arrowType=chevron