From da9de0940c9b8d77d9504a1c7b4fc5807c380ffa Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 21 Jun 2020 22:51:12 -0400 Subject: [PATCH] screenmarkers: cleanup widget marker overlay bounds logic This additionally adds a null check to the getChild() call --- .../ScreenMarkerWidgetHighlightOverlay.java | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java index 4dc590aefd..718ea93903 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ScreenMarkerWidgetHighlightOverlay.java @@ -35,6 +35,7 @@ import net.runelite.api.MenuEntry; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetItem; +import net.runelite.api.widgets.WidgetType; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @@ -63,58 +64,66 @@ class ScreenMarkerWidgetHighlightOverlay extends Overlay return null; } - if (client.isMenuOpen()) - { - plugin.setSelectedWidgetBounds(null); - return null; - } - final MenuEntry[] menuEntries = client.getMenuEntries(); - - final int last = menuEntries.length - 1; - if (last < 0) + if (client.isMenuOpen() || menuEntries.length == 0) { plugin.setSelectedWidgetBounds(null); return null; } - final MenuEntry menuEntry = menuEntries[last]; + final MenuEntry menuEntry = menuEntries[menuEntries.length - 1]; + final int childIdx = menuEntry.getParam0(); final int widgetId = menuEntry.getParam1(); final int groupId = WidgetInfo.TO_GROUP(widgetId); - final int childId = WidgetInfo.TO_CHILD(widgetId); + final int componentId = WidgetInfo.TO_CHILD(widgetId); - final Widget widget = client.getWidget(groupId, childId); + final Widget widget = client.getWidget(groupId, componentId); if (widget == null) { plugin.setSelectedWidgetBounds(null); return null; } - final int param0 = menuEntry.getParam0(); - if (param0 > -1) + Rectangle bounds = null; + if (childIdx > -1) { - final WidgetItem widgetItem = widget.getWidgetItem(param0); - if (widgetItem != null) + if (widget.getType() == WidgetType.INVENTORY) { - drawHighlight(widgetItem.getCanvasBounds(), graphics); + final WidgetItem widgetItem = widget.getWidgetItem(childIdx); + if (widgetItem != null) + { + bounds = widgetItem.getCanvasBounds(); + } } else { - drawHighlight(widget.getChild(param0).getBounds(), graphics); + final Widget child = widget.getChild(childIdx); + if (child != null) + { + bounds = child.getBounds(); + } } } else { - drawHighlight(widget.getBounds(), graphics); + bounds = widget.getBounds(); } + if (bounds == null) + { + plugin.setSelectedWidgetBounds(null); + return null; + } + + drawHighlight(graphics, bounds); + plugin.setSelectedWidgetBounds(bounds); + return null; } - private void drawHighlight(Rectangle bounds, Graphics2D graphics) + private static void drawHighlight(Graphics2D graphics, Rectangle bounds) { graphics.setColor(Color.GREEN); graphics.draw(bounds); - plugin.setSelectedWidgetBounds(bounds); } }