diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 593c5f0052..9b1e87c0a4 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -83,7 +83,12 @@ public enum Varbits * Venom - 1,000,000 (6dmg/hit) - 1,000,008 (20 dmg/hit) */ POISON(102, 0, 5), - VENOM(102, 6, 9); + VENOM(102, 6, 9), + + /** + * Options + */ + SIDE_PANELS(4607, 1055, 8, 8); /** * varbit id 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 ebeb0ae27f..4c1a0eab20 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 @@ -34,6 +34,9 @@ class WidgetID static final int MINIMAP_GROUP_ID = 160; static final int LOGIN_CLICK_TO_PLAY_GROUP_ID = 378; static final int CLUE_SCROLL_GROUP_ID = 203; + static final int FIXED_VIEWPORT_GROUP_ID = 548; + static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID = 161; + static final int RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID = 164; static class PestControl { @@ -92,4 +95,11 @@ class WidgetID { static final int XP_ORB = 1; } + + static class Viewport + { + static final int FIXED_VIEWPORT = 20; + static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX = 12; + static final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 12; + } } 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 3e3201dc7e..145b48fe18 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 @@ -67,7 +67,11 @@ public enum WidgetInfo MINIMAP_XP_ORB(WidgetID.MINIMAP_GROUP_ID, WidgetID.Minimap.XP_ORB), - LOGIN_CLICK_TO_PLAY_SCREEN(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, 0); + LOGIN_CLICK_TO_PLAY_SCREEN(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, 0), + + FIXED_VIEWPORT(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.Viewport.FIXED_VIEWPORT), + RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX), + RESIZABLE_VIEWPORT_BOTTOM_LINE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_BOTTOM_LINE); private final int groupId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index c6bb1f4c27..6d63703344 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -31,6 +31,7 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics2D; +import java.awt.Rectangle; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; @@ -48,6 +49,8 @@ import net.runelite.api.Player; import net.runelite.api.Point; import net.runelite.api.Region; import net.runelite.api.Tile; +import net.runelite.api.Varbits; +import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.game.ItemManager; import net.runelite.client.RuneLite; @@ -121,11 +124,41 @@ public class GroundItemsOverlay extends Overlay return null; } - //Widget bank = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER); - //if (bank != null && !bank.isHidden()) - //{ - // return null; - //} + WidgetInfo viewportInfo = WidgetInfo.FIXED_VIEWPORT; + if (client.isResized()) + { + if (client.getSetting(Varbits.SIDE_PANELS) == 1) + { + viewportInfo = WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE; + } + else + { + viewportInfo = WidgetInfo.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX; + } + } + Widget viewport = client.getWidget(viewportInfo); + + if (viewport != null) + { + Widget[] subViewports = viewport.getStaticChildren(); + if (subViewports.length > 0) + { + for (Widget w : subViewports) + { + if (w.getNestedChildren().length > 0) + { + return null; + } + } + } + else + { + if (viewport.getNestedChildren().length > 0) + { + return null; + } + } + } // gets the hidden/highlighted items from the text box in the config String configItems = config.getHiddenItems(); @@ -199,6 +232,13 @@ public class GroundItemsOverlay extends Overlay for (int i = 0; i < itemIds.size(); ++i) { + Point point = itemLayer.getCanvasLocation(); + // if the item is offscreen, don't bother drawing it + if (point == null || !pointInWidget(point, viewport)) + { + continue; + } + int itemId = itemIds.get(i); int quantity = items.get(itemId); ItemComposition item = itemCache.getUnchecked(itemId); @@ -270,13 +310,6 @@ public class GroundItemsOverlay extends Overlay String itemString = itemStringBuilder.toString(); itemStringBuilder.setLength(0); - Point point = itemLayer.getCanvasLocation(); - // if the item is offscreen, don't bother drawing it - if (point == null) - { - continue; - } - int screenX = point.getX() + 2 - (fm.stringWidth(itemString) / 2); // Drawing the shadow for the text, 1px on both x and y @@ -291,4 +324,14 @@ public class GroundItemsOverlay extends Overlay return null; } + + private boolean pointInWidget(Point point, Widget widget) + { + if (widget != null) + { + Rectangle bounds = widget.getBounds(); + return bounds != null && bounds.contains(new java.awt.Point(point.getX(), point.getY())); + } + return false; + } }