From ea051beb4e6e83a2122981677978994f32499cba Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 15 Jun 2018 10:14:57 +0200 Subject: [PATCH 1/4] Reduce code duplicity in resetOverlay method Use saveOverlay and null all fields to achieve same result. Signed-off-by: Tomas Slusny --- .../runelite/client/ui/overlay/OverlayManager.java | 11 ++++------- .../runelite/client/ui/overlay/OverlayRenderer.java | 3 --- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index d9f96daed4..1ee29f6e41 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -191,13 +191,10 @@ public class OverlayManager */ public synchronized void resetOverlay(final Overlay overlay) { - final String locationKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; - final String positionKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; - final String sizeKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; - configManager.unsetConfiguration(RUNELITE_CONFIG_GROUP_NAME, locationKey); - configManager.unsetConfiguration(RUNELITE_CONFIG_GROUP_NAME, positionKey); - configManager.unsetConfiguration(RUNELITE_CONFIG_GROUP_NAME, sizeKey); - rebuildOverlayLayers(); + overlay.setPreferredPosition(null); + overlay.setPreferredSize(null); + overlay.setPreferredLocation(null); + saveOverlay(overlay); } private synchronized void rebuildOverlayLayers() diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 6463b61119..2b623b92d4 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -256,9 +256,6 @@ public class OverlayRenderer extends MouseListener implements KeyListener // detached overlays have no place to reset back to if (overlay.getPosition() != OverlayPosition.DETACHED) { - overlay.setPreferredPosition(null); - overlay.setPreferredSize(null); - overlay.setPreferredLocation(null); overlayManager.resetOverlay(overlay); } } From ebd6d61272d71c8b4f8fb7595d5f9e82057abb33 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 15 Jun 2018 13:31:31 +0200 Subject: [PATCH 2/4] Fix loading of core overlay properties When loaded and added in OverlayRenderer, it was too early to load their properties because configuration was not loaded yet. Fixes #3799 Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/RuneLite.java | 22 +++++++++++++++++++ .../client/ui/overlay/OverlayRenderer.java | 13 +---------- 2 files changed, 23 insertions(+), 12 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 28b253dcd1..ac7b5cb791 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -55,8 +55,12 @@ import net.runelite.client.plugins.PluginManager; import net.runelite.client.ui.ClientUI; import net.runelite.client.ui.DrawManager; import net.runelite.client.ui.TitleToolbar; +import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayRenderer; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; +import net.runelite.client.ui.overlay.infobox.InfoBoxOverlay; +import net.runelite.client.ui.overlay.tooltip.TooltipOverlay; +import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -124,6 +128,18 @@ public class RuneLite @Inject private InfoBoxManager infoBoxManager; + @Inject + private OverlayManager overlayManager; + + @Inject + private InfoBoxOverlay infoBoxOverlay; + + @Inject + private TooltipOverlay tooltipOverlay; + + @Inject + private WorldMapOverlay worldMapOverlay; + Client client; public static void main(String[] args) throws Exception @@ -245,6 +261,12 @@ public class RuneLite // Load the session, including saved configuration sessionManager.loadSession(); + // Add core overlays after configuration has been loaded so their properties will be + // loaded properly + overlayManager.add(infoBoxOverlay); + overlayManager.add(worldMapOverlay); + overlayManager.add(tooltipOverlay); + // Start plugins pluginManager.startCorePlugins(); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 2b623b92d4..b746270971 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -50,9 +50,6 @@ import net.runelite.client.input.KeyManager; import net.runelite.client.input.MouseListener; import net.runelite.client.input.MouseManager; import net.runelite.client.ui.FontManager; -import net.runelite.client.ui.overlay.infobox.InfoBoxOverlay; -import net.runelite.client.ui.overlay.tooltip.TooltipOverlay; -import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay; @Singleton @Slf4j @@ -94,21 +91,13 @@ public class OverlayRenderer extends MouseListener implements KeyListener final OverlayManager overlayManager, final RuneLiteConfig runeLiteConfig, final MouseManager mouseManager, - final KeyManager keyManager, - final InfoBoxOverlay infoBoxOverlay, - final TooltipOverlay tooltipOverlay, - final WorldMapOverlay worldMapOverlay) + final KeyManager keyManager) { this.clientProvider = clientProvider; this.overlayManager = overlayManager; this.runeLiteConfig = runeLiteConfig; keyManager.registerKeyListener(this); mouseManager.registerMouseListener(this); - - // Register core overlays - overlayManager.add(infoBoxOverlay); - overlayManager.add(worldMapOverlay); - overlayManager.add(tooltipOverlay); } @Subscribe From 1a0935ed7b5c2937129ae421fa36b16c8cf7d517 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 15 Jun 2018 13:48:23 +0200 Subject: [PATCH 3/4] Mark InfoboxOverlay as singleton To prevent accidental misuse, mark this overlay as singleton. Signed-off-by: Tomas Slusny --- .../net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java index 40f2315380..25e42b03fa 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java @@ -33,6 +33,7 @@ import java.awt.Rectangle; import java.util.List; import javax.inject.Inject; import javax.inject.Provider; +import javax.inject.Singleton; import net.runelite.api.Client; import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.ui.overlay.Overlay; @@ -44,6 +45,7 @@ import net.runelite.client.ui.overlay.components.PanelComponent; import net.runelite.client.ui.overlay.tooltip.Tooltip; import net.runelite.client.ui.overlay.tooltip.TooltipManager; +@Singleton public class InfoBoxOverlay extends Overlay { private final PanelComponent panelComponent = new PanelComponent(); From 51d00d913a54c9d55b573abc8f8c2c56cb25a3c0 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 15 Jun 2018 18:55:09 +0200 Subject: [PATCH 4/4] Reload overlay settings on plugin change When plugin is loaded/unloaded, reload all overlay settings as they might've changed. Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/RuneLite.java | 1 + .../client/ui/overlay/OverlayManager.java | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 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 ac7b5cb791..f33163eb23 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -228,6 +228,7 @@ public class RuneLite // Register event listeners eventBus.register(clientUI); eventBus.register(overlayRenderer); + eventBus.register(overlayManager); eventBus.register(drawManager); eventBus.register(menuManager); eventBus.register(chatMessageManager); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index 1ee29f6e41..9dd419573c 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -25,6 +25,7 @@ package net.runelite.client.ui.overlay; import com.google.common.annotations.VisibleForTesting; +import com.google.common.eventbus.Subscribe; import java.awt.Dimension; import java.awt.Point; import java.util.ArrayList; @@ -41,6 +42,7 @@ import lombok.Getter; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigManager; import net.runelite.client.config.RuneLiteConfig; +import net.runelite.client.events.PluginChanged; /** * Manages state of all game overlays @@ -90,6 +92,13 @@ public class OverlayManager this.configManager = configManager; } + @Subscribe + public void onPluginChanged(final PluginChanged event) + { + overlays.forEach(this::loadOverlay); + rebuildOverlayLayers(); + } + /** * Gets all of the overlays on a layer * @@ -116,12 +125,7 @@ public class OverlayManager // Add is always true overlays.add(overlay); - final Point location = loadOverlayLocation(overlay); - overlay.setPreferredLocation(location); - final Dimension size = loadOverlaySize(overlay); - overlay.setPreferredSize(size); - final OverlayPosition position = loadOverlayPosition(overlay); - overlay.setPreferredPosition(position); + loadOverlay(overlay); rebuildOverlayLayers(); return true; } @@ -226,6 +230,16 @@ public class OverlayManager overlayLayers.forEach((layer, value) -> overlayLayers.put(layer, Collections.unmodifiableList(value))); } + private void loadOverlay(final Overlay overlay) + { + final Point location = loadOverlayLocation(overlay); + overlay.setPreferredLocation(location); + final Dimension size = loadOverlaySize(overlay); + overlay.setPreferredSize(size); + final OverlayPosition position = loadOverlayPosition(overlay); + overlay.setPreferredPosition(position); + } + private void saveOverlayLocation(final Overlay overlay) { final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION;