mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-09 08:15:09 +03:00
Compare commits
6 Commits
3.3
...
fonts/inte
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca3b2b4b07 | ||
|
|
722dde63df | ||
|
|
c85baf4dc6 | ||
|
|
96b7770ab2 | ||
|
|
0c00117820 | ||
|
|
eed11d211b |
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
@@ -30,13 +30,13 @@ jobs:
|
||||
toolchain: 21 # latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: gradle/wrapper-validation-action@v1
|
||||
if: matrix.java == '8'
|
||||
|
||||
- name: Setup Java ${{ matrix.java }}
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: ${{ matrix.java }}
|
||||
distribution: temurin # Java 8, 11 and 17 are pre-installed on ubuntu-latest
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
run: ./gradlew build -Dtoolchain=${{ matrix.toolchain }}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: matrix.java == '11'
|
||||
with:
|
||||
name: FlatLaf-build-artifacts
|
||||
@@ -70,10 +70,10 @@ jobs:
|
||||
github.repository == 'JFormDesigner/FlatLaf'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Java 11
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: 11
|
||||
distribution: temurin # pre-installed on ubuntu-latest
|
||||
@@ -106,10 +106,10 @@ jobs:
|
||||
github.repository == 'JFormDesigner/FlatLaf'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Java 11
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: 11
|
||||
distribution: temurin # pre-installed on ubuntu-latest
|
||||
|
||||
4
.github/workflows/fonts.yml
vendored
4
.github/workflows/fonts.yml
vendored
@@ -30,10 +30,10 @@ jobs:
|
||||
github.repository == 'JFormDesigner/FlatLaf'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Java 11
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: 11
|
||||
distribution: temurin # pre-installed on ubuntu-latest
|
||||
|
||||
6
.github/workflows/natives.yml
vendored
6
.github/workflows/natives.yml
vendored
@@ -26,12 +26,12 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: gradle/wrapper-validation-action@v1
|
||||
|
||||
- name: Setup Java 11
|
||||
uses: actions/setup-java@v3
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: 11
|
||||
distribution: temurin
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
run: ./gradlew build-natives --no-daemon
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: FlatLaf-natives-build-artifacts-${{ matrix.os }}
|
||||
path: |
|
||||
|
||||
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,6 +1,22 @@
|
||||
FlatLaf Change Log
|
||||
==================
|
||||
|
||||
## 3.4-SNAPSHOT
|
||||
|
||||
#### New features and improvements
|
||||
|
||||
- Native libraries: System property `flatlaf.nativeLibraryPath` now supports
|
||||
loading native libraries named the same as on Maven central. Improved log
|
||||
messages for loading fails.
|
||||
- Fonts: Updated **Inter** to
|
||||
[v4.0](https://github.com/rsms/inter/releases/tag/v4.0).
|
||||
|
||||
#### Fixed bugs
|
||||
|
||||
- JIDE CommandMenuBar: Fixed `ClassCastException` when JIDE command bar displays
|
||||
`JideMenu` in popup. (PR #794)
|
||||
|
||||
|
||||
## 3.3
|
||||
|
||||
#### New features and improvements
|
||||
|
||||
@@ -172,19 +172,33 @@ public interface FlatSystemProperties
|
||||
String USE_NATIVE_LIBRARY = "flatlaf.useNativeLibrary";
|
||||
|
||||
/**
|
||||
* Specifies a directory in which the native FlatLaf libraries have been extracted.
|
||||
* Specifies a directory in which the FlatLaf native libraries are searched for.
|
||||
* The path can be absolute or relative to current application working directory.
|
||||
* This can be used to avoid extraction of the native libraries to the temporary directory at runtime.
|
||||
* <p>
|
||||
* If the value is {@code "system"}, then {@link System#loadLibrary(String)} is
|
||||
* used to load the native library.
|
||||
* Searches for the native library in classloader of caller
|
||||
* If the value is {@code "system"} (supported since FlatLaf 2.6),
|
||||
* then {@link System#loadLibrary(String)} is used to load the native library.
|
||||
* This searches for the native library in classloader of caller
|
||||
* (using {@link ClassLoader#findLibrary(String)}) and in paths specified
|
||||
* in system properties {@code sun.boot.library.path} and {@code java.library.path}.
|
||||
* (supported since FlatLaf 2.6)
|
||||
* <p>
|
||||
* If the native library can not be loaded from the given path (or via {@link System#loadLibrary(String)}),
|
||||
* then the embedded native library is extracted to the temporary directory and loaded from there.
|
||||
* <p>
|
||||
* The file names of the native libraries must be either:
|
||||
* <ul>
|
||||
* <li>the same as in flatlaf.jar in package 'com/formdev/flatlaf/natives' (required for "system") or
|
||||
* <li>when downloaded from Maven central then as described here:
|
||||
* <a href="https://www.formdev.com/flatlaf/native-libraries/">https://www.formdev.com/flatlaf/native-libraries/</a>
|
||||
* (requires FlatLaf 3.4)
|
||||
* </ul>
|
||||
* <p>
|
||||
* <strong>Note</strong>: Since FlatLaf 3.1 it is recommended to download the
|
||||
* FlatLaf native libraries from Maven central and distribute them with your
|
||||
* application in the same directory as flatlaf.jar.
|
||||
* Then it is <strong>not necessary</strong> to set this system property.
|
||||
* See <a href="https://www.formdev.com/flatlaf/native-libraries/">https://www.formdev.com/flatlaf/native-libraries/</a>
|
||||
* for details.
|
||||
*
|
||||
* @since 2
|
||||
*/
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.formdev.flatlaf.ui;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Container;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics;
|
||||
@@ -271,7 +272,7 @@ public class FlatMenuUI
|
||||
if( !isHover() )
|
||||
selectionBackground = getStyleFromMenuBarUI( ui -> ui.selectionBackground, menuBarSelectionBackground, selectionBackground );
|
||||
|
||||
JMenuBar menuBar = (JMenuBar) menuItem.getParent();
|
||||
Container menuBar = menuItem.getParent();
|
||||
JRootPane rootPane = SwingUtilities.getRootPane( menuBar );
|
||||
if( rootPane != null && rootPane.getParent() instanceof Window &&
|
||||
rootPane.getJMenuBar() == menuBar &&
|
||||
@@ -321,12 +322,17 @@ public class FlatMenuUI
|
||||
}
|
||||
|
||||
private <T> T getStyleFromMenuBarUI( Function<FlatMenuBarUI, T> f, T defaultValue ) {
|
||||
MenuBarUI ui = ((JMenuBar)menuItem.getParent()).getUI();
|
||||
if( !(ui instanceof FlatMenuBarUI) )
|
||||
return defaultValue;
|
||||
|
||||
T value = f.apply( (FlatMenuBarUI) ui );
|
||||
return (value != null) ? value : defaultValue;
|
||||
Container menuItemParent = menuItem.getParent();
|
||||
if( menuItemParent instanceof JMenuBar ) {
|
||||
MenuBarUI ui = ((JMenuBar) menuItemParent).getUI();
|
||||
if( ui instanceof FlatMenuBarUI ) {
|
||||
T value = f.apply( (FlatMenuBarUI) ui );
|
||||
if( value != null ) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,13 +117,32 @@ class FlatNativeLibrary
|
||||
if( library.isLoaded() )
|
||||
return library;
|
||||
|
||||
LoggingFacade.INSTANCE.logSevere( "Did not find library " + libraryName + " in java.library.path, using extracted library instead", null );
|
||||
LoggingFacade.INSTANCE.logSevere( "Did not find library '" + System.mapLibraryName( libraryName )
|
||||
+ "' in java.library.path '" + System.getProperty( "java.library.path" )
|
||||
+ "', using extracted library instead", null );
|
||||
} else {
|
||||
// try standard library naming scheme
|
||||
// (same as in flatlaf.jar in package 'com/formdev/flatlaf/natives')
|
||||
File libraryFile = new File( libraryPath, System.mapLibraryName( libraryName ) );
|
||||
if( libraryFile.exists() )
|
||||
return new NativeLibrary( libraryFile, true );
|
||||
|
||||
LoggingFacade.INSTANCE.logSevere( "Did not find external library " + libraryFile + ", using extracted library instead", null );
|
||||
// try Maven naming scheme
|
||||
// (see https://www.formdev.com/flatlaf/native-libraries/)
|
||||
String libraryName2 = null;
|
||||
File jarFile = getJarFile();
|
||||
if( jarFile != null ) {
|
||||
libraryName2 = buildLibraryName( jarFile, classifier, ext );
|
||||
File libraryFile2 = new File( libraryPath, libraryName2 );
|
||||
if( libraryFile2.exists() )
|
||||
return new NativeLibrary( libraryFile2, true );
|
||||
}
|
||||
|
||||
LoggingFacade.INSTANCE.logSevere( "Did not find library '"
|
||||
+ libraryFile.getName()
|
||||
+ (libraryName2 != null ? ("' or '" + libraryName2) : "")
|
||||
+ "' in '" + libraryFile.getParentFile().getAbsolutePath()
|
||||
+ "', using extracted library instead", null );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,6 +170,33 @@ class FlatNativeLibrary
|
||||
* flatlaf-3.1-linux-x86_64.so
|
||||
*/
|
||||
private static File findLibraryBesideJar( String classifier, String ext ) {
|
||||
// get location of FlatLaf jar (or fat/uber application jar)
|
||||
File jarFile = getJarFile();
|
||||
if( jarFile == null )
|
||||
return null;
|
||||
|
||||
// build library file
|
||||
String libraryName = buildLibraryName( jarFile, classifier, ext );
|
||||
File parent = jarFile.getParentFile();
|
||||
|
||||
// check whether native library exists in same directory as jar
|
||||
File libraryFile = new File( parent, libraryName );
|
||||
if( libraryFile.isFile() )
|
||||
return libraryFile;
|
||||
|
||||
// if jar is in "lib" directory, then also check whether native library exists
|
||||
// in "../bin" directory
|
||||
if( parent.getName().equalsIgnoreCase( "lib" ) ) {
|
||||
libraryFile = new File( parent.getParentFile(), "bin/" + libraryName );
|
||||
if( libraryFile.isFile() )
|
||||
return libraryFile;
|
||||
}
|
||||
|
||||
// native library not found
|
||||
return null;
|
||||
}
|
||||
|
||||
private static File getJarFile() {
|
||||
try {
|
||||
// get location of FlatLaf jar
|
||||
CodeSource codeSource = FlatNativeLibrary.class.getProtectionDomain().getCodeSource();
|
||||
@@ -168,31 +214,19 @@ class FlatNativeLibrary
|
||||
if( !jarFile.isFile() )
|
||||
return null;
|
||||
|
||||
// build library file
|
||||
String jarName = jarFile.getName();
|
||||
String jarBasename = jarName.substring( 0, jarName.lastIndexOf( '.' ) );
|
||||
File parent = jarFile.getParentFile();
|
||||
String libraryName = jarBasename
|
||||
+ (jarBasename.contains( "flatlaf" ) ? "" : "-flatlaf")
|
||||
+ '-' + classifier + '.' + ext;
|
||||
|
||||
// check whether native library exists in same directory as jar
|
||||
File libraryFile = new File( parent, libraryName );
|
||||
if( libraryFile.isFile() )
|
||||
return libraryFile;
|
||||
|
||||
// if jar is in "lib" directory, then also check whether library exists
|
||||
// in "../bin" directory
|
||||
if( parent.getName().equalsIgnoreCase( "lib" ) ) {
|
||||
libraryFile = new File( parent.getParentFile(), "bin/" + libraryName );
|
||||
if( libraryFile.isFile() )
|
||||
return libraryFile;
|
||||
}
|
||||
return jarFile;
|
||||
} catch( Exception ex ) {
|
||||
LoggingFacade.INSTANCE.logSevere( ex.getMessage(), ex );
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
private static String buildLibraryName( File jarFile, String classifier, String ext ) {
|
||||
String jarName = jarFile.getName();
|
||||
String jarBasename = jarName.substring( 0, jarName.lastIndexOf( '.' ) );
|
||||
return jarBasename
|
||||
+ (jarBasename.contains( "flatlaf" ) ? "" : "-flatlaf")
|
||||
+ '-' + classifier + '.' + ext;
|
||||
}
|
||||
|
||||
private static void loadJAWT() {
|
||||
|
||||
@@ -192,7 +192,8 @@ public class HiDPIUtils
|
||||
|
||||
case "Inter":
|
||||
case "Inter Light":
|
||||
case "Inter Semi Bold":
|
||||
case "Inter Semi Bold": // Inter v3
|
||||
case "Inter SemiBold": // Inter v4
|
||||
case "Roboto":
|
||||
case "Roboto Light":
|
||||
case "Roboto Medium":
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -18,7 +18,7 @@
|
||||
// For maven compatibility, <font-version> should be in format <major>.<minor>[.<micro>].
|
||||
// <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"
|
||||
version = "4.0"
|
||||
|
||||
if( !rootProject.hasProperty( "release" ) )
|
||||
version = version.toString() + "-SNAPSHOT"
|
||||
|
||||
@@ -117,7 +117,7 @@ public class FlatInterFont
|
||||
* new Font( FlatInterFont.FAMILY_SEMIBOLD, Font.ITALIC, 12 );
|
||||
* }</pre>
|
||||
*/
|
||||
public static final String FAMILY_SEMIBOLD = "Inter Semi Bold";
|
||||
public static final String FAMILY_SEMIBOLD = "Inter SemiBold";
|
||||
|
||||
/**
|
||||
* Use for {@link #installStyle(String)} to install single font style.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,6 +1,4 @@
|
||||
Copyright (c) 2016-2020 The Inter Project Authors.
|
||||
"Inter" is trademark of Rasmus Andersson.
|
||||
https://github.com/rsms/inter
|
||||
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
|
||||
@@ -377,6 +377,7 @@ LRESULT FlatWndProc::WmNcCalcSize( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lP
|
||||
// (using MONITOR_DEFAULTTONEAREST finds right monitor when restoring from minimized)
|
||||
HMONITOR hMonitor = ::MonitorFromWindow( hwnd, MONITOR_DEFAULTTONEAREST );
|
||||
MONITORINFO monitorInfo{ 0 };
|
||||
monitorInfo.cbSize = sizeof( monitorInfo );
|
||||
::GetMonitorInfo( hMonitor, &monitorInfo );
|
||||
|
||||
// If there's a taskbar on any side of the monitor, reduce our size
|
||||
@@ -537,7 +538,6 @@ void FlatWndProc::setMenuItemState( HMENU systemMenu, int item, bool enabled ) {
|
||||
MENUITEMINFO mii{ 0 };
|
||||
mii.cbSize = sizeof( mii );
|
||||
mii.fMask = MIIM_STATE;
|
||||
mii.fType = MFT_STRING;
|
||||
mii.fState = enabled ? MF_ENABLED : MF_DISABLED;
|
||||
::SetMenuItemInfo( systemMenu, item, FALSE, &mii );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user