Fonts: support lazy font file loading (extends PRs #545 and #614)

This commit is contained in:
Karl Tauber
2022-11-21 11:51:27 +01:00
parent 6afc747790
commit d491847754
25 changed files with 525 additions and 126 deletions

View File

@@ -23,6 +23,7 @@ dependencies {
implementation( project( ":flatlaf-core" ) )
implementation( project( ":flatlaf-extras" ) )
implementation( project( ":flatlaf-fonts-inter" ) )
implementation( project( ":flatlaf-fonts-jetbrains-mono" ) )
implementation( project( ":flatlaf-fonts-roboto" ) )
implementation( project( ":flatlaf-intellij-themes" ) )
implementation( "com.miglayout:miglayout-swing:5.3" )
@@ -35,6 +36,7 @@ tasks {
dependsOn( ":flatlaf-core:jar" )
dependsOn( ":flatlaf-extras:jar" )
dependsOn( ":flatlaf-fonts-inter:jar" )
dependsOn( ":flatlaf-fonts-jetbrains-mono:jar" )
dependsOn( ":flatlaf-fonts-roboto:jar" )
dependsOn( ":flatlaf-intellij-themes:jar" )
// dependsOn( ":flatlaf-natives-jna:jar" )

View File

@@ -27,7 +27,6 @@ import java.util.Arrays;
import java.util.prefs.Preferences;
import javax.swing.*;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.StyleContext;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.FlatDarculaLaf;
import com.formdev.flatlaf.FlatDarkLaf;
@@ -43,15 +42,13 @@ import com.formdev.flatlaf.extras.FlatSVGIcon;
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
import com.formdev.flatlaf.extras.components.FlatButton;
import com.formdev.flatlaf.extras.components.FlatButton.ButtonType;
import com.formdev.flatlaf.fonts.inter.FlatInterFont;
import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont;
import com.formdev.flatlaf.icons.FlatAbstractIcon;
import com.formdev.flatlaf.themes.FlatMacDarkLaf;
import com.formdev.flatlaf.themes.FlatMacLightLaf;
import com.formdev.flatlaf.extras.FlatSVGUtils;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.ui.JBRCustomDecorations;
import com.formdev.flatlaf.util.ColorFunctions;
import com.formdev.flatlaf.util.FontUtils;
import com.formdev.flatlaf.util.LoggingFacade;
import com.formdev.flatlaf.util.SystemInfo;
import net.miginfocom.layout.ConstraintParser;
@@ -66,15 +63,12 @@ class DemoFrame
extends JFrame
{
private final String[] availableFontFamilyNames;
private boolean interFontInstalled;
private boolean robotoFontInstalled;
private int initialFontMenuItemCount = -1;
DemoFrame() {
int tabIndex = DemoPrefs.getState().getInt( FlatLafDemo.KEY_TAB, 0 );
availableFontFamilyNames = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames().clone();
availableFontFamilyNames = FontUtils.getAvailableFontFamilyNames().clone();
Arrays.sort( availableFontFamilyNames );
initComponents();
@@ -284,24 +278,10 @@ class DemoFrame
private void fontFamilyChanged( ActionEvent e ) {
String fontFamily = e.getActionCommand();
// install Inter font on demand
if( fontFamily.equals( FlatInterFont.FAMILY ) && !interFontInstalled ) {
FlatInterFont.install();
interFontInstalled = true;
}
// install Roboto font on demand
if( fontFamily.equals( FlatRobotoFont.FAMILY ) && !robotoFontInstalled ) {
FlatRobotoFont.install();
robotoFontInstalled = true;
}
FlatAnimatedLafChange.showSnapshot();
Font font = UIManager.getFont( "defaultFont" );
Font newFont = StyleContext.getDefaultStyleContext().getFont( fontFamily, font.getStyle(), font.getSize() );
// StyleContext.getFont() may return a UIResource, which would cause loosing user scale factor on Windows
newFont = FlatUIUtils.nonUIResource( newFont );
Font newFont = FontUtils.getCompositeFont( fontFamily, font.getStyle(), font.getSize() );
UIManager.put( "defaultFont", newFont );
FlatLaf.updateUI();
@@ -368,10 +348,8 @@ class DemoFrame
ButtonGroup familiesGroup = new ButtonGroup();
for( String family : families ) {
if( Arrays.binarySearch( availableFontFamilyNames, family ) < 0 &&
!family.equals( FlatInterFont.FAMILY ) &&
!family.equals( FlatRobotoFont.FAMILY ) )
continue; // not available
if( Arrays.binarySearch( availableFontFamilyNames, family ) < 0 )
continue; // not available
JCheckBoxMenuItem item = new JCheckBoxMenuItem( family );
item.setSelected( family.equals( currentFamily ) );

View File

@@ -23,6 +23,9 @@ import javax.swing.SwingUtilities;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.extras.FlatInspector;
import com.formdev.flatlaf.extras.FlatUIDefaultsInspector;
import com.formdev.flatlaf.fonts.inter.FlatInterFont;
import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont;
import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont;
import com.formdev.flatlaf.util.SystemInfo;
/**
@@ -68,6 +71,24 @@ public class FlatLafDemo
SwingUtilities.invokeLater( () -> {
DemoPrefs.init( PREFS_ROOT_PATH );
// install fonts for lazy loading
FlatInterFont.installLazy();
FlatJetBrainsMonoFont.installLazy();
FlatRobotoFont.installLazy();
// use Inter font by default
// FlatLaf.setPreferredFontFamily( FlatInterFont.FAMILY );
// FlatLaf.setPreferredLightFontFamily( FlatInterFont.FAMILY_LIGHT );
// FlatLaf.setPreferredSemiboldFontFamily( FlatInterFont.FAMILY_SEMIBOLD );
// use Roboto font by default
// FlatLaf.setPreferredFontFamily( FlatRobotoFont.FAMILY );
// FlatLaf.setPreferredLightFontFamily( FlatRobotoFont.FAMILY_LIGHT );
// FlatLaf.setPreferredSemiboldFontFamily( FlatRobotoFont.FAMILY_SEMIBOLD );
// use JetBrains Mono font
// FlatLaf.setPreferredMonospacedFontFamily( FlatJetBrainsMonoFont.FAMILY );
// application specific UI defaults
FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.demo" );