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;
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();
}
}

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 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<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()
{
final List<Overlay> 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);
}
}