diff --git a/.gitattributes b/.gitattributes index c3a3cc0a..7728e387 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,6 +19,7 @@ *.dylib binary *.gif binary *.jar binary +*.lib binary *.png binary *.sketch binary *.so binary diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java index 2e98e62c..3af73dbd 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java @@ -144,7 +144,7 @@ public abstract class FlatLaf *
* Returns also {@code false} on Windows 10 if: *
* Setting this to {@code false} disables using FlatLaf native window decorations. *
- * (requires Window 10 64-bit) + * (requires Window 10) *
* Allowed Values {@code false} and {@code true}
* Default none
diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java
index 1d5d78c8..5c04f771 100644
--- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java
+++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java
@@ -221,8 +221,8 @@ public class FlatNativeWindowBorder
return;
supported = false;
- // requires Windows 10 on x86_64
- if( !SystemInfo.isWindows_10_orLater || !SystemInfo.isX86_64 )
+ // requires Windows 10
+ if( !SystemInfo.isWindows_10_orLater )
return;
// check whether disabled via system property
diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java
index a599d1d3..312d32a4 100644
--- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java
+++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java
@@ -79,8 +79,8 @@ class FlatWindowsNativeWindowBorder
private static FlatWindowsNativeWindowBorder instance;
static FlatNativeWindowBorder.Provider getInstance() {
- // requires Windows 10 on x86_64
- if( !SystemInfo.isWindows_10_orLater || !SystemInfo.isX86_64 )
+ // requires Windows 10
+ if( !SystemInfo.isWindows_10_orLater )
return null;
// load native library
@@ -98,8 +98,11 @@ class FlatWindowsNativeWindowBorder
}
}
- nativeLibrary = new NativeLibrary(
- "com/formdev/flatlaf/natives/flatlaf-windows-x86_64",
+ String libraryName = "com/formdev/flatlaf/natives/flatlaf-windows-x86";
+ if( SystemInfo.isX86_64 )
+ libraryName += "_64";
+
+ nativeLibrary = new NativeLibrary( libraryName,
FlatWindowsNativeWindowBorder.class.getClassLoader(), true );
}
@@ -135,8 +138,8 @@ class FlatWindowsNativeWindowBorder
}
private void install( Window window ) {
- // requires Windows 10 on x86_64
- if( !SystemInfo.isWindows_10_orLater || !SystemInfo.isX86_64 )
+ // requires Windows 10
+ if( !SystemInfo.isWindows_10_orLater )
return;
// only JFrame and JDialog are supported
diff --git a/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java b/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java
index 8865b226..bdfc811e 100644
--- a/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java
+++ b/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java
@@ -127,8 +127,8 @@ public class FlatWindowsNativeWindowBorder
}
private void install( Window window ) {
- // requires Windows 10 on x86_64
- if( !SystemInfo.isWindows_10_orLater || !SystemInfo.isX86_64 )
+ // requires Windows 10
+ if( !SystemInfo.isWindows_10_orLater )
return;
// only JFrame and JDialog are supported
@@ -321,7 +321,10 @@ public class FlatWindowsNativeWindowBorder
hwnd = new HWND( Native.getComponentPointer( window ) );
// replace window procedure
- defaultWndProc = User32Ex.INSTANCE.SetWindowLongPtr( hwnd, GWLP_WNDPROC, this );
+ if( SystemInfo.isX86_64 )
+ defaultWndProc = User32Ex.INSTANCE.SetWindowLongPtr( hwnd, GWLP_WNDPROC, this );
+ else
+ defaultWndProc = User32Ex.INSTANCE.SetWindowLong( hwnd, GWLP_WNDPROC, this );
// remove the OS window title bar
updateFrame();
@@ -329,7 +332,10 @@ public class FlatWindowsNativeWindowBorder
void uninstall() {
// restore original window procedure
- User32Ex.INSTANCE.SetWindowLongPtr( hwnd, GWLP_WNDPROC, defaultWndProc );
+ if( SystemInfo.isX86_64 )
+ User32Ex.INSTANCE.SetWindowLongPtr( hwnd, GWLP_WNDPROC, defaultWndProc );
+ else
+ User32Ex.INSTANCE.SetWindowLong( hwnd, GWLP_WNDPROC, defaultWndProc );
// show the OS window title bar
updateFrame();
@@ -382,7 +388,10 @@ public class FlatWindowsNativeWindowBorder
LRESULT lResult = User32Ex.INSTANCE.CallWindowProc( defaultWndProc, hwnd, uMsg, wParam, lParam );
// restore original window procedure
- User32Ex.INSTANCE.SetWindowLongPtr( hwnd, GWLP_WNDPROC, defaultWndProc );
+ if( SystemInfo.isX86_64 )
+ User32Ex.INSTANCE.SetWindowLongPtr( hwnd, GWLP_WNDPROC, defaultWndProc );
+ else
+ User32Ex.INSTANCE.SetWindowLong( hwnd, GWLP_WNDPROC, defaultWndProc );
// cleanup
windowsMap.remove( window );
@@ -640,6 +649,8 @@ public class FlatWindowsNativeWindowBorder
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, WindowProc wndProc );
LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR wndProc );
+ LONG_PTR SetWindowLong( HWND hWnd, int nIndex, WindowProc wndProc );
+ LONG_PTR SetWindowLong( HWND hWnd, int nIndex, LONG_PTR wndProc );
LRESULT CallWindowProc( LONG_PTR lpPrevWndFunc, HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam );
int GetDpiForWindow( HWND hwnd );
diff --git a/flatlaf-natives/flatlaf-natives-windows/README.md b/flatlaf-natives/flatlaf-natives-windows/README.md
index dfa3b063..9183df91 100644
--- a/flatlaf-natives/flatlaf-natives-windows/README.md
+++ b/flatlaf-natives/flatlaf-natives-windows/README.md
@@ -9,9 +9,9 @@ Tested only with Microsoft Visual C++ 2019 (comes with Visual Studio 2019).
To be able to build FlatLaf on any platform, and without C++ compiler, the
pre-built DLL is checked into Git at
-`flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86_64.dll`.
+[flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/](https://github.com/JFormDesigner/FlatLaf/tree/main/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives).
-This DLL was built on a GitHub server with the help of GitHub Actions. See:
+The DLL was built on a GitHub server with the help of GitHub Actions. See:
[Native Libraries](https://github.com/JFormDesigner/FlatLaf/actions/workflows/natives.yml)
workflow. Then the produced Artifacts ZIP was downloaded and the DLL checked
into Git.
diff --git a/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts b/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts
index d626f209..0dfa7b08 100644
--- a/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts
+++ b/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts
@@ -20,18 +20,16 @@ plugins {
}
library {
- targetMachines.set( listOf( machines.windows.x86_64 ) )
+ targetMachines.set( listOf( machines.windows.x86, machines.windows.x86_64 ) )
variants.configureEach {
- // depend on :flatlaf-core:compileJava because this task generates the JNI headers
- tasks.named( "compileCpp" ) {
- dependsOn( ":flatlaf-core:compileJava" )
- }
-
sharedLibrary {
compileTasks.configureEach {
onlyIf { isBuildable }
+ // depend on :flatlaf-core:compileJava because it generates the JNI headers
+ dependsOn( ":flatlaf-core:compileJava" )
+
doFirst {
println( "Used Tool Chain:" )
println( " - ${toolChain.get()}" )
@@ -67,11 +65,12 @@ library {
onlyIf { isBuildable }
val nativesDir = project( ":flatlaf-core" ).projectDir.resolve( "src/main/resources/com/formdev/flatlaf/natives" )
- val libraryName = "flatlaf-windows-x86_64.dll"
+ val is64Bit = targetMachine.architecture.is64Bit
+ val libraryName = if( is64Bit ) "flatlaf-windows-x86_64.dll" else "flatlaf-windows-x86.dll"
+ val jawt = if( is64Bit ) "lib/jawt-x86_64" else "lib/jawt-x86"
outputs.file( "$nativesDir/$libraryName" )
- val jawt = "${org.gradle.internal.jvm.Jvm.current().javaHome}/lib/jawt"
linkerArgs.addAll( toolChain.map {
when( it ) {
is Gcc, is Clang -> listOf( "-l${jawt}", "-lUser32", "-lshell32", "-lAdvAPI32", "-lKernel32" )
@@ -90,8 +89,10 @@ library {
}
}
- tasks.named( "jar" ) {
- onlyIf { false }
+ for( taskName in listOf( "jarX86", "jarX86-64" ) ) {
+ tasks.named( taskName ) {
+ onlyIf { false }
+ }
}
}
}
diff --git a/flatlaf-natives/flatlaf-natives-windows/lib/README.md b/flatlaf-natives/flatlaf-natives-windows/lib/README.md
new file mode 100644
index 00000000..c1e55b11
--- /dev/null
+++ b/flatlaf-natives/flatlaf-natives-windows/lib/README.md
@@ -0,0 +1,6 @@
+Contains libraries used to compile FlatLaf Windows 10 native libraries (DLLs).
+
+- `jawt-x86.lib` is `