mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-13 23:37:13 -06:00
Theme Editor:
- support lazy values and icon colors in overlay color preview - support icon colors in preview - support icon colors in reference auto-completion - support changing preview theme when editing FlatLaf.properties via adding `@baseTheme = dark|darcula|intellij`
This commit is contained in:
@@ -24,9 +24,11 @@ import java.awt.Point;
|
|||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JLayer;
|
import javax.swing.JLayer;
|
||||||
|
import javax.swing.UIDefaults.LazyValue;
|
||||||
import javax.swing.plaf.LayerUI;
|
import javax.swing.plaf.LayerUI;
|
||||||
import javax.swing.text.BadLocationException;
|
import javax.swing.text.BadLocationException;
|
||||||
import org.fife.ui.rsyntaxtextarea.Token;
|
import org.fife.ui.rsyntaxtextarea.Token;
|
||||||
|
import com.formdev.flatlaf.FlatLaf;
|
||||||
import com.formdev.flatlaf.UIDefaultsLoaderAccessor;
|
import com.formdev.flatlaf.UIDefaultsLoaderAccessor;
|
||||||
import com.formdev.flatlaf.ui.FlatUIUtils;
|
import com.formdev.flatlaf.ui.FlatUIUtils;
|
||||||
import com.formdev.flatlaf.util.HSLColor;
|
import com.formdev.flatlaf.util.HSLColor;
|
||||||
@@ -157,6 +159,20 @@ class FlatThemeEditorOverlay
|
|||||||
|
|
||||||
private Color getColorInLine( FlatSyntaxTextArea textArea, int line ) {
|
private Color getColorInLine( FlatSyntaxTextArea textArea, int line ) {
|
||||||
Object value = textArea.propertiesSupport.getParsedValueAtLine( line );
|
Object value = textArea.propertiesSupport.getParsedValueAtLine( line );
|
||||||
|
|
||||||
|
// resolve lazy value
|
||||||
|
if( value instanceof LazyValue ) {
|
||||||
|
Object[] pValue = new Object[] { value };
|
||||||
|
FlatLaf.runWithUIDefaultsGetter( key -> {
|
||||||
|
return (key instanceof String)
|
||||||
|
? textArea.propertiesSupport.getParsedProperty( (String) key )
|
||||||
|
: null;
|
||||||
|
}, () -> {
|
||||||
|
pValue[0] = ((LazyValue)pValue[0]).createValue( null );
|
||||||
|
} );
|
||||||
|
value = pValue[0];
|
||||||
|
}
|
||||||
|
|
||||||
if( value instanceof Color )
|
if( value instanceof Color )
|
||||||
return (Color) value;
|
return (Color) value;
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import java.util.Properties;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import com.formdev.flatlaf.FlatDarculaLaf;
|
import com.formdev.flatlaf.FlatDarculaLaf;
|
||||||
import com.formdev.flatlaf.FlatDarkLaf;
|
import com.formdev.flatlaf.FlatDarkLaf;
|
||||||
|
import com.formdev.flatlaf.FlatIconColors;
|
||||||
import com.formdev.flatlaf.FlatIntelliJLaf;
|
import com.formdev.flatlaf.FlatIntelliJLaf;
|
||||||
import com.formdev.flatlaf.FlatLaf;
|
import com.formdev.flatlaf.FlatLaf;
|
||||||
import com.formdev.flatlaf.FlatLightLaf;
|
import com.formdev.flatlaf.FlatLightLaf;
|
||||||
@@ -111,10 +112,6 @@ class FlatThemePropertiesBaseManager
|
|||||||
|
|
||||||
// core themes
|
// core themes
|
||||||
switch( name ) {
|
switch( name ) {
|
||||||
case "FlatLaf":
|
|
||||||
result.add( "FlatLightLaf" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "FlatLightLaf":
|
case "FlatLightLaf":
|
||||||
case "FlatDarkLaf":
|
case "FlatDarkLaf":
|
||||||
result.add( "FlatLaf" );
|
result.add( "FlatLaf" );
|
||||||
@@ -160,6 +157,10 @@ class FlatThemePropertiesBaseManager
|
|||||||
result.add( "FlatLaf" );
|
result.add( "FlatLaf" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// exclude base properties if editing base properties
|
||||||
|
if( name.equals( "FlatLaf" ) )
|
||||||
|
result.remove( "FlatLaf" );
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -173,6 +174,7 @@ class FlatThemePropertiesBaseManager
|
|||||||
private final String name;
|
private final String name;
|
||||||
private final FlatThemePropertiesSupport propertiesSupport;
|
private final FlatThemePropertiesSupport propertiesSupport;
|
||||||
private final boolean isCoreTheme;
|
private final boolean isCoreTheme;
|
||||||
|
private final String coreBaseTheme;
|
||||||
|
|
||||||
private List<String> baseFiles;
|
private List<String> baseFiles;
|
||||||
private String lastBaseTheme;
|
private String lastBaseTheme;
|
||||||
@@ -181,10 +183,22 @@ class FlatThemePropertiesBaseManager
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
this.propertiesSupport = propertiesSupport;
|
this.propertiesSupport = propertiesSupport;
|
||||||
this.isCoreTheme = isCoreTheme;
|
this.isCoreTheme = isCoreTheme;
|
||||||
|
|
||||||
|
switch( name ) {
|
||||||
|
case "FlatLightLaf": coreBaseTheme = "light"; break;
|
||||||
|
case "FlatDarkLaf": coreBaseTheme = "dark"; break;
|
||||||
|
case "FlatIntelliJLaf": coreBaseTheme = "intellij"; break;
|
||||||
|
case "FlatDarculaLaf": coreBaseTheme = "darcula"; break;
|
||||||
|
default: coreBaseTheme = null; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getProperty( String key, String baseTheme ) {
|
public String getProperty( String key, String baseTheme ) {
|
||||||
|
// override base theme for core themes
|
||||||
|
if( coreBaseTheme != null )
|
||||||
|
baseTheme = coreBaseTheme;
|
||||||
|
|
||||||
updateBaseFiles( baseTheme );
|
updateBaseFiles( baseTheme );
|
||||||
|
|
||||||
// search in opened editors
|
// search in opened editors
|
||||||
@@ -209,6 +223,15 @@ class FlatThemePropertiesBaseManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// search in icon colors
|
||||||
|
if( key.startsWith( "Actions." ) || key.startsWith( "Objects." ) ) {
|
||||||
|
boolean dark = FlatThemePropertiesSupport.isDark( baseTheme );
|
||||||
|
for( FlatIconColors c : FlatIconColors.values() ) {
|
||||||
|
if( c.key.equals( key ) && (c.light == !dark || c.dark == dark) )
|
||||||
|
return String.format( "#%06x", c.rgb );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,6 +259,10 @@ class FlatThemePropertiesBaseManager
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addAllKeys( Set<String> allKeys, String baseTheme ) {
|
public void addAllKeys( Set<String> allKeys, String baseTheme ) {
|
||||||
|
// override base theme for core themes
|
||||||
|
if( coreBaseTheme != null )
|
||||||
|
baseTheme = coreBaseTheme;
|
||||||
|
|
||||||
updateBaseFiles( baseTheme );
|
updateBaseFiles( baseTheme );
|
||||||
|
|
||||||
// search in opened editors
|
// search in opened editors
|
||||||
@@ -257,6 +284,10 @@ class FlatThemePropertiesBaseManager
|
|||||||
for( String baseFile : baseFiles )
|
for( String baseFile : baseFiles )
|
||||||
copyKeys( coreThemes.get( baseFile ), allKeys );
|
copyKeys( coreThemes.get( baseFile ), allKeys );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// icon colors
|
||||||
|
for( FlatIconColors c : FlatIconColors.values() )
|
||||||
|
allKeys.add( c.key );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void copyKeys( Properties properties, Set<String> allKeys ) {
|
private void copyKeys( Properties properties, Set<String> allKeys ) {
|
||||||
|
|||||||
@@ -207,6 +207,10 @@ class FlatThemePropertiesSupport
|
|||||||
return allKeysCache;
|
return allKeysCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean isDark( String baseTheme ) {
|
||||||
|
return "dark".equals( baseTheme ) || "darcula".equals( baseTheme );
|
||||||
|
}
|
||||||
|
|
||||||
private String getBaseTheme() {
|
private String getBaseTheme() {
|
||||||
if( baseTheme == null )
|
if( baseTheme == null )
|
||||||
baseTheme = getProperties().getProperty( "@baseTheme", "light" );
|
baseTheme = getProperties().getProperty( "@baseTheme", "light" );
|
||||||
|
|||||||
Reference in New Issue
Block a user