mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-27 03:46:17 -06:00
Fonts: support specifying preferred font family for easy using another font (e.g. Inter) for all components
This commit is contained in:
@@ -114,6 +114,11 @@ public abstract class FlatLaf
|
||||
private Consumer<UIDefaults> postInitialization;
|
||||
private List<Function<Object, Object>> uiDefaultsGetters;
|
||||
|
||||
private static String preferredFontFamily;
|
||||
private static String preferredLightFontFamily;
|
||||
private static String preferredSemiboldFontFamily;
|
||||
private static String preferredMonospacedFontFamily;
|
||||
|
||||
/**
|
||||
* Sets the application look and feel to the given LaF
|
||||
* using {@link UIManager#setLookAndFeel(javax.swing.LookAndFeel)}.
|
||||
@@ -631,6 +636,13 @@ public abstract class FlatLaf
|
||||
if( uiFont == null )
|
||||
uiFont = createCompositeFont( Font.SANS_SERIF, Font.PLAIN, 12 );
|
||||
|
||||
// use preferred font family (if specified)
|
||||
if( preferredFontFamily != null ) {
|
||||
FontUIResource preferredFont = createCompositeFont( preferredFontFamily, uiFont.getStyle(), uiFont.getSize() );
|
||||
if( !ActiveFont.isFallbackFont( preferredFont ) || ActiveFont.isDialogFamily( preferredFontFamily ) )
|
||||
uiFont = preferredFont;
|
||||
}
|
||||
|
||||
// get/remove "defaultFont" from defaults if set in properties files
|
||||
// (use remove() to avoid that ActiveFont.createValue() gets invoked)
|
||||
Object defaultFont = defaults.remove( "defaultFont" );
|
||||
@@ -1323,6 +1335,90 @@ public abstract class FlatLaf
|
||||
private static boolean getUIMethodInitialized;
|
||||
private static MethodHandle getUIMethod;
|
||||
|
||||
/**
|
||||
* Returns the preferred font family to be used for (nearly) all fonts; or {@code null}.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static String getPreferredFontFamily() {
|
||||
return preferredFontFamily;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the preferred font family to be used for (nearly) all fonts.
|
||||
* <p>
|
||||
* <strong>Note</strong>: This must be invoked <strong>before</strong> setting
|
||||
* the application look and feel.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static void setPreferredFontFamily( String preferredFontFamily ) {
|
||||
FlatLaf.preferredFontFamily = preferredFontFamily;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the preferred font family to be used for "light" fonts; or {@code null}.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static String getPreferredLightFontFamily() {
|
||||
return preferredLightFontFamily;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the preferred font family to be used for "light" fonts.
|
||||
* <p>
|
||||
* <strong>Note</strong>: This must be invoked <strong>before</strong> setting
|
||||
* the application look and feel.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static void setPreferredLightFontFamily( String preferredLightFontFamily ) {
|
||||
FlatLaf.preferredLightFontFamily = preferredLightFontFamily;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the preferred font family to be used for "semibold" fonts; or {@code null}.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static String getPreferredSemiboldFontFamily() {
|
||||
return preferredSemiboldFontFamily;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the preferred font family to be used for "semibold" fonts.
|
||||
* <p>
|
||||
* <strong>Note</strong>: This must be invoked <strong>before</strong> setting
|
||||
* the application look and feel.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static void setPreferredSemiboldFontFamily( String preferredSemiboldFontFamily ) {
|
||||
FlatLaf.preferredSemiboldFontFamily = preferredSemiboldFontFamily;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the preferred font family to be used for monospaced fonts; or {@code null}.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static String getPreferredMonospacedFontFamily() {
|
||||
return preferredMonospacedFontFamily;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the preferred font family to be used for monospaced fonts.
|
||||
* <p>
|
||||
* <strong>Note</strong>: This must be invoked <strong>before</strong> setting
|
||||
* the application look and feel.
|
||||
*
|
||||
* @since 3
|
||||
*/
|
||||
public static void setPreferredMonospacedFontFamily( String preferredMonospacedFontFamily ) {
|
||||
FlatLaf.preferredMonospacedFontFamily = preferredMonospacedFontFamily;
|
||||
}
|
||||
|
||||
//---- class FlatUIDefaults -----------------------------------------------
|
||||
|
||||
private class FlatUIDefaults
|
||||
@@ -1457,9 +1553,16 @@ public abstract class FlatLaf
|
||||
|
||||
// create font for family
|
||||
if( families != null && !families.isEmpty() ) {
|
||||
String preferredFamily = preferredFamily( families );
|
||||
if( preferredFamily != null ) {
|
||||
Font font = createCompositeFont( preferredFamily, newStyle, newSize );
|
||||
if( !isFallbackFont( font ) || isDialogFamily( preferredFamily ) )
|
||||
return toUIResource( font );
|
||||
}
|
||||
|
||||
for( String family : families ) {
|
||||
Font font = createCompositeFont( family, newStyle, newSize );
|
||||
if( !isFallbackFont( font ) || family.equalsIgnoreCase( Font.DIALOG ) )
|
||||
if( !isFallbackFont( font ) || isDialogFamily( family ) )
|
||||
return toUIResource( font );
|
||||
}
|
||||
}
|
||||
@@ -1488,9 +1591,26 @@ public abstract class FlatLaf
|
||||
: new FontUIResource( font );
|
||||
}
|
||||
|
||||
private boolean isFallbackFont( Font font ) {
|
||||
private static boolean isFallbackFont( Font font ) {
|
||||
return Font.DIALOG.equalsIgnoreCase( font.getFamily() );
|
||||
}
|
||||
|
||||
private static boolean isDialogFamily( String family ) {
|
||||
return family.equalsIgnoreCase( Font.DIALOG );
|
||||
}
|
||||
|
||||
private static String preferredFamily( List<String> families ) {
|
||||
for( String family : families ) {
|
||||
family = family.toLowerCase( Locale.ENGLISH );
|
||||
if( family.endsWith( " light" ) || family.endsWith( "-thin" ) )
|
||||
return preferredLightFontFamily;
|
||||
if( family.endsWith( " semibold" ) || family.endsWith( "-medium" ) )
|
||||
return preferredSemiboldFontFamily;
|
||||
if( family.equals( "monospaced" ) )
|
||||
return preferredMonospacedFontFamily;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
//---- class ImageIconUIResource ------------------------------------------
|
||||
|
||||
@@ -4,8 +4,8 @@ Inter font
|
||||
This sub-project contains fonts from the Inter font family and bundles them into
|
||||
an easy-to-use and redistributable JAR.
|
||||
|
||||
**Note:** This font requires **Java 10 or later**. It is displayed too large in
|
||||
Java 8 and 9.
|
||||
**Note**: This font does not work correctly in older Java 8 versions (before
|
||||
8u212) and in Java 9 because it is displayed way too large.
|
||||
|
||||
Font home page: https://rsms.me/inter/
|
||||
|
||||
@@ -18,7 +18,8 @@ License:
|
||||
How to install?
|
||||
---------------
|
||||
|
||||
Invoke the `install()` method once in your `main()` method (on AWT thread):
|
||||
Invoke the `install()` method once (e.g. in your `main()` method; on AWT
|
||||
thread):
|
||||
|
||||
~~~java
|
||||
FlatInterFont.install();
|
||||
@@ -28,6 +29,16 @@ FlatInterFont.install();
|
||||
How to use?
|
||||
-----------
|
||||
|
||||
Use as default font:
|
||||
|
||||
~~~java
|
||||
FlatLaf.setPreferredFontFamily( FlatInterFont.FAMILY );
|
||||
FlatLaf.setPreferredLightFontFamily( FlatInterFont.FAMILY_LIGHT );
|
||||
FlatLaf.setPreferredSemiboldFontFamily( FlatInterFont.FAMILY_SEMIBOLD );
|
||||
~~~
|
||||
|
||||
Create fonts:
|
||||
|
||||
~~~java
|
||||
// basic styles
|
||||
new Font( FlatInterFont.FAMILY, Font.PLAIN, 12 );
|
||||
@@ -48,6 +59,10 @@ new Font( FlatInterFont.FAMILY_SEMIBOLD, Font.ITALIC, 12 );
|
||||
Download
|
||||
--------
|
||||
|
||||
Not yet available.
|
||||
|
||||
<!--
|
||||
|
||||
FlatLaf Fonts binaries are available on **Maven Central**.
|
||||
|
||||
If you use Maven or Gradle, add a dependency with following coordinates to your
|
||||
@@ -60,3 +75,5 @@ build script:
|
||||
Otherwise download `flatlaf-fonts-inter-<version>.jar` here:
|
||||
|
||||
[](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-fonts-inter)
|
||||
|
||||
-->
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Version format: <font-version>-<build-number>
|
||||
// Version format: <font-version>[-<build-number>]
|
||||
// For maven compatibility, <font-version> should be in format <major>.<minor>[.<micro>].
|
||||
// <build-number> is usually '1' and should be incremented only if a new release is
|
||||
// <build-number> is optional and should be incremented only if a new release is
|
||||
// necessary, but the <font-version> has not changed.
|
||||
version = "3.19-1"
|
||||
version = "3.19"
|
||||
|
||||
plugins {
|
||||
`java-library`
|
||||
|
||||
@@ -25,11 +25,35 @@ import java.io.InputStream;
|
||||
/**
|
||||
* The Inter font family.
|
||||
* <p>
|
||||
* <strong>Note:</strong> This font requires <strong>Java 10 or later</strong>.
|
||||
* It is displayed too large in Java 8 and 9.
|
||||
* <strong>Note</strong>: This font does not work correctly in older Java 8 versions
|
||||
* (before 8u212) and in Java 9 because it is displayed way too large.
|
||||
* <p>
|
||||
* Font home page: <a href="https://rsms.me/inter/">https://rsms.me/inter/</a><br>
|
||||
* GitHub project: <a href="https://github.com/rsms/inter">https://github.com/rsms/inter</a>
|
||||
* <p>
|
||||
* To install the font, invoke following once (e.g. in your {@code main()} method; on AWT thread):
|
||||
* <pre>{@code
|
||||
* FlatInterFont.install();
|
||||
* }</pre>
|
||||
* <p>
|
||||
* Use as default font:
|
||||
* <pre>{@code
|
||||
* FlatLaf.setPreferredFontFamily( FlatInterFont.FAMILY );
|
||||
* FlatLaf.setPreferredLightFontFamily( FlatInterFont.FAMILY_LIGHT );
|
||||
* FlatLaf.setPreferredSemiboldFontFamily( FlatInterFont.FAMILY_SEMIBOLD );
|
||||
* }</pre>
|
||||
* <p>
|
||||
* Create fonts:
|
||||
* <pre>{@code
|
||||
* new Font( FlatInterFont.FAMILY, Font.PLAIN, 12 );
|
||||
* new Font( FlatInterFont.FAMILY, Font.ITALIC, 12 );
|
||||
* new Font( FlatInterFont.FAMILY, Font.BOLD, 12 );
|
||||
* new Font( FlatInterFont.FAMILY, Font.BOLD | Font.ITALIC, 12 );
|
||||
* new Font( FlatInterFont.FAMILY_LIGHT, Font.PLAIN, 12 );
|
||||
* new Font( FlatInterFont.FAMILY_LIGHT, Font.ITALIC, 12 );
|
||||
* new Font( FlatInterFont.FAMILY_SEMIBOLD, Font.PLAIN, 12 );
|
||||
* new Font( FlatInterFont.FAMILY_SEMIBOLD, Font.ITALIC, 12 );
|
||||
* }</pre>
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
|
||||
@@ -15,7 +15,8 @@ License:
|
||||
How to install?
|
||||
---------------
|
||||
|
||||
Invoke the `install()` method once in your `main()` method (on AWT thread):
|
||||
Invoke the `install()` method once (e.g. in your `main()` method; on AWT
|
||||
thread):
|
||||
|
||||
~~~java
|
||||
FlatJetBrainsMonoFont.install();
|
||||
@@ -25,6 +26,14 @@ FlatJetBrainsMonoFont.install();
|
||||
How to use?
|
||||
-----------
|
||||
|
||||
Use as default monospaced font:
|
||||
|
||||
~~~java
|
||||
FlatLaf.setPreferredMonospacedFontFamily( FlatJetBrainsMonoFont.FAMILY );
|
||||
~~~
|
||||
|
||||
Create fonts:
|
||||
|
||||
~~~java
|
||||
// basic styles
|
||||
new Font( FlatJetBrainsMonoFont.FAMILY, Font.PLAIN, 12 );
|
||||
@@ -37,6 +46,10 @@ new Font( FlatJetBrainsMonoFont.FAMILY, Font.BOLD | Font.ITALIC, 12 );
|
||||
Download
|
||||
--------
|
||||
|
||||
Not yet available.
|
||||
|
||||
<!--
|
||||
|
||||
FlatLaf Fonts binaries are available on **Maven Central**.
|
||||
|
||||
If you use Maven or Gradle, add a dependency with following coordinates to your
|
||||
@@ -49,3 +62,5 @@ build script:
|
||||
Otherwise download `flatlaf-fonts-jetbrains-mono-<version>.jar` here:
|
||||
|
||||
[](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-fonts-jetbrains-mono)
|
||||
|
||||
-->
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Version format: <font-version>-<build-number>
|
||||
// Version format: <font-version>[-<build-number>]
|
||||
// For maven compatibility, <font-version> should be in format <major>.<minor>[.<micro>].
|
||||
// <build-number> is usually '1' and should be incremented only if a new release is
|
||||
// <build-number> is optional and should be incremented only if a new release is
|
||||
// necessary, but the <font-version> has not changed.
|
||||
version = "2.242-1"
|
||||
version = "2.242"
|
||||
|
||||
plugins {
|
||||
`java-library`
|
||||
|
||||
@@ -27,6 +27,24 @@ import java.io.InputStream;
|
||||
* <p>
|
||||
* Font home page: <a href="https://www.jetbrains.com/mono">https://www.jetbrains.com/mono</a><br>
|
||||
* GitHub project: <a href="https://github.com/JetBrains/JetBrainsMono">https://github.com/JetBrains/JetBrainsMono</a>
|
||||
* <p>
|
||||
* To install the font, invoke following once (e.g. in your {@code main()} method; on AWT thread):
|
||||
* <pre>{@code
|
||||
* FlatJetBrainsMonoFont.install();
|
||||
* }</pre>
|
||||
* <p>
|
||||
* Use as default monospaced font:
|
||||
* <pre>{@code
|
||||
* FlatLaf.setPreferredMonospacedFontFamily( FlatJetBrainsMonoFont.FAMILY );
|
||||
* }</pre>
|
||||
* <p>
|
||||
* Create fonts:
|
||||
* <pre>{@code
|
||||
* new Font( FlatJetBrainsMonoFont.FAMILY, Font.PLAIN, 12 );
|
||||
* new Font( FlatJetBrainsMonoFont.FAMILY, Font.ITALIC, 12 );
|
||||
* new Font( FlatJetBrainsMonoFont.FAMILY, Font.BOLD, 12 );
|
||||
* new Font( FlatJetBrainsMonoFont.FAMILY, Font.BOLD | Font.ITALIC, 12 );
|
||||
* }</pre>
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user