diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 9d942f36bb..a7f10fa357 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -140,6 +140,7 @@ public class RuneLite eventBus.register(overlayRenderer); eventBus.register(menuManager); eventBus.register(chatMessageManager); + eventBus.register(gui); // Setup the notifier notifier = new Notifier(properties.getTitle(), gui.getTrayIcon()); @@ -161,7 +162,19 @@ public class RuneLite // Load the session, including saved configuration sessionManager.loadSession(); - SwingUtilities.invokeAndWait(() -> gui.showWithChrome(runeliteConfig.enableCustomChrome())); + SwingUtilities.invokeAndWait(() -> + { + if (client != null) + { + client.setSize(runeliteConfig.gameSize()); + client.setPreferredSize(runeliteConfig.gameSize()); + + client.getParent().setPreferredSize(runeliteConfig.gameSize()); + client.getParent().setSize(runeliteConfig.gameSize()); + } + + gui.showWithChrome(runeliteConfig.enableCustomChrome()); + }); eventBus.post(new ClientUILoaded()); } diff --git a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java index bc15f62a42..2919940358 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java @@ -24,6 +24,8 @@ */ package net.runelite.client.config; +import java.awt.Dimension; + @ConfigGroup( keyName = "runelite", name = "RuneLite", @@ -31,6 +33,16 @@ package net.runelite.client.config; ) public interface RuneLiteConfig extends Config { + @ConfigItem( + keyName = "gameSize", + name = "Game size", + description = "The game will resize to this resolution upon starting the client" + ) + default Dimension gameSize() + { + return new Dimension(765, 503); + } + @ConfigItem( keyName = "chatCommandsRecolorEnabled", name = "Enable chat commands recolor", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index 533d65cb21..658853a095 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -28,7 +28,6 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.event.ActionEvent; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.ItemEvent; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index a82cff3e34..646b2f0ae6 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -61,10 +61,12 @@ import javax.swing.ToolTipManager; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.plaf.FontUIResource; +import com.google.common.eventbus.Subscribe; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; +import net.runelite.api.events.ConfigChanged; import net.runelite.client.RuneLiteProperties; import org.pushingpixels.substance.api.skin.SubstanceGraphiteLookAndFeel; import org.pushingpixels.substance.internal.SubstanceSynapse; @@ -250,6 +252,52 @@ public class ClientUI extends JFrame repaint(); } + @Subscribe + public void onConfigChanged(ConfigChanged event) + { + if (!event.getGroup().equals("runelite")) + { + return; + } + + if (!event.getKey().equals("gameSize")) + { + return; + } + + if (client == null) + { + return; + } + + String[] splitStr = event.getNewValue().split("x"); + int width = Integer.parseInt(splitStr[0]); + int height = Integer.parseInt(splitStr[1]); + + // The upper bounds are defined by the applet's max size + // The lower bounds are taken care of by ClientPanel's setMinimumSize + + if (width > 7680) + { + width = 7680; + } + + if (height > 2160) + { + height = 2160; + } + + Dimension size = new Dimension(width, height); + + client.setSize(size); + client.setPreferredSize(size); + + client.getParent().setPreferredSize(size); + client.getParent().setSize(size); + + pack(); + } + private static void setUIFont(FontUIResource f) { final Enumeration keys = UIManager.getDefaults().keys();