diff --git a/CHANGELOG.md b/CHANGELOG.md index e4bd9dcc..473519b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ FlatLaf Change Log ## Unreleased +- TextComponent: Scale caret width on HiDPI screens when running on Java 8. - ProgressBar: If progress text is visible: - use smaller font - reduced height 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 e2b9e74f..93f5c8be 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -31,6 +31,7 @@ import java.util.Properties; import java.util.ServiceLoader; import java.util.function.Function; import javax.swing.UIDefaults; +import javax.swing.UIDefaults.ActiveValue; import javax.swing.UIDefaults.LazyValue; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.DimensionUIResource; @@ -39,9 +40,9 @@ import com.formdev.flatlaf.ui.FlatEmptyBorder; import com.formdev.flatlaf.ui.FlatLineBorder; import com.formdev.flatlaf.util.ColorFunctions; import com.formdev.flatlaf.util.DerivedColor; -import com.formdev.flatlaf.util.ScaledNumber; import com.formdev.flatlaf.util.StringUtils; import com.formdev.flatlaf.util.SystemInfo; +import com.formdev.flatlaf.util.UIScale; /** * Load UI defaults from properties files associated to Flat LaF classes and add to UI defaults. @@ -202,7 +203,7 @@ class UIDefaultsLoader return resolveValue( properties, newValue ); } - private enum ValueType { UNKNOWN, STRING, INTEGER, BORDER, ICON, INSETS, SIZE, COLOR, SCALEDNUMBER, INSTANCE, CLASS } + private enum ValueType { UNKNOWN, STRING, INTEGER, BORDER, ICON, INSETS, SIZE, COLOR, SCALEDINTEGER, INSTANCE, CLASS } static Object parseValue( String key, String value ) { return parseValue( key, value, v -> v, Collections.emptyList() ); @@ -266,7 +267,7 @@ class UIDefaultsLoader case INSETS: return parseInsets( value ); case SIZE: return parseSize( value ); case COLOR: return parseColorOrFunction( value, true ); - case SCALEDNUMBER: return parseScaledNumber( value ); + case SCALEDINTEGER: return parseScaledInteger( value ); case INSTANCE: return parseInstance( value, addonClassLoaders ); case CLASS: return parseClass( value, addonClassLoaders ); case UNKNOWN: @@ -506,11 +507,10 @@ class UIDefaultsLoader return null; } - private static ScaledNumber parseScaledNumber( String value ) { - try { - return new ScaledNumber( Integer.parseInt( value ) ); - } catch( NumberFormatException ex ) { - throw new NumberFormatException( "invalid integer '" + value + "'" ); - } + private static ActiveValue parseScaledInteger( String value ) { + int val = parseInteger( value, true ); + return (ActiveValue) t -> { + return UIScale.scale( val ); + }; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/ScaledNumber.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/ScaledNumber.java deleted file mode 100644 index 5156e921..00000000 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/ScaledNumber.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2019 FormDev Software GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.formdev.flatlaf.util; - -import static com.formdev.flatlaf.util.UIScale.scale; - -/** - * A number that scales its value. - * - * NOTE: - * Using ScaledNumber in UI defaults works only if the value is get with - * sun.swing.DefaultLookup.getInt(), which is used by some basic UI delegates, - * because this method uses "instanceof Number". - * UIManager.getInt() on the other hand uses "instanceof Integer" and does not work. - * - * @author Karl Tauber - */ -public class ScaledNumber - extends Number -{ - private final int value; - - public ScaledNumber( int value ) { - this.value = value; - } - - @Override - public int intValue() { - return scale( value ); - } - - @Override - public long longValue() { - return scale( value ); - } - - @Override - public float floatValue() { - return scale( (float) value ); - } - - @Override - public double doubleValue() { - return scale( (float) value ); - } - - @Override - public int hashCode() { - return Integer.hashCode( value ); - } - - @Override - public boolean equals( Object obj ) { - return (obj instanceof ScaledNumber) - ? (value == ((ScaledNumber)obj).value) - : false; - } - - @Override - public String toString() { - return Integer.toString( value ); - } -} 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 3a7a00d4..aed69497 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties @@ -99,6 +99,11 @@ Button.defaultButtonFollowsFocus=false Button.default.borderWidth=1 +#---- Caret ---- + +Caret.width={scaledInteger}1 + + #---- CheckBox ---- CheckBox.border=com.formdev.flatlaf.ui.FlatMarginBorder @@ -227,7 +232,7 @@ OptionPane.maxCharactersPerLine=80 OptionPane.iconMessageGap=16 OptionPane.messagePadding=3 OptionPane.buttonPadding=8 -OptionPane.buttonMinimumWidth={scaledNumber}72 +OptionPane.buttonMinimumWidth={scaledInteger}72 OptionPane.sameSizeButtons=true OptionPane.setButtonMargin=false OptionPane.buttonOrientation=4 @@ -333,8 +338,8 @@ SplitPane.dividerSize={integer}5 SplitPane.continuousLayout=true SplitPane.border=null SplitPane.centerOneTouchButtons=true -SplitPane.oneTouchButtonSize={scaledNumber}6 -SplitPane.oneTouchButtonOffset={scaledNumber}2 +SplitPane.oneTouchButtonSize={scaledInteger}6 +SplitPane.oneTouchButtonOffset={scaledInteger}2 SplitPaneDivider.border=null SplitPaneDivider.oneTouchArrowColor=@@ComboBox.buttonArrowColor