Change ScreenMarkers to use OverlayRenderer
Change ScreenMarkers to use OverlayRenderer bounds instead of holding its own bounds. Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -26,7 +26,6 @@
|
||||
package net.runelite.client.plugins.screenmarkers;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Rectangle;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -36,7 +35,6 @@ import lombok.NoArgsConstructor;
|
||||
@AllArgsConstructor
|
||||
public class ScreenMarker
|
||||
{
|
||||
private Rectangle bounds;
|
||||
private String name;
|
||||
private int borderThickness;
|
||||
private Color color;
|
||||
|
||||
@@ -27,7 +27,6 @@ package net.runelite.client.plugins.screenmarkers;
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Stroke;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
@@ -37,12 +36,13 @@ import net.runelite.client.ui.overlay.OverlayPriority;
|
||||
|
||||
public class ScreenMarkerCreationOverlay extends Overlay
|
||||
{
|
||||
@Inject
|
||||
private ScreenMarkerPlugin plugin;
|
||||
|
||||
public ScreenMarkerCreationOverlay()
|
||||
@Inject
|
||||
private ScreenMarkerCreationOverlay(final ScreenMarkerPlugin plugin)
|
||||
{
|
||||
setPosition(OverlayPosition.DYNAMIC);
|
||||
this.plugin = plugin;
|
||||
setPosition(OverlayPosition.DETACHED);
|
||||
setLayer(OverlayLayer.ALWAYS_ON_TOP);
|
||||
setPriority(OverlayPriority.HIGH);
|
||||
}
|
||||
@@ -57,17 +57,16 @@ public class ScreenMarkerCreationOverlay extends Overlay
|
||||
return null;
|
||||
}
|
||||
|
||||
Rectangle bounds = marker.getBounds();
|
||||
int thickness = marker.getBorderThickness();
|
||||
int offset = thickness / 2;
|
||||
int width = bounds.width - thickness;
|
||||
int height = bounds.height - thickness;
|
||||
int width = getBounds().width - thickness;
|
||||
int height = getBounds().height - thickness;
|
||||
|
||||
graphics.setStroke(createStripedStroke(thickness));
|
||||
graphics.setColor(marker.getColor());
|
||||
graphics.drawRect(bounds.x + offset, bounds.y + offset, width, height);
|
||||
graphics.drawRect(offset, offset, width, height);
|
||||
|
||||
return bounds.getSize();
|
||||
return getBounds().getSize();
|
||||
}
|
||||
|
||||
private Stroke createStripedStroke(int thickness)
|
||||
|
||||
@@ -38,7 +38,7 @@ public class ScreenMarkerMouseListener extends MouseListener
|
||||
private final ScreenMarkerPlugin plugin;
|
||||
private Point lastMousePoint = null;
|
||||
|
||||
public ScreenMarkerMouseListener(ScreenMarkerPlugin plugin)
|
||||
ScreenMarkerMouseListener(ScreenMarkerPlugin plugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
}
|
||||
@@ -126,7 +126,7 @@ public class ScreenMarkerMouseListener extends MouseListener
|
||||
}
|
||||
}
|
||||
|
||||
plugin.resizeMarker(currentPoint, dx, dy);
|
||||
plugin.resizeMarker(dx, dy);
|
||||
lastMousePoint = currentPoint;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ package net.runelite.client.plugins.screenmarkers;
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import lombok.Getter;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
@@ -35,23 +36,28 @@ import net.runelite.client.ui.overlay.OverlayPriority;
|
||||
|
||||
public class ScreenMarkerOverlay extends Overlay
|
||||
{
|
||||
@Getter
|
||||
private final ScreenMarker marker;
|
||||
private final ScreenMarkerRenderable screenMarkerRenderable;
|
||||
|
||||
public ScreenMarkerOverlay(ScreenMarker marker)
|
||||
ScreenMarkerOverlay(ScreenMarker marker)
|
||||
{
|
||||
this.marker = marker;
|
||||
setPosition(OverlayPosition.DETACHED);
|
||||
setLayer(OverlayLayer.ALWAYS_ON_TOP);
|
||||
setPriority(OverlayPriority.HIGH);
|
||||
setPreferredLocation(marker.getBounds().getLocation());
|
||||
|
||||
screenMarkerRenderable = new ScreenMarkerRenderable();
|
||||
screenMarkerRenderable.setBorderThickness(marker.getBorderThickness());
|
||||
screenMarkerRenderable.setColor(marker.getColor());
|
||||
screenMarkerRenderable.setFill(marker.getFill());
|
||||
screenMarkerRenderable.setStroke(new BasicStroke(marker.getBorderThickness()));
|
||||
screenMarkerRenderable.setPreferredSize(marker.getBounds().getSize());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return marker.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -62,6 +68,7 @@ public class ScreenMarkerOverlay extends Overlay
|
||||
return null;
|
||||
}
|
||||
|
||||
screenMarkerRenderable.setPreferredSize(getPreferredSize());
|
||||
return screenMarkerRenderable.render(graphics);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.inject.Inject;
|
||||
import lombok.AccessLevel;
|
||||
@@ -90,7 +90,7 @@ public class ScreenMarkerPlugin extends Plugin
|
||||
private NavigationButton navigationButton;
|
||||
|
||||
@Getter
|
||||
private List<ScreenMarker> screenMarkers = new ArrayList<>();
|
||||
private final List<ScreenMarkerOverlay> screenMarkers = new ArrayList<>();
|
||||
|
||||
@Getter(AccessLevel.PACKAGE)
|
||||
private ScreenMarker currentMarker;
|
||||
@@ -101,22 +101,18 @@ public class ScreenMarkerPlugin extends Plugin
|
||||
@Override
|
||||
public Collection<Overlay> getOverlays()
|
||||
{
|
||||
List<Overlay> overlays = new ArrayList<>();
|
||||
final List<Overlay> overlays = new ArrayList<>();
|
||||
overlays.add(overlay);
|
||||
|
||||
for (ScreenMarker marker : screenMarkers)
|
||||
{
|
||||
ScreenMarkerOverlay screenMarkerOverlay = new ScreenMarkerOverlay(marker);
|
||||
overlays.add(screenMarkerOverlay);
|
||||
}
|
||||
|
||||
overlays.addAll(screenMarkers);
|
||||
return overlays;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void startUp() throws Exception
|
||||
{
|
||||
screenMarkers = loadConfig(null);
|
||||
loadConfig(configManager.getConfiguration(CONFIG_GROUP, CONFIG_KEY)).forEach(screenMarkers::add);
|
||||
overlayRenderer.rebuildOverlays();
|
||||
|
||||
pluginPanel = injector.getInstance(ScreenMarkerPluginPanel.class);
|
||||
pluginPanel.init();
|
||||
|
||||
@@ -156,7 +152,8 @@ public class ScreenMarkerPlugin extends Plugin
|
||||
{
|
||||
if (screenMarkers.isEmpty() && event.getGroup().equals(CONFIG_GROUP) && event.getKey().equals(CONFIG_KEY))
|
||||
{
|
||||
screenMarkers = loadConfig(event.getNewValue());
|
||||
loadConfig(event.getNewValue()).forEach(screenMarkers::add);
|
||||
overlayRenderer.rebuildOverlays();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,13 +172,16 @@ public class ScreenMarkerPlugin extends Plugin
|
||||
public void startCreation(Point location)
|
||||
{
|
||||
currentMarker = new ScreenMarker(
|
||||
new Rectangle(location, DEFAULT_SIZE),
|
||||
DEFAULT_MARKER_NAME,
|
||||
DEFAULT_MARKER_NAME + " " + (screenMarkers.size() + 1),
|
||||
pluginPanel.getSelectedBorderThickness(),
|
||||
pluginPanel.getSelectedColor(),
|
||||
pluginPanel.getSelectedFillColor(),
|
||||
true
|
||||
);
|
||||
|
||||
// Set overlay creator bounds to current position and default size
|
||||
overlay.setPreferredLocation(location);
|
||||
overlay.setPreferredSize(DEFAULT_SIZE);
|
||||
creatingScreenMarker = true;
|
||||
}
|
||||
|
||||
@@ -191,9 +191,15 @@ public class ScreenMarkerPlugin extends Plugin
|
||||
{
|
||||
setMouseListenerEnabled(false);
|
||||
pluginPanel.setCreationEnabled(false);
|
||||
screenMarkers.add(currentMarker);
|
||||
|
||||
final ScreenMarkerOverlay screenMarkerOverlay = new ScreenMarkerOverlay(currentMarker);
|
||||
screenMarkerOverlay.setPreferredLocation(overlay.getBounds().getLocation());
|
||||
screenMarkerOverlay.setPreferredSize(overlay.getBounds().getSize());
|
||||
|
||||
screenMarkers.add(screenMarkerOverlay);
|
||||
pluginPanel.rebuild();
|
||||
updateConfig();
|
||||
overlayRenderer.saveOverlay(screenMarkerOverlay);
|
||||
overlayRenderer.rebuildOverlays();
|
||||
}
|
||||
|
||||
@@ -201,19 +207,20 @@ public class ScreenMarkerPlugin extends Plugin
|
||||
currentMarker = null;
|
||||
}
|
||||
|
||||
public void deleteMarker(ScreenMarker marker)
|
||||
public void deleteMarker(final ScreenMarkerOverlay marker)
|
||||
{
|
||||
overlayRenderer.resetOverlay(marker);
|
||||
screenMarkers.remove(marker);
|
||||
pluginPanel.rebuild();
|
||||
updateConfig();
|
||||
overlayRenderer.rebuildOverlays();
|
||||
}
|
||||
|
||||
public void resizeMarker(Point point, int dx, int dy)
|
||||
public void resizeMarker(int dx, int dy)
|
||||
{
|
||||
//TODO: Allow resizing below base point
|
||||
Dimension currentSize = currentMarker.getBounds().getSize();
|
||||
currentMarker.getBounds().setSize(new Dimension(currentSize.width + dx, currentSize.height + dy));
|
||||
// TODO: Allow resizing below base point
|
||||
Dimension currentSize = overlay.getPreferredSize();
|
||||
overlay.setPreferredSize(new Dimension(currentSize.width + dx, currentSize.height + dy));
|
||||
}
|
||||
|
||||
public void updateConfig()
|
||||
@@ -225,25 +232,23 @@ public class ScreenMarkerPlugin extends Plugin
|
||||
}
|
||||
|
||||
final Gson gson = new Gson();
|
||||
String json = gson.toJson(screenMarkers);
|
||||
final String json = gson
|
||||
.toJson(screenMarkers.stream().map(ScreenMarkerOverlay::getMarker).collect(Collectors.toList()));
|
||||
configManager.setConfiguration(CONFIG_GROUP, CONFIG_KEY, json);
|
||||
}
|
||||
|
||||
private List<ScreenMarker> loadConfig(String json)
|
||||
private Stream<ScreenMarkerOverlay> loadConfig(String json)
|
||||
{
|
||||
if (json == null)
|
||||
{
|
||||
json = configManager.getConfiguration(CONFIG_GROUP, CONFIG_KEY);
|
||||
}
|
||||
|
||||
if (Strings.isNullOrEmpty(json))
|
||||
{
|
||||
return Collections.emptyList();
|
||||
return Stream.empty();
|
||||
}
|
||||
|
||||
final Gson gson = new Gson();
|
||||
return gson.fromJson(json, new TypeToken<ArrayList<ScreenMarker>>()
|
||||
final List<ScreenMarker> screenMarkerData = gson.fromJson(json, new TypeToken<ArrayList<ScreenMarker>>()
|
||||
{
|
||||
}.getType());
|
||||
|
||||
return screenMarkerData.stream().map(ScreenMarkerOverlay::new);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,22 +29,21 @@ import java.awt.GridLayout;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JToggleButton;
|
||||
import net.runelite.client.plugins.screenmarkers.ScreenMarker;
|
||||
import net.runelite.client.plugins.screenmarkers.ScreenMarkerOverlay;
|
||||
import net.runelite.client.plugins.screenmarkers.ScreenMarkerPlugin;
|
||||
import net.runelite.client.ui.components.shadowlabel.JShadowedLabel;
|
||||
|
||||
public class ScreenMarkerPanel extends JPanel
|
||||
class ScreenMarkerPanel extends JPanel
|
||||
{
|
||||
private static final String DELETE_TEXT = "Delete";
|
||||
private static final String HIDE_TEXT = "Hide";
|
||||
private static final String SHOW_TEXT = "Show";
|
||||
|
||||
private final ScreenMarkerPlugin plugin;
|
||||
private final ScreenMarker marker;
|
||||
private final ScreenMarkerOverlay marker;
|
||||
private JToggleButton visibleToggle;
|
||||
|
||||
|
||||
public ScreenMarkerPanel(ScreenMarkerPlugin plugin, ScreenMarker marker)
|
||||
ScreenMarkerPanel(ScreenMarkerPlugin plugin, ScreenMarkerOverlay marker)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
this.marker = marker;
|
||||
@@ -59,13 +58,13 @@ public class ScreenMarkerPanel extends JPanel
|
||||
JButton deleteButton = new JButton(DELETE_TEXT);
|
||||
deleteButton.addActionListener(l -> plugin.deleteMarker(marker));
|
||||
|
||||
boolean selected = !marker.isVisible();
|
||||
boolean selected = !marker.getMarker().isVisible();
|
||||
visibleToggle = new JToggleButton(selected ? SHOW_TEXT : HIDE_TEXT, selected);
|
||||
visibleToggle.setFocusable(false);
|
||||
visibleToggle.addActionListener(l ->
|
||||
{
|
||||
boolean visible = !visibleToggle.isSelected();
|
||||
marker.setVisible(visible);
|
||||
marker.getMarker().setVisible(false);
|
||||
visibleToggle.setText(visible ? HIDE_TEXT : SHOW_TEXT);
|
||||
plugin.updateConfig();
|
||||
});
|
||||
|
||||
@@ -42,7 +42,7 @@ import javax.swing.JSpinner;
|
||||
import javax.swing.SpinnerModel;
|
||||
import javax.swing.SpinnerNumberModel;
|
||||
import lombok.Getter;
|
||||
import net.runelite.client.plugins.screenmarkers.ScreenMarker;
|
||||
import net.runelite.client.plugins.screenmarkers.ScreenMarkerOverlay;
|
||||
import net.runelite.client.plugins.screenmarkers.ScreenMarkerPlugin;
|
||||
import net.runelite.client.ui.PluginPanel;
|
||||
import net.runelite.client.ui.components.shadowlabel.JShadowedLabel;
|
||||
@@ -64,7 +64,6 @@ public class ScreenMarkerPluginPanel extends PluginPanel
|
||||
@Inject
|
||||
private ScreenMarkerPlugin plugin;
|
||||
|
||||
private JPanel markerView;
|
||||
private JButton markerButton;
|
||||
|
||||
@Getter
|
||||
@@ -99,9 +98,9 @@ public class ScreenMarkerPluginPanel extends PluginPanel
|
||||
northPanel.add(markerButton);
|
||||
|
||||
JPanel centerPanel = new JPanel();
|
||||
markerView = new JPanel(new GridLayout(0, 1, 0, 3));
|
||||
JPanel markerView = new JPanel(new GridLayout(0, 1, 0, 3));
|
||||
|
||||
for (ScreenMarker marker : plugin.getScreenMarkers())
|
||||
for (final ScreenMarkerOverlay marker : plugin.getScreenMarkers())
|
||||
{
|
||||
markerView.add(new ScreenMarkerPanel(plugin, marker));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user