mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 06:27:13 -06:00
Linux: enable text anti-aliasing if no Gnome or KDE Desktop properties are available (issue #218)
This commit is contained in:
@@ -21,6 +21,8 @@ FlatLaf Change Log
|
|||||||
- TableHeader: Moved table header column border painting from
|
- TableHeader: Moved table header column border painting from
|
||||||
`FlatTableHeaderUI` to new border `FlatTableHeaderBorder` to improve
|
`FlatTableHeaderUI` to new border `FlatTableHeaderBorder` to improve
|
||||||
compatibility with custom table header implementations. (issue #228)
|
compatibility with custom table header implementations. (issue #228)
|
||||||
|
- Linux: Enable text anti-aliasing if no Gnome or KDE Desktop properties are
|
||||||
|
available. (issue #218)
|
||||||
- IntelliJ Themes: Added "Material Theme UI Lite / GitHub Dark" theme.
|
- IntelliJ Themes: Added "Material Theme UI Lite / GitHub Dark" theme.
|
||||||
- JIDE Common Layer: Improved support for `JideTabbedPane`. (PR #306)
|
- JIDE Common Layer: Improved support for `JideTabbedPane`. (PR #306)
|
||||||
- Extras: `FlatSVGIcon` improvements:
|
- Extras: `FlatSVGIcon` improvements:
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import java.beans.PropertyChangeListener;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
@@ -561,6 +562,8 @@ public abstract class FlatLaf
|
|||||||
defaults.put( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
|
defaults.put( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
|
||||||
} else if( SystemInfo.isJava_9_orLater ) {
|
} else if( SystemInfo.isJava_9_orLater ) {
|
||||||
Object desktopHints = Toolkit.getDefaultToolkit().getDesktopProperty( DESKTOPFONTHINTS );
|
Object desktopHints = Toolkit.getDefaultToolkit().getDesktopProperty( DESKTOPFONTHINTS );
|
||||||
|
if( desktopHints == null )
|
||||||
|
desktopHints = fallbackAATextInfo();
|
||||||
if( desktopHints instanceof Map ) {
|
if( desktopHints instanceof Map ) {
|
||||||
@SuppressWarnings( "unchecked" )
|
@SuppressWarnings( "unchecked" )
|
||||||
Map<Object, Object> hints = (Map<Object, Object>) desktopHints;
|
Map<Object, Object> hints = (Map<Object, Object>) desktopHints;
|
||||||
@@ -583,6 +586,8 @@ public abstract class FlatLaf
|
|||||||
Object value = Class.forName( "sun.swing.SwingUtilities2$AATextInfo" )
|
Object value = Class.forName( "sun.swing.SwingUtilities2$AATextInfo" )
|
||||||
.getMethod( "getAATextInfo", boolean.class )
|
.getMethod( "getAATextInfo", boolean.class )
|
||||||
.invoke( null, true );
|
.invoke( null, true );
|
||||||
|
if( value == null )
|
||||||
|
value = fallbackAATextInfo();
|
||||||
defaults.put( key, value );
|
defaults.put( key, value );
|
||||||
} catch( Exception ex ) {
|
} catch( Exception ex ) {
|
||||||
LoggingFacade.INSTANCE.logSevere( null, ex );
|
LoggingFacade.INSTANCE.logSevere( null, ex );
|
||||||
@@ -591,6 +596,47 @@ public abstract class FlatLaf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Object fallbackAATextInfo() {
|
||||||
|
// do nothing if explicitly overridden
|
||||||
|
if( System.getProperty( "awt.useSystemAAFontSettings" ) != null )
|
||||||
|
return null;
|
||||||
|
|
||||||
|
Object aaHint = null;
|
||||||
|
Integer lcdContrastHint = null;
|
||||||
|
|
||||||
|
if( SystemInfo.isLinux ) {
|
||||||
|
// see sun.awt.UNIXToolkit.getDesktopAAHints()
|
||||||
|
Toolkit toolkit = Toolkit.getDefaultToolkit();
|
||||||
|
if( toolkit.getDesktopProperty( "gnome.Xft/Antialias" ) == null &&
|
||||||
|
toolkit.getDesktopProperty( "fontconfig/Antialias" ) == null )
|
||||||
|
{
|
||||||
|
// no Gnome or KDE Desktop properties available
|
||||||
|
// --> enable antialiasing
|
||||||
|
aaHint = RenderingHints.VALUE_TEXT_ANTIALIAS_ON;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( aaHint == null )
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if( SystemInfo.isJava_9_orLater ) {
|
||||||
|
Map<Object, Object> hints = new HashMap<>();
|
||||||
|
hints.put( RenderingHints.KEY_TEXT_ANTIALIASING, aaHint );
|
||||||
|
hints.put( RenderingHints.KEY_TEXT_LCD_CONTRAST, lcdContrastHint );
|
||||||
|
return hints;
|
||||||
|
} else {
|
||||||
|
// Java 8
|
||||||
|
try {
|
||||||
|
return Class.forName( "sun.swing.SwingUtilities2$AATextInfo" )
|
||||||
|
.getConstructor( Object.class, Integer.class )
|
||||||
|
.newInstance( aaHint, lcdContrastHint );
|
||||||
|
} catch( Exception ex ) {
|
||||||
|
LoggingFacade.INSTANCE.logSevere( null, ex );
|
||||||
|
throw new RuntimeException( ex );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void putDefaults( UIDefaults defaults, Object value, String... keys ) {
|
private void putDefaults( UIDefaults defaults, Object value, String... keys ) {
|
||||||
for( String key : keys )
|
for( String key : keys )
|
||||||
defaults.put( key, value );
|
defaults.put( key, value );
|
||||||
|
|||||||
Reference in New Issue
Block a user