From 32dce16363e30f4236fbde8827b9f6e9b481b14d Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Wed, 18 Jan 2023 23:26:34 +0100 Subject: [PATCH] Styling: fixed resolving of UI variables in styles that use other variables --- CHANGELOG.md | 5 +++-- .../com/formdev/flatlaf/UIDefaultsLoader.java | 2 +- .../com/formdev/flatlaf/ui/TestFlatStyling.java | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd28be53..df484e95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,8 @@ FlatLaf Change Log #### New features and improvements -- Fonts: Added **Roboto - Mono** (https://fonts.google.com/specimen/Roboto+Mono). (PR #639, issue #638) +- Fonts: Added **Roboto Mono** (https://fonts.google.com/specimen/Roboto+Mono). + (PR #639, issue #638) #### Fixed bugs @@ -20,6 +20,7 @@ FlatLaf Change Log #628) - Avoid that accent color affect some colors in some IntelliJ themes. (issue #625) +- Styling: Fixed resolving of UI variables in styles that use other variables. ## 3.0 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 06c0e726..7ce8a2e1 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -334,7 +334,7 @@ class UIDefaultsLoader if( newValue == null ) throw new IllegalArgumentException( "variable '" + value + "' not found" ); - return newValue; + return resolveValueFromUIManager( newValue ); } if( !value.startsWith( PROPERTY_PREFIX ) ) diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java index a224ad3c..f3c023f2 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java @@ -29,6 +29,7 @@ import javax.swing.table.JTableHeader; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.icons.*; import com.formdev.flatlaf.util.ColorFunctions; @@ -39,12 +40,20 @@ public class TestFlatStyling { @BeforeAll static void setup() { + HashMap globalExtraDefaults = new HashMap<>(); + globalExtraDefaults.put( "@var1", "#f00" ); + globalExtraDefaults.put( "@var2", "@var1" ); + globalExtraDefaults.put( "var2Resolved", "@var2" ); + FlatLaf.setGlobalExtraDefaults( globalExtraDefaults ); + TestUtils.setup( false ); } @AfterAll static void cleanup() { TestUtils.cleanup(); + + FlatLaf.setGlobalExtraDefaults( null ); } @Test @@ -171,6 +180,13 @@ public class TestFlatStyling "saturate(darken(@background,20%),10%)" ); } + @Test + void parseRecursiveVariables() { + Color background = UIManager.getColor( "var2Resolved" ); + + testColorStyle( background.getRGB(), "@var2" ); + } + private void testColorStyle( int expectedRGB, String style ) { testStyle( "background", new Color( expectedRGB, (expectedRGB & 0xff000000) != 0 ), style ); }