From b0429cbd65152405d9c1edad225421bab9208d3d Mon Sep 17 00:00:00 2001 From: UniquePassive Date: Fri, 19 Jan 2018 18:17:23 +0100 Subject: [PATCH 1/2] Add Dimension to configs --- .../runelite/client/config/ConfigManager.java | 13 +++++++ .../client/plugins/config/ConfigPanel.java | 38 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index b22827da7d..e1bf91a9f6 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -28,6 +28,7 @@ import com.google.common.eventbus.EventBus; import com.google.inject.Injector; import com.google.inject.Key; import java.awt.Color; +import java.awt.Dimension; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -409,6 +410,13 @@ public class ConfigManager { return Color.decode(str); } + if (type == Dimension.class) + { + String[] splitStr = str.split("x"); + int width = Integer.parseInt(splitStr[0]); + int height = Integer.parseInt(splitStr[1]); + return new Dimension(width, height); + } if (type.isEnum()) { return Enum.valueOf((Class) type, str); @@ -426,6 +434,11 @@ public class ConfigManager { return ((Enum) object).name(); } + if (object instanceof Dimension) + { + Dimension d = (Dimension) object; + return d.width + "x" + d.height; + } return object.toString(); } } 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 c6f0c25d86..533d65cb21 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 @@ -27,6 +27,8 @@ package net.runelite.client.plugins.config; 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; @@ -55,6 +57,7 @@ import javax.swing.JTextField; import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; +import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import lombok.extern.slf4j.Slf4j; @@ -320,6 +323,41 @@ public class ConfigPanel extends PluginPanel item.add(colorPicker, BorderLayout.EAST); } + if (cid.getType() == Dimension.class) + { + JPanel dimensionPanel = new JPanel(); + dimensionPanel.setLayout(new BorderLayout()); + + String str = configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()); + String[] splitStr = str.split("x"); + int width = Integer.parseInt(splitStr[0]); + int height = Integer.parseInt(splitStr[1]); + + SpinnerModel widthModel = new SpinnerNumberModel(width, 0, Integer.MAX_VALUE, 1); + JSpinner widthSpinner = new JSpinner(widthModel); + Component widthEditor = widthSpinner.getEditor(); + JFormattedTextField widthSpinnerTextField = ((JSpinner.DefaultEditor) widthEditor).getTextField(); + widthSpinnerTextField.setColumns(4); + + SpinnerModel heightModel = new SpinnerNumberModel(height, 0, Integer.MAX_VALUE, 1); + JSpinner heightSpinner = new JSpinner(heightModel); + Component heightEditor = heightSpinner.getEditor(); + JFormattedTextField heightSpinnerTextField = ((JSpinner.DefaultEditor) heightEditor).getTextField(); + heightSpinnerTextField.setColumns(4); + + ChangeListener listener = e -> + configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue()); + + widthSpinner.addChangeListener(listener); + heightSpinner.addChangeListener(listener); + + dimensionPanel.add(widthSpinner, BorderLayout.WEST); + dimensionPanel.add(new JLabel(" x "), BorderLayout.CENTER); + dimensionPanel.add(heightSpinner, BorderLayout.EAST); + + item.add(dimensionPanel, BorderLayout.EAST); + } + if (cid.getType().isEnum()) { Class type = (Class) cid.getType(); From 0cede52ba554d2fc161dd61d212a29be1de3fcea Mon Sep 17 00:00:00 2001 From: UniquePassive Date: Fri, 26 Jan 2018 00:47:29 +0100 Subject: [PATCH 2/2] Add a config setting for the game applet's size --- .../java/net/runelite/client/RuneLite.java | 15 +++++- .../client/config/RuneLiteConfig.java | 12 +++++ .../client/plugins/config/ConfigPanel.java | 1 - .../java/net/runelite/client/ui/ClientUI.java | 48 +++++++++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) 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();