Demo: support using own FlatLaf themes (.properties files) that are located in working directory of Demo application

This commit is contained in:
Karl Tauber
2020-03-29 18:02:35 +02:00
parent 1bebfe9cf2
commit 5ed40cab1d
8 changed files with 159 additions and 32 deletions

View File

@@ -34,6 +34,7 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.ServiceLoader;
import java.util.function.Consumer;
import java.util.logging.Level;
@@ -278,9 +279,9 @@ public abstract class FlatLaf
// load defaults from properties
List<Class<?>> lafClassesForDefaultsLoading = getLafClassesForDefaultsLoading();
if( lafClassesForDefaultsLoading != null )
UIDefaultsLoader.loadDefaultsFromProperties( lafClassesForDefaultsLoading, addons, defaults );
UIDefaultsLoader.loadDefaultsFromProperties( lafClassesForDefaultsLoading, addons, getAdditionalDefaults(), defaults );
else
UIDefaultsLoader.loadDefaultsFromProperties( getClass(), addons, defaults );
UIDefaultsLoader.loadDefaultsFromProperties( getClass(), addons, getAdditionalDefaults(), defaults );
// use Aqua MenuBarUI if Mac screen menubar is enabled
if( SystemInfo.IS_MAC && Boolean.getBoolean( "apple.laf.useScreenMenuBar" ) )
@@ -307,7 +308,11 @@ public abstract class FlatLaf
void applyAdditionalDefaults( UIDefaults defaults ) {
}
List<Class<?>> getLafClassesForDefaultsLoading() {
protected List<Class<?>> getLafClassesForDefaultsLoading() {
return null;
}
protected Properties getAdditionalDefaults() {
return null;
}

View File

@@ -518,7 +518,7 @@ public class IntelliJTheme
}
@Override
ArrayList<Class<?>> getLafClassesForDefaultsLoading() {
protected ArrayList<Class<?>> getLafClassesForDefaultsLoading() {
ArrayList<Class<?>> lafClasses = new ArrayList<>();
lafClasses.add( FlatLaf.class );
lafClasses.add( theme.dark ? FlatDarkLaf.class : FlatLightLaf.class );

View File

@@ -69,7 +69,7 @@ class UIDefaultsLoader
private static final String GLOBAL_PREFIX = "*.";
static void loadDefaultsFromProperties( Class<?> lookAndFeelClass, List<FlatDefaultsAddon> addons,
UIDefaults defaults )
Properties additionalDefaults, UIDefaults defaults )
{
// determine classes in class hierarchy in reverse order
ArrayList<Class<?>> lafClasses = new ArrayList<>();
@@ -80,11 +80,11 @@ class UIDefaultsLoader
lafClasses.add( 0, lafClass );
}
loadDefaultsFromProperties( lafClasses, addons, defaults );
loadDefaultsFromProperties( lafClasses, addons, additionalDefaults, defaults );
}
static void loadDefaultsFromProperties( List<Class<?>> lafClasses, List<FlatDefaultsAddon> addons,
UIDefaults defaults )
Properties additionalDefaults, UIDefaults defaults )
{
try {
// load core properties files
@@ -115,6 +115,10 @@ class UIDefaultsLoader
addonClassLoaders.add( addonClassLoader );
}
// add additional defaults
if( additionalDefaults != null )
properties.putAll( additionalDefaults );
// collect all platform specific keys (but do not modify properties)
ArrayList<String> platformSpecificKeys = new ArrayList<>();
for( Object key : properties.keySet() ) {