From 71dac537b52b9aa2eadc1ebbca7cf7090c565d35 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 6 May 2017 16:13:15 -0400 Subject: [PATCH] runelite-client: allow plugins to have multiple overlays, fix top down renderer right --- .../net/runelite/client/plugins/Plugin.java | 10 +++++- .../client/ui/overlay/OverlayRenderer.java | 31 ++++++++----------- .../ui/overlay/TopDownRendererLeft.java | 2 +- .../ui/overlay/TopDownRendererRight.java | 14 +++++++-- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java index 1463c973be..f73b4fc67c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/Plugin.java @@ -22,10 +22,12 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package net.runelite.client.plugins; import com.google.common.util.concurrent.AbstractIdleService; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import net.runelite.client.ui.overlay.Overlay; public abstract class Plugin extends AbstractIdleService @@ -34,4 +36,10 @@ public abstract class Plugin extends AbstractIdleService { return null; } + + public Collection getOverlays() + { + Overlay overlay = getOverlay(); + return overlay != null ? Arrays.asList(overlay) : Collections.EMPTY_LIST; + } } 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 98f9eb322e..7e8e6b7d74 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 @@ -22,7 +22,6 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package net.runelite.client.ui.overlay; import java.awt.image.BufferedImage; @@ -40,24 +39,20 @@ public class OverlayRenderer for (Plugin plugin : RuneLite.getRunelite().getPluginManager().getPlugins()) { - Overlay overlay = plugin.getOverlay(); - - if (overlay == null) + for (Overlay overlay : plugin.getOverlays()) { - continue; - } - - switch (overlay.getPosition()) - { - case TOP_RIGHT: - tdr.add(overlay); - break; - case TOP_LEFT: - tdl.add(overlay); - break; - case DYNAMIC: - dr.add(overlay); - break; + switch (overlay.getPosition()) + { + case TOP_RIGHT: + tdr.add(overlay); + break; + case TOP_LEFT: + tdl.add(overlay); + break; + case DYNAMIC: + dr.add(overlay); + break; + } } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererLeft.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererLeft.java index 17a0b3a1bd..ee5258b00c 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererLeft.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererLeft.java @@ -52,7 +52,7 @@ public class TopDownRendererLeft implements Renderer for (Overlay overlay : overlays) { - BufferedImage image = clientBuffer.getSubimage(BORDER_LEFT, y, clientBuffer.getWidth() - BORDER_LEFT, clientBuffer.getHeight() - y);//(int) dimension.getWidth(), (int) dimension.getHeight()); + BufferedImage image = clientBuffer.getSubimage(BORDER_LEFT, y, clientBuffer.getWidth() - BORDER_LEFT, clientBuffer.getHeight() - y); Graphics2D graphics = image.createGraphics(); Renderer.setAntiAliasing(graphics); Dimension dimension = overlay.render(graphics); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java index b294671957..03d788d4ea 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java @@ -22,7 +22,6 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package net.runelite.client.ui.overlay; import java.awt.Dimension; @@ -51,18 +50,29 @@ public class TopDownRendererRight implements Renderer { Client client = RuneLite.getClient(); overlays.sort((o1, o2) -> o2.getPriority().compareTo(o1.getPriority())); + int y = BORDER_TOP; + int clientWidth = client.getClientWidth(); + int clientHeight = client.getClientHeight(); for (Overlay overlay : overlays) { - BufferedImage image = clientBuffer.getSubimage(BORDER_RIGHT, y, client.getClientWidth(), 25); + BufferedImage image = new BufferedImage(clientWidth, clientHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D graphics = image.createGraphics(); Renderer.setAntiAliasing(graphics); Dimension dimension = overlay.render(graphics); graphics.dispose(); if (dimension == null) + { continue; + } + + image = image.getSubimage(0, 0, (int) dimension.getWidth(), (int) dimension.getHeight()); + + graphics = clientBuffer.createGraphics(); + graphics.drawImage(image, clientWidth - BORDER_RIGHT - (int) dimension.getWidth(), y, null); + graphics.dispose(); y += dimension.getHeight() + PADDING; }