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 <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-05-21 18:56:09 +02:00
committed by Adam
parent 9c4878e8da
commit f11d6e4680
2 changed files with 92 additions and 13 deletions

View File

@@ -24,17 +24,29 @@
*/ */
package net.runelite.client.ui.overlay; package net.runelite.client.ui.overlay;
import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import lombok.Data; import lombok.Data;
import net.runelite.client.ui.overlay.components.LayoutableRenderableEntity;
@Data @Data
public abstract class Overlay implements RenderableEntity public abstract class Overlay implements LayoutableRenderableEntity
{ {
private Point preferredLocation; private Point preferredLocation;
private Dimension preferredSize;
private OverlayPosition preferredPosition; private OverlayPosition preferredPosition;
private Rectangle bounds = new Rectangle(); private Rectangle bounds = new Rectangle();
private OverlayPosition position = OverlayPosition.TOP_LEFT; private OverlayPosition position = OverlayPosition.TOP_LEFT;
private OverlayPriority priority = OverlayPriority.NONE; private OverlayPriority priority = OverlayPriority.NONE;
private OverlayLayer layer = OverlayLayer.UNDER_WIDGETS; 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();
}
} }

View File

@@ -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 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_LOCATION = "_preferredLocation";
private static final String OVERLAY_CONFIG_PREFERRED_POSITION = "_preferredPosition"; private static final String OVERLAY_CONFIG_PREFERRED_POSITION = "_preferredPosition";
private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize";
private final PluginManager pluginManager; private final PluginManager pluginManager;
private final Provider<Client> clientProvider; private final Provider<Client> 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() public void rebuildOverlays()
{ {
final List<Overlay> overlays = Stream final List<Overlay> overlays = Stream
@@ -204,6 +233,13 @@ public class OverlayRenderer extends MouseListener implements KeyListener
overlay.setPreferredLocation(location); overlay.setPreferredLocation(location);
} }
final Dimension size = loadOverlaySize(overlay);
if (size != null)
{
overlay.setPreferredSize(size);
}
final OverlayPosition position = loadOverlayPosition(overlay); final OverlayPosition position = loadOverlayPosition(overlay);
overlay.setPreferredPosition(position); overlay.setPreferredPosition(position);
} }
@@ -343,7 +379,15 @@ public class OverlayRenderer extends MouseListener implements KeyListener
} }
else 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); 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 // detached overlays have no place to reset back to
if (overlay.getPosition() != OverlayPosition.DETACHED) if (overlay.getPosition() != OverlayPosition.DETACHED)
{ {
overlay.setPreferredLocation(null);
overlay.setPreferredPosition(null); overlay.setPreferredPosition(null);
saveOverlayPosition(overlay); overlay.setPreferredSize(null);
saveOverlayLocation(overlay); overlay.setPreferredLocation(null);
saveOverlay(overlay);
rebuildOverlayLayers(); rebuildOverlayLayers();
} }
} }
@@ -470,12 +514,11 @@ public class OverlayRenderer extends MouseListener implements KeyListener
break; break;
} }
} }
saveOverlayPosition(movedOverlay);
saveOverlayLocation(movedOverlay);
rebuildOverlayLayers();
} }
saveOverlayPosition(movedOverlay);
saveOverlayLocation(movedOverlay);
rebuildOverlayLayers();
movedOverlay = null; movedOverlay = null;
mouseEvent.consume(); mouseEvent.consume();
} }
@@ -620,7 +663,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
private void saveOverlayLocation(final Overlay overlay) 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) if (overlay.getPreferredLocation() != null)
{ {
configManager.setConfiguration( 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) 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) if (overlay.getPreferredPosition() != null)
{ {
configManager.setConfiguration( configManager.setConfiguration(
@@ -656,13 +717,19 @@ public class OverlayRenderer extends MouseListener implements KeyListener
private Point loadOverlayLocation(final Overlay overlay) 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); 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) 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); return configManager.getConfiguration(runeliteGroupName, locationKey, OverlayPosition.class);
} }
} }