From 93d424cfe148145a904ad0419dcbb3a21f2d9d50 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sat, 16 Dec 2023 11:58:27 +0100 Subject: [PATCH] macOS native: added `FlatNativeMacLibrary.windowToggleFullScreen()` for easier testing --- .../flatlaf/ui/FlatNativeMacLibrary.java | 1 + .../natives/libflatlaf-macos-arm64.dylib | Bin 77024 -> 77504 bytes .../natives/libflatlaf-macos-x86_64.dylib | Bin 58784 -> 60592 bytes .../com/formdev/flatlaf/demo/DemoFrame.java | 6 ++++++ ..._formdev_flatlaf_ui_FlatNativeMacLibrary.h | 8 +++++++ .../src/main/objcpp/MacWindow.mm | 20 ++++++++++++++++++ 6 files changed, 35 insertions(+) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java index 8f9acd5f..dad23882 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeMacLibrary.java @@ -63,4 +63,5 @@ public class FlatNativeMacLibrary public native static int getWindowButtonAreaWidth( Window window ); public native static int getWindowTitleBarHeight( Window window ); public native static boolean isWindowFullScreen( Window window ); + public native static boolean windowToggleFullScreen( Window window ); } diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/libflatlaf-macos-arm64.dylib b/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/libflatlaf-macos-arm64.dylib index 61b6e9cdacf1e11192ca70b5681c3db7d51207f9..34d85495b5248b70b6dfc7d5b167d274eeed2994 100755 GIT binary patch delta 11022 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 ZUQ}jxWl6#GQI*!6D}RCi&Gd`;{{U~5h8X|= diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/libflatlaf-macos-x86_64.dylib b/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/libflatlaf-macos-x86_64.dylib index 084b58cafbdf27e95ff6d6bb2e9cfb8bf7ac591d..25d9db4f90c9af7819c09c7bd8e46c473cac4324 100755 GIT binary patch delta 16282 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 diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java index a2ee9821..c48dc887 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java @@ -46,6 +46,7 @@ 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.FlatNativeMacLibrary; import com.formdev.flatlaf.util.ColorFunctions; import com.formdev.flatlaf.util.FontUtils; import com.formdev.flatlaf.util.LoggingFacade; @@ -960,6 +961,11 @@ class DemoFrame System.out.println( "m drag" ); } } ); + if( SystemInfo.isMacOS && FlatNativeMacLibrary.isLoaded() ) { + showToggleButton.addActionListener( e -> { + FlatNativeMacLibrary.windowToggleFullScreen( this ); + } ); + } // add "Users" button to menubar FlatButton usersButton = new FlatButton(); diff --git a/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h b/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h index bb761191..f962f645 100644 --- a/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h +++ b/flatlaf-natives/flatlaf-natives-macos/src/main/headers/com_formdev_flatlaf_ui_FlatNativeMacLibrary.h @@ -53,6 +53,14 @@ JNIEXPORT jint JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_getWindo JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_isWindowFullScreen (JNIEnv *, jclass, jobject); +/* + * Class: com_formdev_flatlaf_ui_FlatNativeMacLibrary + * Method: windowToggleFullScreen + * Signature: (Ljava/awt/Window;)Z + */ +JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_windowToggleFullScreen + (JNIEnv *, jclass, jobject); + #ifdef __cplusplus } #endif diff --git a/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacWindow.mm b/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacWindow.mm index 730f64ab..5fc8a285 100644 --- a/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacWindow.mm +++ b/flatlaf-natives/flatlaf-natives-macos/src/main/objcpp/MacWindow.mm @@ -328,3 +328,23 @@ JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_isWi bool isWindowFullScreen( NSWindow* nsWindow ) { return ((nsWindow.styleMask & NSWindowStyleMaskFullScreen) != 0); } + +extern "C" +JNIEXPORT jboolean JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_windowToggleFullScreen + ( JNIEnv* env, jclass cls, jobject window ) +{ + JNI_COCOA_ENTER() + + NSWindow* nsWindow = getNSWindow( env, cls, window ); + if( nsWindow == NULL ) + return FALSE; + + [FlatJNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){ + [nsWindow toggleFullScreen:nil]; + }]; + + return TRUE; + + JNI_COCOA_EXIT() + return FALSE; +}