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 77bf81ab..164e4a74 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 @@ -313,6 +313,10 @@ public class FlatNativeWindowBorder //---- class WindowTopBorder ------------------------------------------- + /** + * Window top border used on Windows 10. + * No longer needed since Windows 11. + */ static class WindowTopBorder extends JBRCustomDecorations.JBRWindowTopBorder { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java index 88467261..8082e3fc 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java @@ -854,7 +854,7 @@ debug*/ } else if( borderColor != null && (rootPane.getJMenuBar() == null || !rootPane.getJMenuBar().isVisible()) ) insets.bottom += UIScale.scale( 1 ); - if( hasNativeCustomDecoration() && !isWindowMaximized( c ) ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() && !isWindowMaximized( c ) ) insets = FlatUIUtils.addInsets( insets, WindowTopBorder.getInstance().getBorderInsets() ); return insets; @@ -873,7 +873,7 @@ debug*/ FlatUIUtils.paintFilledRectangle( g, borderColor, x, y + height - lineHeight, width, lineHeight ); } - if( hasNativeCustomDecoration() && !isWindowMaximized( c ) ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() && !isWindowMaximized( c ) ) WindowTopBorder.getInstance().paintBorder( c, g, x, y, width, height ); } @@ -966,7 +966,7 @@ debug*/ activeChanged( true ); updateNativeTitleBarHeightAndHitTestSpots(); - if( hasNativeCustomDecoration() ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() ) WindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this ); repaintWindowBorder(); @@ -977,7 +977,7 @@ debug*/ activeChanged( false ); updateNativeTitleBarHeightAndHitTestSpots(); - if( hasNativeCustomDecoration() ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() ) WindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this ); repaintWindowBorder(); 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 98cabbb5..107bb626 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 @@ -34,6 +34,9 @@ public class SystemInfo // OS versions public static final long osVersion; public static final boolean isWindows_10_orLater; + /** Note: This requires Java 8u321, 11.0.14, 17.0.2 or 18 (or later). + * (see https://bugs.openjdk.java.net/browse/JDK-8274840) + * @since 2 */ public static final boolean isWindows_11_orLater; public static final boolean isMacOS_10_11_ElCapitan_orLater; public static final boolean isMacOS_10_14_Mojave_orLater; public static final boolean isMacOS_10_15_Catalina_orLater; @@ -72,6 +75,8 @@ public class SystemInfo // OS versions osVersion = scanVersion( System.getProperty( "os.version" ) ); isWindows_10_orLater = (isWindows && osVersion >= toVersion( 10, 0, 0, 0 )); + isWindows_11_orLater = (isWindows_10_orLater && osName.length() > "windows ".length() && + scanVersion( osName.substring( "windows ".length() ) ) >= toVersion( 11, 0, 0, 0 )); isMacOS_10_11_ElCapitan_orLater = (isMacOS && osVersion >= toVersion( 10, 11, 0, 0 )); isMacOS_10_14_Mojave_orLater = (isMacOS && osVersion >= toVersion( 10, 14, 0, 0 )); isMacOS_10_15_Catalina_orLater = (isMacOS && osVersion >= toVersion( 10, 15, 0, 0 ));