From f11d6e46804b3ed79ccdc0be1d6932aeb49cbbb4 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 21 May 2018 18:56:09 +0200 Subject: [PATCH] Add support for preferredSize to OverlayRenderer - Add basic support for preferredSize to OverlayRenderer and Overlays - Add methods for saving and deleting overlays to OverlayRenderer to take advantage of this new variable - Add support for saving multiple types of same overlay (support for keys to overlays) Signed-off-by: Tomas Slusny --- .../runelite/client/ui/overlay/Overlay.java | 14 ++- .../client/ui/overlay/OverlayRenderer.java | 91 ++++++++++++++++--- 2 files changed, 92 insertions(+), 13 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java index 4b6c7b9eca..fd1504d4da 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java @@ -24,17 +24,29 @@ */ package net.runelite.client.ui.overlay; +import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import lombok.Data; +import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity; @Data -public abstract class Overlay implements RenderableEntity +public abstract class Overlay implements LayoutableRenderableEntity { private Point preferredLocation; + private Dimension preferredSize; private OverlayPosition preferredPosition; private Rectangle bounds = new Rectangle(); private OverlayPosition position = OverlayPosition.TOP_LEFT; private OverlayPriority priority = OverlayPriority.NONE; private OverlayLayer layer = OverlayLayer.UNDER_WIDGETS; + + /** + * Overlay name, used for saving the overlay, needs to be unique + * @return overlay name + */ + public String getName() + { + return this.getClass().getSimpleName(); + } } 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 a522d07843..5f01a21b37 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 @@ -85,6 +85,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener private static final Color MOVING_OVERLAY_ACTIVE_COLOR = new Color(255, 255, 0, 200); private static final String OVERLAY_CONFIG_PREFERRED_LOCATION = "_preferredLocation"; private static final String OVERLAY_CONFIG_PREFERRED_POSITION = "_preferredPosition"; + private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize"; private final PluginManager pluginManager; private final Provider clientProvider; @@ -165,6 +166,34 @@ public class OverlayRenderer extends MouseListener implements KeyListener } } + /** + * Force save overlay data + * @param overlay overlay to save + */ + public void saveOverlay(final Overlay overlay) + { + saveOverlayPosition(overlay); + saveOverlaySize(overlay); + saveOverlayLocation(overlay); + } + + /** + * Resets stored overlay position data + * @param overlay overlay to reset + */ + public 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(runeliteGroupName, locationKey); + configManager.unsetConfiguration(runeliteGroupName, positionKey); + configManager.unsetConfiguration(runeliteGroupName, sizeKey); + } + + /** + * Rebuild overlay cache for rendering + */ public void rebuildOverlays() { final List overlays = Stream @@ -204,6 +233,13 @@ public class OverlayRenderer extends MouseListener implements KeyListener overlay.setPreferredLocation(location); } + final Dimension size = loadOverlaySize(overlay); + + if (size != null) + { + overlay.setPreferredSize(size); + } + final OverlayPosition position = loadOverlayPosition(overlay); overlay.setPreferredPosition(position); } @@ -343,7 +379,15 @@ public class OverlayRenderer extends MouseListener implements KeyListener } else { - location.setLocation(overlay.getPreferredLocation()); + if (overlay.getPreferredLocation() != null) + { + location.setLocation(overlay.getPreferredLocation()); + } + } + + if (overlay.getPreferredSize() != null) + { + overlay.getBounds().setSize(overlay.getPreferredSize()); } safeRender(client, overlay, layer, graphics, location); @@ -385,10 +429,10 @@ public class OverlayRenderer extends MouseListener implements KeyListener // detached overlays have no place to reset back to if (overlay.getPosition() != OverlayPosition.DETACHED) { - overlay.setPreferredLocation(null); overlay.setPreferredPosition(null); - saveOverlayPosition(overlay); - saveOverlayLocation(overlay); + overlay.setPreferredSize(null); + overlay.setPreferredLocation(null); + saveOverlay(overlay); rebuildOverlayLayers(); } } @@ -470,12 +514,11 @@ public class OverlayRenderer extends MouseListener implements KeyListener break; } } - - saveOverlayPosition(movedOverlay); - saveOverlayLocation(movedOverlay); - rebuildOverlayLayers(); } + saveOverlayPosition(movedOverlay); + saveOverlayLocation(movedOverlay); + rebuildOverlayLayers(); movedOverlay = null; mouseEvent.consume(); } @@ -620,7 +663,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener private void saveOverlayLocation(final Overlay overlay) { - final String key = overlay.getClass().getSimpleName() + OVERLAY_CONFIG_PREFERRED_LOCATION; + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; if (overlay.getPreferredLocation() != null) { configManager.setConfiguration( @@ -636,9 +679,27 @@ public class OverlayRenderer extends MouseListener implements KeyListener } } + private void saveOverlaySize(final Overlay overlay) + { + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; + if (overlay.getPreferredSize() != null) + { + configManager.setConfiguration( + runeliteGroupName, + key, + overlay.getPreferredSize()); + } + else + { + configManager.unsetConfiguration( + runeliteGroupName, + key); + } + } + private void saveOverlayPosition(final Overlay overlay) { - final String key = overlay.getClass().getSimpleName() + OVERLAY_CONFIG_PREFERRED_POSITION; + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; if (overlay.getPreferredPosition() != null) { configManager.setConfiguration( @@ -656,13 +717,19 @@ public class OverlayRenderer extends MouseListener implements KeyListener private Point loadOverlayLocation(final Overlay overlay) { - final String key = overlay.getClass().getSimpleName() + OVERLAY_CONFIG_PREFERRED_LOCATION; + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_LOCATION; return configManager.getConfiguration(runeliteGroupName, key, Point.class); } + private Dimension loadOverlaySize(final Overlay overlay) + { + final String key = overlay.getName() + OVERLAY_CONFIG_PREFERRED_SIZE; + return configManager.getConfiguration(runeliteGroupName, key, Dimension.class); + } + private OverlayPosition loadOverlayPosition(final Overlay overlay) { - final String locationKey = overlay.getClass().getSimpleName() + OVERLAY_CONFIG_PREFERRED_POSITION; + final String locationKey = overlay.getName() + OVERLAY_CONFIG_PREFERRED_POSITION; return configManager.getConfiguration(runeliteGroupName, locationKey, OverlayPosition.class); } }