Skip to content

Commit

Permalink
IntelliJ Themes: fixed toggle button selected backgrounds (issue #86)
Browse files Browse the repository at this point in the history
  • Loading branch information
DevCharly committed Apr 22, 2020
1 parent dd06b55 commit 801a702
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 8 deletions.
4 changes: 2 additions & 2 deletions flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java
Original file line number Diff line number Diff line change
Expand Up @@ -282,9 +282,9 @@ public UIDefaults getDefaults() {
// load defaults from properties
List<Class<?>> lafClassesForDefaultsLoading = getLafClassesForDefaultsLoading();
if( lafClassesForDefaultsLoading != null )
UIDefaultsLoader.loadDefaultsFromProperties( lafClassesForDefaultsLoading, addons, getAdditionalDefaults(), defaults );
UIDefaultsLoader.loadDefaultsFromProperties( lafClassesForDefaultsLoading, addons, getAdditionalDefaults(), isDark(), defaults );
else
UIDefaultsLoader.loadDefaultsFromProperties( getClass(), addons, getAdditionalDefaults(), defaults );
UIDefaultsLoader.loadDefaultsFromProperties( getClass(), addons, getAdditionalDefaults(), isDark(), defaults );

// use Aqua MenuBarUI if Mac screen menubar is enabled
if( SystemInfo.IS_MAC && Boolean.getBoolean( "apple.laf.useScreenMenuBar" ) )
Expand Down
25 changes: 25 additions & 0 deletions flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,8 @@ private void applyProperties( UIDefaults defaults ) {
defaults.put( "Button.paintShadow", true );
defaults.put( "Button.shadowWidth", dark ? 2 : 1 );

Map<Object, Object> themeSpecificDefaults = removeThemeSpecificDefaults( defaults );

loadNamedColors( defaults );

// convert Json "ui" structure to UI defaults
Expand Down Expand Up @@ -191,6 +193,29 @@ private void applyProperties( UIDefaults defaults ) {
defaults.put( "ToggleButton.endBackground", defaults.get( "Button.endBackground" ) );
if( !uiKeys.contains( "ToggleButton.foreground" ) && uiKeys.contains( "Button.foreground" ) )
defaults.put( "ToggleButton.foreground", defaults.get( "Button.foreground" ) );

// apply theme specific UI defaults at the end to allow overwriting
defaults.putAll( themeSpecificDefaults );
}

private Map<Object, Object> removeThemeSpecificDefaults( UIDefaults defaults ) {
// search for theme specific UI defaults keys
ArrayList<String> themeSpecificKeys = new ArrayList<>();
for( Object key : defaults.keySet() ) {
if( key instanceof String && ((String)key).startsWith( "[" ) )
themeSpecificKeys.add( (String) key );
}

// remove theme specific UI defaults and remember only those for current theme
Map<Object, Object> themeSpecificDefaults = new HashMap<>();
String currentThemePrefix = '[' + name.replace( ' ', '_' ) + ']';
for( String key : themeSpecificKeys ) {
Object value = defaults.remove( key );
if( key.startsWith( currentThemePrefix ) )
themeSpecificDefaults.put( key.substring( currentThemePrefix.length() ), value );
}

return themeSpecificDefaults;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class UIDefaultsLoader
private static final String GLOBAL_PREFIX = "*.";

static void loadDefaultsFromProperties( Class<?> lookAndFeelClass, List<FlatDefaultsAddon> addons,
Properties additionalDefaults, UIDefaults defaults )
Properties additionalDefaults, boolean dark, UIDefaults defaults )
{
// determine classes in class hierarchy in reverse order
ArrayList<Class<?>> lafClasses = new ArrayList<>();
Expand All @@ -80,11 +80,11 @@ static void loadDefaultsFromProperties( Class<?> lookAndFeelClass, List<FlatDefa
lafClasses.add( 0, lafClass );
}

loadDefaultsFromProperties( lafClasses, addons, additionalDefaults, defaults );
loadDefaultsFromProperties( lafClasses, addons, additionalDefaults, dark, defaults );
}

static void loadDefaultsFromProperties( List<Class<?>> lafClasses, List<FlatDefaultsAddon> addons,
Properties additionalDefaults, UIDefaults defaults )
Properties additionalDefaults, boolean dark, UIDefaults defaults )
{
try {
// load core properties files
Expand Down Expand Up @@ -121,14 +121,28 @@ static void loadDefaultsFromProperties( List<Class<?>> lafClasses, List<FlatDefa

// collect all platform specific keys (but do not modify properties)
ArrayList<String> platformSpecificKeys = new ArrayList<>();
for( Object key : properties.keySet() ) {
if( ((String)key).startsWith( "[" ) )
platformSpecificKeys.add( (String) key );
for( Object okey : properties.keySet() ) {
String key = (String) okey;
if( key.startsWith( "[" ) &&
(key.startsWith( "[win]" ) ||
key.startsWith( "[mac]" ) ||
key.startsWith( "[linux]" ) ||
key.startsWith( "[light]" ) ||
key.startsWith( "[dark]" )) )
platformSpecificKeys.add( key );
}

// remove platform specific properties and re-add only properties
// for current platform, but with platform prefix removed
if( !platformSpecificKeys.isEmpty() ) {
// handle light/dark specific properties
String lightOrDarkPrefix = dark ? "[dark]" : "[light]";
for( String key : platformSpecificKeys ) {
if( key.startsWith( lightOrDarkPrefix ) )
properties.put( key.substring( lightOrDarkPrefix.length() ), properties.remove( key ) );
}

// handle platform specific properties
String platformPrefix =
SystemInfo.IS_WINDOWS ? "[win]" :
SystemInfo.IS_MAC ? "[mac]" :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,26 @@ HelpButton.hoverBorderColor=null

ToggleButton.startBackground=$ToggleButton.background
ToggleButton.endBackground=$ToggleButton.background
[dark]ToggleButton.selectedBackground=lighten($ToggleButton.background,15%,derived autoInverse)
[dark]ToggleButton.disabledSelectedBackground=lighten($ToggleButton.background,5%,derived autoInverse)


#---- theme specific ----

[Gruvbox_Dark_Hard]ToggleButton.selectedBackground=$ToggleButton.selectedBackground
[Gruvbox_Dark_Hard]ToggleButton.toolbar.selectedBackground=$ToggleButton.toolbar.selectedBackground

[Gruvbox_Dark_Medium]ToggleButton.selectedBackground=$ToggleButton.selectedBackground
[Gruvbox_Dark_Medium]ToggleButton.toolbar.selectedBackground=$ToggleButton.toolbar.selectedBackground

[Gruvbox_Dark_Soft]ToggleButton.selectedBackground=$ToggleButton.selectedBackground
[Gruvbox_Dark_Soft]ToggleButton.toolbar.selectedBackground=$ToggleButton.toolbar.selectedBackground

[Hiberbee_Dark]ToggleButton.selectedBackground=$ToggleButton.selectedBackground
[Hiberbee_Dark]ToggleButton.selectedBackground=$ToggleButton.selectedBackground
[Hiberbee_Dark]ToggleButton.toolbar.selectedBackground=$ToggleButton.toolbar.selectedBackground

[High_contrast]ToggleButton.selectedBackground=#fff
[High_contrast]ToggleButton.selectedForeground=#000
[High_contrast]ToggleButton.disabledSelectedBackground=#444
[High_contrast]ToggleButton.toolbar.selectedBackground=#fff

0 comments on commit 801a702

Please sign in to comment.