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:
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user