Properly load configuration when showing ClientUI
- Properly load configuration when first showing ClientUI instead of waiting for ConfigChanged events. - Merge open and show to 1 method - Remove ClientUILoaded as it is no longer necessary Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.client.events;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class ClientUILoaded
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -24,7 +24,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.ui;
|
package net.runelite.client.ui;
|
||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import java.applet.Applet;
|
import java.applet.Applet;
|
||||||
import java.awt.Canvas;
|
import java.awt.Canvas;
|
||||||
@@ -67,7 +66,6 @@ import net.runelite.client.config.ConfigManager;
|
|||||||
import net.runelite.client.config.ExpandResizeType;
|
import net.runelite.client.config.ExpandResizeType;
|
||||||
import net.runelite.client.config.RuneLiteConfig;
|
import net.runelite.client.config.RuneLiteConfig;
|
||||||
import net.runelite.client.config.WarningOnExit;
|
import net.runelite.client.config.WarningOnExit;
|
||||||
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;
|
||||||
@@ -127,7 +125,6 @@ public class ClientUI
|
|||||||
|
|
||||||
private final RuneLiteProperties properties;
|
private final RuneLiteProperties properties;
|
||||||
private final RuneLiteConfig config;
|
private final RuneLiteConfig config;
|
||||||
private final EventBus eventBus;
|
|
||||||
private final KeyManager keyManager;
|
private final KeyManager keyManager;
|
||||||
private final Applet client;
|
private final Applet client;
|
||||||
private final ConfigManager configManager;
|
private final ConfigManager configManager;
|
||||||
@@ -143,19 +140,18 @@ public class ClientUI
|
|||||||
private JPanel container;
|
private JPanel container;
|
||||||
private NavigationButton sidebarNavigationButton;
|
private NavigationButton sidebarNavigationButton;
|
||||||
private JButton sidebarNavigationJButton;
|
private JButton sidebarNavigationJButton;
|
||||||
|
private Dimension lastClientSize;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClientUI(
|
private ClientUI(
|
||||||
RuneLiteProperties properties,
|
RuneLiteProperties properties,
|
||||||
RuneLiteConfig config,
|
RuneLiteConfig config,
|
||||||
EventBus eventBus,
|
|
||||||
KeyManager keyManager,
|
KeyManager keyManager,
|
||||||
@Nullable Applet client,
|
@Nullable Applet client,
|
||||||
ConfigManager configManager)
|
ConfigManager configManager)
|
||||||
{
|
{
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.eventBus = eventBus;
|
|
||||||
this.keyManager = keyManager;
|
this.keyManager = keyManager;
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.configManager = configManager;
|
this.configManager = configManager;
|
||||||
@@ -164,69 +160,14 @@ public class ClientUI
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
public void onConfigChanged(ConfigChanged event)
|
public void onConfigChanged(ConfigChanged event)
|
||||||
{
|
{
|
||||||
if (!event.getGroup().equals("runelite"))
|
if (!event.getGroup().equals("runelite") ||
|
||||||
|
event.getKey().equals(CONFIG_CLIENT_MAXIMIZED) ||
|
||||||
|
event.getKey().equals(CONFIG_CLIENT_BOUNDS))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SwingUtilities.invokeLater(() ->
|
SwingUtilities.invokeLater(this::updateFrameConfig);
|
||||||
{
|
|
||||||
if (event.getKey().equals("gameAlwaysOnTop"))
|
|
||||||
{
|
|
||||||
if (frame.isAlwaysOnTopSupported())
|
|
||||||
{
|
|
||||||
frame.setAlwaysOnTop(config.gameAlwaysOnTop());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getKey().equals("lockWindowSize"))
|
|
||||||
{
|
|
||||||
frame.setResizable(!config.lockWindowSize());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getKey().equals("automaticResizeType"))
|
|
||||||
{
|
|
||||||
frame.setExpandResizeType(config.automaticResizeType());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getKey().equals("containInScreen") ||
|
|
||||||
event.getKey().equals("uiEnableCustomChrome"))
|
|
||||||
{
|
|
||||||
frame.setContainedInScreen(config.containInScreen() && config.enableCustomChrome());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getKey().equals("rememberScreenBounds") && event.getNewValue().equals("false"))
|
|
||||||
{
|
|
||||||
configManager.unsetConfiguration(CONFIG_GROUP, CONFIG_CLIENT_MAXIMIZED);
|
|
||||||
configManager.unsetConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!event.getKey().equals("gameSize"))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (client == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The upper bounds are defined by the applet's max size
|
|
||||||
// The lower bounds are defined by the client's fixed size
|
|
||||||
int width = Math.max(Math.min(config.gameSize().width, 7680), Constants.GAME_FIXED_WIDTH);
|
|
||||||
int height = Math.max(Math.min(config.gameSize().height, 2160), Constants.GAME_FIXED_HEIGHT);
|
|
||||||
final Dimension size = new Dimension(width, height);
|
|
||||||
|
|
||||||
client.setSize(size);
|
|
||||||
client.setPreferredSize(size);
|
|
||||||
client.getParent().setPreferredSize(size);
|
|
||||||
client.getParent().setSize(size);
|
|
||||||
|
|
||||||
if (frame.isVisible())
|
|
||||||
{
|
|
||||||
frame.pack();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -395,37 +336,12 @@ public class ClientUI
|
|||||||
final UiKeyListener uiKeyListener = new UiKeyListener(this);
|
final UiKeyListener uiKeyListener = new UiKeyListener(this);
|
||||||
frame.addKeyListener(uiKeyListener);
|
frame.addKeyListener(uiKeyListener);
|
||||||
keyManager.registerKeyListener(uiKeyListener);
|
keyManager.registerKeyListener(uiKeyListener);
|
||||||
});
|
|
||||||
|
|
||||||
show();
|
// Update config
|
||||||
}
|
updateFrameConfig();
|
||||||
|
|
||||||
private boolean showWarningOnExit()
|
// Decorate window with custom chrome and titlebar if needed
|
||||||
{
|
final boolean withTitleBar = config.enableCustomChrome();
|
||||||
if (config.warningOnExit() == WarningOnExit.ALWAYS)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.warningOnExit() == WarningOnExit.LOGGED_IN && client instanceof Client)
|
|
||||||
{
|
|
||||||
return ((Client) client).getGameState() != GameState.LOGIN_SCREEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show client UI after everything else is done.
|
|
||||||
*
|
|
||||||
* @throws Exception exception that can occur during modification of the UI
|
|
||||||
*/
|
|
||||||
private void show() throws Exception
|
|
||||||
{
|
|
||||||
final boolean withTitleBar = config.enableCustomChrome();
|
|
||||||
|
|
||||||
SwingUtilities.invokeAndWait(() ->
|
|
||||||
{
|
|
||||||
frame.setUndecorated(withTitleBar);
|
frame.setUndecorated(withTitleBar);
|
||||||
|
|
||||||
if (withTitleBar)
|
if (withTitleBar)
|
||||||
@@ -544,22 +460,35 @@ public class ClientUI
|
|||||||
|
|
||||||
titleToolbar.addComponent(sidebarNavigationButton, sidebarNavigationJButton);
|
titleToolbar.addComponent(sidebarNavigationButton, sidebarNavigationJButton);
|
||||||
toggleSidebar();
|
toggleSidebar();
|
||||||
|
log.info("Showing frame {}", frame);
|
||||||
});
|
});
|
||||||
|
|
||||||
eventBus.post(new ClientUILoaded());
|
// Show out of date dialog if needed
|
||||||
|
|
||||||
final boolean isOutdated = !(client instanceof Client);
|
final boolean isOutdated = !(client instanceof Client);
|
||||||
if (isOutdated)
|
if (isOutdated)
|
||||||
{
|
{
|
||||||
SwingUtilities.invokeLater(() ->
|
SwingUtilities.invokeLater(() -> JOptionPane.showMessageDialog(frame,
|
||||||
{
|
"RuneLite has not yet been updated to work with the latest\n"
|
||||||
JOptionPane.showMessageDialog(frame, "RuneLite has not yet been updated to work with the latest\n"
|
+ "game update, it will work with reduced functionality until then.",
|
||||||
+ "game update, it will work with reduced functionality until then.",
|
"RuneLite is outdated", INFORMATION_MESSAGE));
|
||||||
"RuneLite is outdated", INFORMATION_MESSAGE);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean showWarningOnExit()
|
||||||
|
{
|
||||||
|
if (config.warningOnExit() == WarningOnExit.ALWAYS)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.warningOnExit() == WarningOnExit.LOGGED_IN && client instanceof Client)
|
||||||
|
{
|
||||||
|
return ((Client) client).getGameState() != GameState.LOGIN_SCREEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Paint this component to target graphics
|
* Paint this component to target graphics
|
||||||
*
|
*
|
||||||
@@ -763,6 +692,54 @@ public class ClientUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateFrameConfig()
|
||||||
|
{
|
||||||
|
if (frame == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame.isAlwaysOnTopSupported())
|
||||||
|
{
|
||||||
|
frame.setAlwaysOnTop(config.gameAlwaysOnTop());
|
||||||
|
}
|
||||||
|
|
||||||
|
frame.setResizable(!config.lockWindowSize());
|
||||||
|
frame.setExpandResizeType(config.automaticResizeType());
|
||||||
|
frame.setContainedInScreen(config.containInScreen() && config.enableCustomChrome());
|
||||||
|
|
||||||
|
if (!config.rememberScreenBounds())
|
||||||
|
{
|
||||||
|
configManager.unsetConfiguration(CONFIG_GROUP, CONFIG_CLIENT_MAXIMIZED);
|
||||||
|
configManager.unsetConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The upper bounds are defined by the applet's max size
|
||||||
|
// The lower bounds are defined by the client's fixed size
|
||||||
|
int width = Math.max(Math.min(config.gameSize().width, 7680), Constants.GAME_FIXED_WIDTH);
|
||||||
|
int height = Math.max(Math.min(config.gameSize().height, 2160), Constants.GAME_FIXED_HEIGHT);
|
||||||
|
final Dimension size = new Dimension(width, height);
|
||||||
|
|
||||||
|
if (!size.equals(lastClientSize))
|
||||||
|
{
|
||||||
|
lastClientSize = size;
|
||||||
|
client.setSize(size);
|
||||||
|
client.setPreferredSize(size);
|
||||||
|
client.getParent().setPreferredSize(size);
|
||||||
|
client.getParent().setSize(size);
|
||||||
|
|
||||||
|
if (frame.isVisible())
|
||||||
|
{
|
||||||
|
frame.pack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void saveClientBoundsConfig()
|
private void saveClientBoundsConfig()
|
||||||
{
|
{
|
||||||
if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != 0)
|
if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user