- support references in color functions
- added test for using color functions in styling
This commit is contained in:
Karl Tauber
2021-09-06 22:48:39 +02:00
parent fe15758e59
commit 08ca2aa266
7 changed files with 99 additions and 12 deletions

View File

@@ -32,6 +32,7 @@ import java.beans.PropertyChangeListener;
import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
@@ -796,7 +797,8 @@ public abstract class FlatLaf
throws IllegalArgumentException
{
// parse value
Object val = UIDefaultsLoader.parseValue( key, value, valueType );
Object val = UIDefaultsLoader.parseValue( key, value, valueType, null,
v -> UIDefaultsLoader.resolveValueFromUIManager( v ), Collections.emptyList() );
// create actual value if lazy or active
if( val instanceof LazyValue )

View File

@@ -290,6 +290,25 @@ class UIDefaultsLoader
return resolveValue( newValue, propertiesGetter );
}
static String resolveValueFromUIManager( String value ) {
if( !value.startsWith( PROPERTY_PREFIX ) )
return value;
String key = value.substring( PROPERTY_PREFIX.length() );
Object newValue = UIManager.get( key );
if( newValue == null )
throw new IllegalArgumentException( "property '" + key + "' not found" );
// convert binary color to string
if( newValue instanceof Color ) {
Color color = (Color) newValue;
int alpha = color.getAlpha();
return String.format( (alpha != 255) ? "#%06x%02x" : "#%06x", color.getRGB() & 0xffffff, alpha );
}
throw new IllegalArgumentException( "property value type '" + newValue.getClass().getName() + "' not supported in references" );
}
enum ValueType { UNKNOWN, STRING, BOOLEAN, CHARACTER, INTEGER, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR,
SCALEDINTEGER, SCALEDFLOAT, SCALEDINSETS, SCALEDDIMENSION, INSTANCE, CLASS, GRAYFILTER, NULL, LAZY }

View File

@@ -191,6 +191,7 @@ public class FlatStylingSupport
}
private static Object parseValue( String key, String value ) {
// simple reference
if( value.startsWith( "$" ) )
return UIManager.get( value.substring( 1 ) );
@@ -199,6 +200,7 @@ public class FlatStylingSupport
if( key.startsWith( "[" ) )
key = key.substring( key.indexOf( ']' ) + 1 );
// parse string
return FlatLaf.parseDefaultsValue( key, value, null );
}