Add support for fullscreen mode

Add support for toggle in "RuneLite" settings to go into fullscreen
mode, that will make RuneLite window fully fullscreen without any weird
hacks.

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-05-24 10:20:30 +02:00
parent b8283815fa
commit ae232ec14a
3 changed files with 45 additions and 6 deletions

View File

@@ -112,6 +112,18 @@ public interface RuneLiteConfig extends Config
return false; return false;
} }
@ConfigItem(
keyName = "fullscreen",
name = "Fullscreen mode",
description = "Switch window to fullscreen mode.",
warning = "Please restart your client after changing this setting",
position = 17
)
default boolean enableFullscreen()
{
return false;
}
@ConfigItem( @ConfigItem(
keyName = "notificationTray", keyName = "notificationTray",
name = "Enable tray notifications", name = "Enable tray notifications",

View File

@@ -62,14 +62,15 @@ import net.runelite.api.events.ConfigChanged;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
import net.runelite.client.RuneLiteProperties; import net.runelite.client.RuneLiteProperties;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.ExpandResizeType;
import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.config.RuneLiteConfig;
import net.runelite.client.events.ClientUILoaded; import net.runelite.client.events.ClientUILoaded;
import net.runelite.client.events.PluginToolbarButtonAdded; import net.runelite.client.events.PluginToolbarButtonAdded;
import net.runelite.client.events.PluginToolbarButtonRemoved; import net.runelite.client.events.PluginToolbarButtonRemoved;
import net.runelite.client.events.TitleToolbarButtonAdded; import net.runelite.client.events.TitleToolbarButtonAdded;
import net.runelite.client.events.TitleToolbarButtonRemoved; import net.runelite.client.events.TitleToolbarButtonRemoved;
import net.runelite.client.ui.skin.SubstanceRuneLiteLookAndFeel;
import net.runelite.client.input.KeyManager; import net.runelite.client.input.KeyManager;
import net.runelite.client.ui.skin.SubstanceRuneLiteLookAndFeel;
import net.runelite.client.util.OSType; import net.runelite.client.util.OSType;
import net.runelite.client.util.OSXUtil; import net.runelite.client.util.OSXUtil;
import net.runelite.client.util.SwingUtil; import net.runelite.client.util.SwingUtil;
@@ -161,7 +162,8 @@ public class ClientUI
@Subscribe @Subscribe
public void onConfigChanged(ConfigChanged event) public void onConfigChanged(ConfigChanged event)
{ {
if (!event.getGroup().equals("runelite")) // Ignore all window related settings in fullscreen
if (!event.getGroup().equals("runelite") || config.enableFullscreen())
{ {
return; return;
} }
@@ -349,6 +351,7 @@ public class ClientUI
SwingUtil.addGracefulExitCallback(frame, SwingUtil.addGracefulExitCallback(frame,
() -> () ->
{ {
frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(null);
saveClientBoundsConfig(); saveClientBoundsConfig();
runelite.shutdown(); runelite.shutdown();
}, },
@@ -386,13 +389,11 @@ public class ClientUI
*/ */
public void show() throws Exception public void show() throws Exception
{ {
final boolean withTitleBar = config.enableCustomChrome();
SwingUtilities.invokeAndWait(() -> SwingUtilities.invokeAndWait(() ->
{ {
frame.setUndecorated(withTitleBar); frame.setUndecorated(config.enableCustomChrome() || config.enableFullscreen());
if (withTitleBar) if (config.enableCustomChrome() && !config.enableFullscreen())
{ {
frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
@@ -508,6 +509,15 @@ public class ClientUI
titleToolbar.addComponent(sidebarNavigationButton, sidebarNavigationJButton); titleToolbar.addComponent(sidebarNavigationButton, sidebarNavigationJButton);
toggleSidebar(); toggleSidebar();
// Force fullscreen
if (config.enableFullscreen() && !OSXUtil.toggleFullscreen(frame))
{
frame.setExpandResizeType(ExpandResizeType.KEEP_WINDOW_SIZE);
frame.setResizable(false);
frame.getGraphicsConfiguration().getDevice().setFullScreenWindow(frame);
frame.setIgnoreRepaint(true);
}
}); });
eventBus.post(new ClientUILoaded()); eventBus.post(new ClientUILoaded());

View File

@@ -26,6 +26,7 @@ package net.runelite.client.util;
import com.apple.eawt.Application; import com.apple.eawt.Application;
import com.apple.eawt.FullScreenUtilities; import com.apple.eawt.FullScreenUtilities;
import java.awt.Window;
import javax.swing.JFrame; import javax.swing.JFrame;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -61,4 +62,20 @@ public class OSXUtil
log.debug("Requested focus on macOS"); log.debug("Requested focus on macOS");
} }
} }
/**
* Requests the fullscreen in a macOS friendly way
*/
public static boolean toggleFullscreen(final Window window)
{
if (OSType.getOSType() == OSType.MacOS)
{
Application app = Application.getApplication();
app.requestToggleFullScreen(window);
log.debug("Requested fullscreen on macOS");
return true;
}
return false;
}
} }