From 3832abfca88edd59b0f772af6c9a6380707d536c Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Thu, 13 Sep 2018 16:15:51 -0700 Subject: [PATCH 1/3] Add world map surface selector and overview map widgets This commit also reorders them to come in integer order. --- .../src/main/java/net/runelite/api/widgets/WidgetID.java | 6 ++++-- .../src/main/java/net/runelite/api/widgets/WidgetInfo.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 3727469cd2..07ad3e4b0c 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -119,10 +119,12 @@ public class WidgetID static class WorldMap { - static final int OPTION = 42; - static final int TOOLTIP = 35; static final int MAPVIEW = 3; + static final int OVERVIEW_MAP = 6; static final int SEARCH = 21; + static final int SURFACE_SELECTOR = 29; + static final int TOOLTIP = 35; + static final int OPTION = 42; } static class SlayerRewards diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 144fda4077..dbcaec49c0 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -48,10 +48,12 @@ public enum WidgetInfo CLAN_CHAT(WidgetID.CLAN_CHAT_GROUP_ID, 0), RAIDING_PARTY(WidgetID.RAIDING_PARTY_GROUP_ID, 0), - WORLD_MAP_OPTION(WidgetID.WORLD_MAP_MENU_GROUP_ID, WidgetID.WorldMap.OPTION), - WORLD_MAP_TOOLTIP(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.TOOLTIP), WORLD_MAP_VIEW(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.MAPVIEW), + WORLD_MAP_OVERVIEW_MAP(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.OVERVIEW_MAP), WORLD_MAP_SEARCH(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.SEARCH), + WORLD_MAP_SURFACE_SELECTOR(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.SURFACE_SELECTOR), + WORLD_MAP_TOOLTIP(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.TOOLTIP), + WORLD_MAP_OPTION(WidgetID.WORLD_MAP_MENU_GROUP_ID, WidgetID.WorldMap.OPTION), CLUE_SCROLL_TEXT(WidgetID.CLUE_SCROLL_GROUP_ID, WidgetID.Cluescroll.CLUE_TEXT), From 1263e8a636473ba9956092af3ffb56a88c658584 Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Thu, 13 Sep 2018 16:17:19 -0700 Subject: [PATCH 2/3] world map overlay: Render on ABOVE_WIDGETS layer This commit makes world map overlay points and tooltips render below the right-click menu, like native world map points and tooltips do. --- .../runelite/client/ui/overlay/worldmap/WorldMapOverlay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c95130014e..377f03094f 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 @@ -70,7 +70,7 @@ public class WorldMapOverlay extends Overlay this.worldMapPointManager = worldMapPointManager; setPosition(OverlayPosition.DYNAMIC); setPriority(OverlayPriority.HIGHEST); - setLayer(OverlayLayer.ALWAYS_ON_TOP); + setLayer(OverlayLayer.ABOVE_WIDGETS); mouseManager.registerMouseListener(worldMapOverlayMouseListener); } From fba6b0122de206de2e2f51720dc49ab857b02f2f Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Thu, 13 Sep 2018 16:18:35 -0700 Subject: [PATCH 3/3] world map overlay: Clip around widgets above map This commit clips the overlay draw area to exclude the area taken by widgets which draw above the world map, namely the overview map and surface selector. Fixes runelite/runelite#3264 Fixes runelite/runelite#3456 Closes runelite/runelite#3468 --- .../ui/overlay/worldmap/WorldMapOverlay.java | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 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 377f03094f..39623e5fa0 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 @@ -24,12 +24,12 @@ */ package net.runelite.client.ui.overlay.worldmap; -import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Rectangle; +import java.awt.geom.Area; import java.awt.image.BufferedImage; import java.util.List; import javax.inject.Inject; @@ -91,6 +91,8 @@ public class WorldMapOverlay extends Overlay } final Rectangle worldMapRectangle = widget.getBounds(); + final Area mapViewArea = getWorldMapClipArea(worldMapRectangle); + final Area canvasViewArea = getWorldMapClipArea(client.getCanvas().getBounds()); WorldMapPoint tooltipPoint = null; for (WorldMapPoint worldPoint : points) @@ -110,8 +112,7 @@ public class WorldMapOverlay extends Overlay if (worldPoint.isSnapToEdge()) { - Canvas canvas = client.getCanvas(); - graphics.setClip(0, 0, canvas.getWidth(), canvas.getHeight()); + graphics.setClip(canvasViewArea); if (worldMapRectangle.contains(drawPoint.getX(), drawPoint.getY())) { @@ -133,7 +134,7 @@ public class WorldMapOverlay extends Overlay } else { - graphics.setClip(worldMapRectangle); + graphics.setClip(mapViewArea); } int drawX = drawPoint.getX(); @@ -216,6 +217,33 @@ public class WorldMapOverlay extends Overlay return null; } + /** + * Gets a clip area which excludes the area of widgets which overlay the world map. + * + * @param baseRectangle The base area to clip from + * @return An {@link Area} representing baseRectangle, with the area + * of visible widgets overlaying the world map clipped from it. + */ + private Area getWorldMapClipArea(Rectangle baseRectangle) + { + final Widget overview = client.getWidget(WidgetInfo.WORLD_MAP_OVERVIEW_MAP); + final Widget surfaceSelector = client.getWidget(WidgetInfo.WORLD_MAP_SURFACE_SELECTOR); + + Area clipArea = new Area(baseRectangle); + + if (overview != null && !overview.isHidden()) + { + clipArea.subtract(new Area(overview.getBounds())); + } + + if (surfaceSelector != null && !surfaceSelector.isHidden()) + { + clipArea.subtract(new Area(surfaceSelector.getBounds())); + } + + return clipArea; + } + private void drawTooltip(Graphics2D graphics, WorldMapPoint worldPoint) { String tooltip = worldPoint.getTooltip(); @@ -227,7 +255,7 @@ public class WorldMapOverlay extends Overlay drawPoint = new Point(drawPoint.getX() + TOOLTIP_OFFSET_WIDTH, drawPoint.getY() + TOOLTIP_OFFSET_HEIGHT); - graphics.setClip(0, 0, client.getCanvas().getWidth(), client.getCanvas().getHeight()); + graphics.setClip(client.getCanvas().getBounds()); graphics.setColor(TOOLTIP_BACKGROUND); graphics.setFont(FontManager.getRunescapeFont()); FontMetrics fm = graphics.getFontMetrics();