From 96b75e088ba7599d4a7402839e1e50f8bf87df1f Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 1 Apr 2018 10:58:26 -0400 Subject: [PATCH] overlay renderer: clip above scene and under widgets to viewport on fixed The minimap on fixed is drawn before above scene and under widgets --- .../src/main/java/net/runelite/api/Client.java | 4 ++++ .../runelite/client/ui/overlay/OverlayRenderer.java | 13 ++++++++++--- .../src/main/java/net/runelite/rs/api/RSClient.java | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index c781270dc4..fbac176655 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -76,6 +76,10 @@ public interface Client extends GameEngine int getViewportWidth(); + int getViewportXOffset(); + + int getViewportYOffset(); + int getScale(); Point getMouseCanvasPosition(); 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 69d5b52530..ec2e27be69 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 @@ -317,7 +317,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener if (overlayPosition == OverlayPosition.DYNAMIC || overlayPosition == OverlayPosition.TOOLTIP) { - safeRender(overlay, graphics, new Point()); + safeRender(client, overlay, layer, graphics, new Point()); } else { @@ -338,7 +338,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener location.setLocation(overlay.getPreferredLocation()); } - safeRender(overlay, graphics, location); + safeRender(client, overlay, layer, graphics, location); dimension.setSize(overlay.getBounds().getSize()); if (dimension.width == 0 && dimension.height == 0) @@ -488,9 +488,16 @@ public class OverlayRenderer extends MouseListener implements KeyListener } } - private void safeRender(Overlay overlay, Graphics2D graphics, Point point) + private void safeRender(Client client, Overlay overlay, OverlayLayer layer, Graphics2D graphics, Point point) { final Graphics2D subGraphics = (Graphics2D) graphics.create(); + if (!isResizeable && (layer == OverlayLayer.ABOVE_SCENE || layer == OverlayLayer.UNDER_WIDGETS)) + { + subGraphics.setClip(client.getViewportXOffset(), + client.getViewportYOffset(), + client.getViewportWidth(), + client.getViewportHeight()); + } subGraphics.translate(point.x, point.y); final Dimension dimension = MoreObjects.firstNonNull(overlay.render(subGraphics), new Dimension()); subGraphics.dispose(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index f6340c4c85..48d7203dba 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -251,6 +251,14 @@ public interface RSClient extends RSGameEngine, Client @Override int getViewportWidth(); + @Import("Viewport_xOffset") + @Override + int getViewportXOffset(); + + @Import("Viewport_yOffset") + @Override + int getViewportYOffset(); + @Import("isResized") @Override boolean isResized();