From c09c96cd784bc88d0c76f3fd202327d73a421d49 Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Thu, 25 Feb 2021 10:56:27 +0000 Subject: [PATCH] world map overlay: make icons display fully on the map when edge snapped --- .../ui/overlay/worldmap/WorldMapOverlay.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java index 8b2fc1d187..d2e13ccad3 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java @@ -131,7 +131,24 @@ public class WorldMapOverlay extends Overlay if (worldPoint.isSnapToEdge()) { - if (worldMapRectangle.contains(drawPoint.getX(), drawPoint.getY())) + // Get a smaller rect for edge-snapped icons so they display correctly at the edge + final Rectangle snappedRect = widget.getBounds(); + snappedRect.grow(-image.getWidth() / 2, -image.getHeight() / 2); + + final Rectangle unsnappedRect = new Rectangle(snappedRect); + if (worldPoint.getImagePoint() != null) + { + int dx = worldPoint.getImagePoint().getX() - (image.getWidth() / 2); + int dy = worldPoint.getImagePoint().getY() - (image.getHeight() / 2); + unsnappedRect.translate(dx, dy); + } + // Make the unsnap rect slightly smaller so a smaller snapped image doesn't cause a freak out + if (worldPoint.isCurrentlyEdgeSnapped()) + { + unsnappedRect.grow(-image.getWidth(), -image.getHeight()); + } + + if (unsnappedRect.contains(drawPoint.getX(), drawPoint.getY())) { if (worldPoint.isCurrentlyEdgeSnapped()) { @@ -141,7 +158,7 @@ public class WorldMapOverlay extends Overlay } else { - drawPoint = clipToRectangle(drawPoint, worldMapRectangle); + drawPoint = clipToRectangle(drawPoint, snappedRect); if (!worldPoint.isCurrentlyEdgeSnapped()) { worldPoint.setCurrentlyEdgeSnapped(true);