From 87dd5a9ebb5f45401b7fd6c17fc7c881ba4c4514 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Thu, 13 Feb 2020 11:17:29 +0100 Subject: [PATCH] PasswordField: get echoChar from .properties files and no longer hard code it on macOS --- .../java/com/formdev/flatlaf/UIDefaultsLoader.java | 11 ++++++++++- .../com/formdev/flatlaf/ui/FlatPasswordFieldUI.java | 5 ----- .../resources/com/formdev/flatlaf/FlatLaf.properties | 1 + .../testing/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt | 2 +- .../testing/uidefaults/FlatLightLaf_1.8.0_202-mac.txt | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) 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 3316b876..d19e0966 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -221,7 +221,7 @@ class UIDefaultsLoader return resolveValue( properties, newValue ); } - private enum ValueType { UNKNOWN, STRING, INTEGER, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR, + private enum ValueType { UNKNOWN, STRING, CHARACTER, INTEGER, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR, SCALEDINTEGER, SCALEDFLOAT, SCALEDINSETS, SCALEDDIMENSION, INSTANCE, CLASS } static Object parseValue( String key, String value ) { @@ -285,6 +285,8 @@ class UIDefaultsLoader valueType = ValueType.DIMENSION; else if( key.endsWith( "Width" ) || key.endsWith( "Height" ) ) valueType = ValueType.INTEGER; + else if( key.endsWith( "Char" ) ) + valueType = ValueType.CHARACTER; else if( key.endsWith( "UI" ) ) valueType = ValueType.STRING; } @@ -292,6 +294,7 @@ class UIDefaultsLoader // parse value switch( valueType ) { case STRING: return value; + case CHARACTER: return parseCharacter( value ); case INTEGER: return parseInteger( value, true ); case FLOAT: return parseFloat( value, true ); case BORDER: return parseBorder( value, resolver, addonClassLoaders ); @@ -599,6 +602,12 @@ class UIDefaultsLoader return val; } + private static Character parseCharacter( String value ) { + if( value.length() != 1 ) + throw new IllegalArgumentException( "invalid character '" + value + "'" ); + return value.charAt( 0 ); + } + private static Integer parseInteger( String value, int min, int max ) { Integer integer = parseInteger( value, true ); if( integer.intValue() < min || integer.intValue() > max ) 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 d915aec1..76a04a62 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 @@ -29,7 +29,6 @@ import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicPasswordFieldUI; import javax.swing.text.Caret; import com.formdev.flatlaf.FlatClientProperties; -import com.formdev.flatlaf.util.SystemInfo; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JPasswordField}. @@ -78,10 +77,6 @@ public class FlatPasswordFieldUI protected void installDefaults() { super.installDefaults(); - // use other echoChar on Mac because the default is too large in SF font - if( SystemInfo.IS_MAC ) - LookAndFeel.installProperty( getComponent(), "echoChar", '\u2022' ); - String prefix = getPropertyPrefix(); focusWidth = UIManager.getInt( "Component.focusWidth" ); minimumWidth = UIManager.getInt( "Component.minimumWidth" ); 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 7dac36c8..f2d65cfb 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties @@ -297,6 +297,7 @@ PasswordField.border=com.formdev.flatlaf.ui.FlatBorder PasswordField.margin=@textComponentMargin PasswordField.background=@textComponentBackground PasswordField.placeholderForeground=@disabledText +PasswordField.echoChar=\u2022 #---- PopupMenu ---- diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt index fc225431..d9d1d6e8 100644 --- a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt @@ -1034,7 +1034,7 @@ PasswordField.capsLockIconColor #64000000 javax.swing.plaf.ColorUIResource [U PasswordField.caretBlinkRate 500 PasswordField.caretForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] PasswordField.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -PasswordField.echoChar '\u25cf' +PasswordField.echoChar '\u2022' PasswordField.focusInputMap [lazy] 66 javax.swing.plaf.InputMapUIResource [UI] alt pressed BACK_SPACE delete-previous-word alt pressed DELETE delete-next-word diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202-mac.txt b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202-mac.txt index aa7d85b7..072a74bd 100644 --- a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202-mac.txt +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202-mac.txt @@ -1036,7 +1036,7 @@ PasswordField.capsLockIconColor #64000000 javax.swing.plaf.ColorUIResource [U PasswordField.caretBlinkRate 500 PasswordField.caretForeground #000000 javax.swing.plaf.ColorUIResource [UI] PasswordField.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -PasswordField.echoChar '\u25cf' +PasswordField.echoChar '\u2022' PasswordField.focusInputMap [lazy] 66 javax.swing.plaf.InputMapUIResource [UI] alt pressed BACK_SPACE delete-previous-word alt pressed DELETE delete-next-word