From 1d0bcb49ade15c2b29b7bc825460b5470f1d59c0 Mon Sep 17 00:00:00 2001 From: Alex Vasile <48962821+Alex-Vasile@users.noreply.github.com> Date: Fri, 5 Aug 2022 11:21:12 -0400 Subject: [PATCH] Partial fix for macOS fullscreen support. For #9354. --- .../src/main/java/mage/client/MageFrame.java | 6 +- .../mage/client/util/MacFullscreenUtil.java | 69 +++++++++++++++++++ .../java/mage/client/util/SystemUtil.java | 57 --------------- 3 files changed, 72 insertions(+), 60 deletions(-) create mode 100644 Mage.Client/src/main/java/mage/client/util/MacFullscreenUtil.java delete mode 100644 Mage.Client/src/main/java/mage/client/util/SystemUtil.java diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 4e3f987b29..690037fb01 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -349,10 +349,10 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { setWindowTitle(); }); - if (SystemUtil.isMacOSX()) { - SystemUtil.enableMacOSFullScreenMode(this); + if (MacFullscreenUtil.isMacOSX()) { + MacFullscreenUtil.enableMacOSFullScreenMode(this); if (fullscreenMode) { - SystemUtil.toggleMacOSFullScreenMode(this); + MacFullscreenUtil.toggleMacOSFullScreenMode(this); } } } diff --git a/Mage.Client/src/main/java/mage/client/util/MacFullscreenUtil.java b/Mage.Client/src/main/java/mage/client/util/MacFullscreenUtil.java new file mode 100644 index 0000000000..e751014c71 --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/util/MacFullscreenUtil.java @@ -0,0 +1,69 @@ +package mage.client.util; + +import java.awt.*; +import java.lang.reflect.Method; + +/** + * @author noxx + */ +public final class MacFullscreenUtil { + + public static final String OS_NAME = "os.name"; + public static final String MAC_OS_X = "Mac OS X"; + + private MacFullscreenUtil() {} + + public static boolean isMacOSX() { + return System.getProperty(OS_NAME).contains(MAC_OS_X); + } + + public static void enableMacOSFullScreenMode(Window window) { + if (supportsAppleEAWT()) { + String className = "com.apple.eawt.FullScreenUtilities"; + String methodName = "setWindowCanFullScreen"; + + try { + Class clazz = Class.forName(className); + Method method = clazz.getMethod(methodName, Window.class, boolean.class); + method.invoke(null, window, true); + } catch (Throwable t) { + System.err.println("Full screen mode is not supported"); + t.printStackTrace(); + } + } else { + // Nothing needed. Running with Java 11+ (even when compiled for 1.8) automatically allows for full screen toggling. + } + } + + public static void toggleMacOSFullScreenMode(Window window) { + if (supportsAppleEAWT()) { + String className = "com.apple.eawt.Application"; + String methodName = "getApplication"; + String methodName2 = "requestToggleFullScreen"; + + try { + Class clazz = Class.forName(className); + Method method = clazz.getMethod(methodName); + Object appInstance = method.invoke(clazz); + + Class[] params = new Class[]{Window.class}; + method = clazz.getMethod(methodName2, params); + method.invoke(appInstance, window); + } catch (Throwable t) { + System.err.println("Full screen mode is not supported"); + t.printStackTrace(); + } + } else { + // TODO: Need a solution for automatically entering fullscreen under Java 11+ + // The other approach given online does not work, it will not provide native fullscreen that you can toggle out of: + // GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); + // if (gd.isFullScreenSupported()) { + // gd.setFullScreenWindow(window); + // } + } + } + + private static boolean supportsAppleEAWT() { + return System.getProperty("java.version").startsWith("1.8"); + } +} diff --git a/Mage.Client/src/main/java/mage/client/util/SystemUtil.java b/Mage.Client/src/main/java/mage/client/util/SystemUtil.java deleted file mode 100644 index b9f6568f86..0000000000 --- a/Mage.Client/src/main/java/mage/client/util/SystemUtil.java +++ /dev/null @@ -1,57 +0,0 @@ -package mage.client.util; - -import java.awt.*; -import java.lang.reflect.Method; - -/** - * @author noxx - */ -public final class SystemUtil { - - public static final String OS_NAME = "os.name"; - public static final String MAC_OS_X = "Mac OS X"; - - private SystemUtil() { - } - - public static boolean isMacOSX() { - return System.getProperty(OS_NAME).contains(MAC_OS_X); - } - - public static void enableMacOSFullScreenMode(Window window) { - String className = "com.apple.eawt.FullScreenUtilities"; - String methodName = "setWindowCanFullScreen"; - - try { - Class clazz = Class.forName(className); - Method method = clazz.getMethod(methodName, Window.class, boolean.class); - method.invoke(null, window, true); - } catch (Throwable t) { - System.err.println("Full screen mode is not supported"); - t.printStackTrace(); - } - } - - public static void toggleMacOSFullScreenMode(Window window) { - String className = "com.apple.eawt.Application"; - String methodName = "getApplication"; - String methodName2 = "requestToggleFullScreen"; - - try { - Class clazz = Class.forName(className); - Method method = clazz.getMethod(methodName); - Object appInstance = method.invoke(clazz); - - Class[] params = new Class[]{Window.class}; - method = clazz.getMethod(methodName2, params); - method.invoke(appInstance, window); - } catch (Throwable t) { - System.err.println("Full screen mode is not supported"); - t.printStackTrace(); - } - } - - public static void main(String... args) { - System.out.println(isMacOSX()); - } -}