diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java index 406ae9fa..60a827af 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java @@ -66,6 +66,9 @@ public class SystemInfo /** @since 1.1.2 */ public static final boolean isWebswing; /** @since 1.1.1 */ public static final boolean isWinPE; + // features + /** @since 2.3 */ public static final boolean isMacFullWindowContentSupported; + static { // platforms String osName = System.getProperty( "os.name" ).toLowerCase( Locale.ENGLISH ); @@ -108,6 +111,12 @@ public class SystemInfo isProjector = Boolean.getBoolean( "org.jetbrains.projector.server.enable" ); isWebswing = (System.getProperty( "webswing.rootDir" ) != null); isWinPE = isWindows && "X:\\Windows\\System32".equalsIgnoreCase( System.getProperty( "user.dir" ) ); + + // features + // available since Java 12; backported to Java 11.0.8 and 8u292 + isMacFullWindowContentSupported = + javaVersion >= toVersion( 11, 0, 8, 0 ) || + (javaVersion >= toVersion( 1, 8, 0, 292 ) && !isJava_9_orLater); } public static long scanVersion( String version ) { 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 8aa4acb9..d802e4c4 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 @@ -89,6 +89,24 @@ class DemoFrame // do not use HTML text on macOS htmlMenuItem.setText( "some text" ); + + // see https://www.formdev.com/flatlaf/macos/ + if( SystemInfo.isMacFullWindowContentSupported ) { + getRootPane().putClientProperty( "apple.awt.fullWindowContent", true ); + getRootPane().putClientProperty( "apple.awt.transparentTitleBar", true ); + + // hide window title + if( SystemInfo.isJava_17_orLater ) + getRootPane().putClientProperty( "apple.awt.windowTitleVisible", false ); + else + setTitle( null ); + + // add gap to left side of toolbar + toolBar.add( Box.createHorizontalStrut( 70 ), 0 ); + } + + // enable full screen mode for this window + getRootPane().putClientProperty( "apple.awt.fullscreenable", true ); } // integrate into macOS screen menu diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java index 9a9bad68..1c856e03 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java @@ -38,6 +38,8 @@ public class FlatLafDemo public static void main( String[] args ) { // macOS if( SystemInfo.isMacOS ) { + // see https://www.formdev.com/flatlaf/macos/ + // enable screen menu bar // (moves menu bar from JFrame window to top of screen) System.setProperty( "apple.laf.useScreenMenuBar", "true" ); @@ -51,6 +53,7 @@ public class FlatLafDemo // - "system": use current macOS appearance (light or dark) // - "NSAppearanceNameAqua": use light appearance // - "NSAppearanceNameDarkAqua": use dark appearance + // (needs to be set on main thread; setting it on AWT thread does not work) System.setProperty( "apple.awt.application.appearance", "system" ); }