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 bbfcbaf2..1b6d1ab3 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -608,7 +608,9 @@ class UIDefaultsLoader case "changeSaturation":return parseColorChange( 1, params, resolver, reportError ); case "changeLightness": return parseColorChange( 2, params, resolver, reportError ); case "changeAlpha": return parseColorChange( 3, params, resolver, reportError ); - case "mix": return parseColorMix( params, resolver, reportError ); + case "mix": return parseColorMix( null, params, resolver, reportError ); + case "tint": return parseColorMix( "#fff", params, resolver, reportError ); + case "shade": return parseColorMix( "#000", params, resolver, reportError ); } } finally { parseColorDepth--; @@ -789,19 +791,23 @@ class UIDefaultsLoader } /** - * Syntax: mix(color1,color2[,weight]) + * Syntax: mix(color1,color2[,weight]) or + * tint(color[,weight]) or + * shade(color[,weight]) * - color1: a color (e.g. #f00) or a color function * - color2: a color (e.g. #f00) or a color function * - weight: the weight (in range 0-100%) to mix the two colors * larger weight uses more of first color, smaller weight more of second color */ - private static Object parseColorMix( List params, Function resolver, boolean reportError ) { - String color1Str = params.get( 0 ); - String color2Str = params.get( 1 ); + private static Object parseColorMix( String color1Str, List params, Function resolver, boolean reportError ) { + int i = 0; + if( color1Str == null ) + color1Str = params.get( i++ ); + String color2Str = params.get( i++ ); int weight = 50; - if( params.size() > 2 ) - weight = parsePercentage( params.get( 2 ) ); + if( params.size() > i ) + weight = parsePercentage( params.get( i++ ) ); // parse second color String resolvedColor2Str = resolver.apply( color2Str ); diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java index 25a4793d..cc759bb9 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java @@ -371,10 +371,17 @@ class FlatCompletionProvider addFunction( "changeLightness", hslChangeParams ); addFunction( "changeAlpha", hslChangeParams ); + String weightParamDesc = "(optional) 0-100%, default is 50%"; addFunction( "mix", "color1", colorParamDesc, "color2", colorParamDesc, - "weight", "(optional) 0-100%, default is 50%" ); + "weight", weightParamDesc ); + addFunction( "tint", + "color", colorParamDesc, + "weight", weightParamDesc ); + addFunction( "shade", + "color", colorParamDesc, + "weight", weightParamDesc ); } private void addFunction( String name, String... paramNamesAndDescs ) { diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java index 895d2dac..9ad9ab87 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java @@ -69,6 +69,8 @@ public class FlatThemeTokenMaker tokenMap.put( "changeLightness", TOKEN_FUNCTION ); tokenMap.put( "changeAlpha", TOKEN_FUNCTION ); tokenMap.put( "mix", TOKEN_FUNCTION ); + tokenMap.put( "tint", TOKEN_FUNCTION ); + tokenMap.put( "shade", TOKEN_FUNCTION ); tokenMap.put( "lazy", TOKEN_FUNCTION ); // function options diff --git a/flatlaf-theme-editor/theme-editor-test.properties b/flatlaf-theme-editor/theme-editor-test.properties index 48ffbb82..66a11c82 100644 --- a/flatlaf-theme-editor/theme-editor-test.properties +++ b/flatlaf-theme-editor/theme-editor-test.properties @@ -62,3 +62,11 @@ Prop.colorFunc33 = mix(#f00,#0f0,75%) Prop.colorFunc34 = mix(#f00,#0f0,90%) Prop.colorFunc35 = mix($Prop.color1,$Prop.color2) Prop.colorFunc36 = mix($Prop.colorFunc20,$Prop.colorFunc30) + +Prop.colorFunc40 = tint(#f0f,25%) +Prop.colorFunc41 = tint(#f0f) +Prop.colorFunc42 = tint(#f0f,75%) + +Prop.colorFunc45 = shade(#f0f,25%) +Prop.colorFunc46 = shade(#f0f) +Prop.colorFunc47 = shade(#f0f,75%)