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 47a969ccb4..b9cb1faf4a 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1600,4 +1600,6 @@ public interface Client extends GameEngine NodeCache getItemCompositionCache(); EnumComposition getEnum(int id); + + void draw2010Menu(); } 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 66dfcef672..987115bd28 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -292,6 +292,7 @@ public enum Varbits { */ NMZ_ABSORPTION(3956), NMZ_POINTS(3949), + NMZ_OVERLOAD(3955), /** * Blast Furnace diff --git a/runelite-api/src/main/java/net/runelite/api/events/BeforeMenuRender.java b/runelite-api/src/main/java/net/runelite/api/events/BeforeMenuRender.java new file mode 100644 index 0000000000..5d1e10994b --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/events/BeforeMenuRender.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019, Ron Young + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.api.events; + +import lombok.Data; + +@Data +public class BeforeMenuRender +{ + private boolean consumed; + + public void consume() + { + this.consumed = true; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java index ae1dff022f..fea751ffcf 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java @@ -47,6 +47,7 @@ import net.runelite.api.NullItemID; import net.runelite.api.RenderOverview; import net.runelite.api.Renderable; import net.runelite.api.WorldMapManager; +import net.runelite.api.events.BeforeMenuRender; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.GameTick; import net.runelite.api.hooks.Callbacks; @@ -508,4 +509,11 @@ public class Hooks implements Callbacks overlayManager.getItemWidgets().add(widgetItem); } } + + public static boolean drawMenu() + { + BeforeMenuRender event = new BeforeMenuRender(); + client.getCallbacks().post(event); + return event.isConsumed(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java index 30e6a56b90..7124cd71d2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java @@ -398,4 +398,4 @@ public class BarbarianAssaultPlugin extends Plugin { { return clockImage; } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/batools/BAToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/batools/BAToolsPlugin.java index d7af4f3228..9db92cf224 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/batools/BAToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/batools/BAToolsPlugin.java @@ -80,7 +80,7 @@ import net.runelite.client.util.Text; name = "BA Tools", description = "Custom tools for Barbarian Assault", tags = {"minigame", "overlay", "timer"}, - type = PluginType.UTILITY + type = PluginType.PVM ) public class BAToolsPlugin extends Plugin implements KeyListener { @@ -642,4 +642,4 @@ public class BAToolsPlugin extends Plugin implements KeyListener shiftDown = false; } } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java index 35711a9a63..3883d0ffa8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/equipmentinspector/EquipmentInspectorPlugin.java @@ -37,7 +37,7 @@ import java.util.concurrent.ScheduledExecutorService; @PluginDescriptor( name = "Equipment Inspector", enabledByDefault = false, - type = PluginType.UTILITY + type = PluginType.PVP ) @Slf4j @@ -226,4 +226,4 @@ public class EquipmentInspectorPlugin extends Plugin { }); } } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPlugin.java index 92089b31d2..6bbe1903b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hydra/HydraPlugin.java @@ -16,7 +16,7 @@ import java.util.HashMap; import java.util.Map; @PluginDescriptor( - name = "Hydra", + name = "Hydra Helper", description = "Hydra Helper", tags = {"Hydra", "Helper"}, type = PluginType.PVM @@ -144,4 +144,4 @@ public class HydraPlugin extends Plugin } } } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java index 281361eebc..540186558c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesConfig.java @@ -52,4 +52,14 @@ public interface InterfaceStylesConfig extends Config { return false; } + + @ConfigItem( + keyName = "hdMenu", + name = "High Detail menu", + description = "Replaces game menu with the RuneScape High Detail mode design" + ) + default boolean hdMenu() + { + return false; + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java index 226b8da617..3be1e31cee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/InterfaceStylesPlugin.java @@ -34,6 +34,7 @@ import net.runelite.api.Client; import net.runelite.api.HealthBarOverride; import net.runelite.api.SpriteID; import net.runelite.api.SpritePixels; +import net.runelite.api.events.BeforeMenuRender; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.WidgetPositioned; import net.runelite.api.widgets.Widget; @@ -115,6 +116,16 @@ public class InterfaceStylesPlugin extends Plugin overrideHealthBars(); } + @Subscribe + public void onBeforeMenuRender(BeforeMenuRender event) + { + if (config.hdMenu()) + { + client.draw2010Menu(); + event.consume(); + } + } + private void overrideSprites() { for (SpriteOverride spriteOverride : SpriteOverride.values()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java index df73647d3a..ea5922af3f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/lootingbagviewer/LootingBagViewerPlugin.java @@ -36,7 +36,7 @@ import javax.inject.Inject; name = "PvP Looting Bag Viewer", description = "Add an overlay showing the contents of your looting bag", tags = {"alternate", "items", "overlay", "second"}, - type = PluginType.UTILITY, + type = PluginType.PVP, enabledByDefault = false ) public class LootingBagViewerPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index 00c603b481..e270351e14 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -59,7 +59,7 @@ import net.runelite.client.util.WildcardMatcher; name = "Player Indicators", description = "Highlight players on-screen and/or on the minimap", tags = {"highlight", "minimap", "overlay", "players"}, - type = PluginType.UTILITY + type = PluginType.PVP ) public class PlayerIndicatorsPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java index 4128adba44..af707dbc1c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/profiles/ProfilesPlugin.java @@ -21,11 +21,19 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; -@PluginDescriptor(name="Account Switcher", description="Allow for a allows you to easily switch between multiple OSRS Accounts", tags={"profile", "account", "login", "log in"}) +@PluginDescriptor( + + name="Account Switcher", + description="Allow for a allows you to easily switch between multiple OSRS Accounts", + tags={"profile", "account", "login", "log in"}, + type = PluginType.UTILITY +) + public class ProfilesPlugin extends Plugin { @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java index 64a009f2cb..1ada10d2bc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java @@ -51,6 +51,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @@ -58,6 +59,7 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager; name = "PyramidPlunder", description = "Highlights doors and spear traps in pyramid plunder and adds a numerical timer", tags = {"pyramidplunder", "pyramid", "plunder", "overlay", "skilling", "thieving"}, + type = PluginType.UTILITY, enabledByDefault = false ) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 4e1689eaee..89180b7bcf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -74,6 +74,7 @@ import net.runelite.client.game.SpriteManager; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.raids.solver.Layout; import net.runelite.client.plugins.raids.solver.LayoutSolver; import net.runelite.client.plugins.raids.solver.RotationSolver; @@ -87,7 +88,8 @@ import net.runelite.client.util.HotkeyListener; @PluginDescriptor( name = "Chambers Of Xeric", description = "Show helpful information for the Chambers of Xeric raid", - tags = {"combat", "raid", "overlay", "pve", "pvm", "bosses", "cox", "olm"} + tags = {"combat", "raid", "overlay", "pve", "pvm", "bosses", "cox", "olm"}, + type = PluginType.PVM ) @Slf4j public class RaidsPlugin extends Plugin diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java index c39e284e89..6efab67061 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java @@ -64,7 +64,7 @@ import java.awt.image.BufferedImage; name = "Supplies Used Tracker", description = "Tracks supplies used during the session", tags = {"cost"}, - type = PluginType.PVM, + type = PluginType.UTILITY, enabledByDefault = false ) @Slf4j diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java index 7c637b65c1..e5a8ceedf6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/vetion/VetionPlugin.java @@ -41,7 +41,7 @@ import java.util.HashMap; import java.util.Map; @PluginDescriptor( - name = "Vetion", + name = "Vetion Helper", description = "Tracks Vet'ion's special attacks", tags = {"bosses", "combat", "pve", "overlay"}, type = PluginType.PVM diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java index ab058dc5b1..68c756e11b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/vorkath/VorkathPlugin.java @@ -15,10 +15,10 @@ import net.runelite.client.ui.overlay.OverlayManager; import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( - name = "Vorkath", + name = "Vorkath Helper", description = "Vorkath Helper", tags = {"Vorkath", "Helper"}, - type = PluginType.PVM + type = PluginType.PVM ) public class VorkathPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java index 534f836349..9d9fea0587 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/ZulrahPlugin.java @@ -22,10 +22,10 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ImageUtil; @PluginDescriptor( - name = "Zulrah", + name = "Zulrah Helper", description = "Zulrah Helper", tags = {"Zulrah", "Helper"}, - type = PluginType.PVM + type = PluginType.PVM ) public class ZulrahPlugin extends Plugin { diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java new file mode 100644 index 0000000000..9bfb4af721 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2019, Ron Young + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.mixins; + +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSClient; +import net.runelite.rs.api.RSFont; + +@Mixin(RSClient.class) +public abstract class MenuMixin implements RSClient +{ + private static final int MENU_BORDER_OUTER_2010 = 0x6D6A5B; + private static final int MENU_BORDER_INNER_2010 = 0x524A3D; + private static final int MENU_PADDING_2010 = 0x2B2622; + private static final int MENU_BACKGROUND_2010 = 0x2B271C; + private static final int MENU_TEXT_2010 = 0xC6B895; + private static final int MENU_HEADER_GRADIENT_TOP_2010 = 0x322E22; + private static final int MENU_HEADER_GRADIENT_BOTTOM_2010 = 0x090A04; + + @Inject + @Override + public void draw2010Menu() + { + int x = getMenuX(); + int y = getMenuY(); + int w = getMenuWidth(); + int h = getMenuHeight(); + + // Outside border + RasterizerDrawHorizontalLine(x + 2, y, w - 4, MENU_BORDER_OUTER_2010); + RasterizerDrawHorizontalLine(x + 2, y + h - 1, w - 4, MENU_BORDER_OUTER_2010); + RasterizerDrawVerticalLine(x, y + 2, h - 4, MENU_BORDER_OUTER_2010); + RasterizerDrawVerticalLine(x + w - 1, y + 2, h - 4, MENU_BORDER_OUTER_2010); + + // Padding + RasterizerDrawRectangle(x + 1, y + 5, w - 2, h - 6, MENU_PADDING_2010); + RasterizerDrawHorizontalLine(x + 1, y + 17, w - 2, MENU_PADDING_2010); + RasterizerDrawCircle(x + 2, y + h - 3, 0, MENU_PADDING_2010); + RasterizerDrawCircle(x + w - 3, y + h - 3, 0, MENU_PADDING_2010); + + // Header + RasterizerDrawGradient(x + 2, y + 1, w - 4, 16, MENU_HEADER_GRADIENT_TOP_2010, MENU_HEADER_GRADIENT_BOTTOM_2010); + RasterizerFillRectangle(x + 1, y + 1, 2, 4, MENU_PADDING_2010); + RasterizerFillRectangle(x + w - 3, y + 1, 2, 4, MENU_PADDING_2010); + + // Inside border + RasterizerDrawHorizontalLine(x + 2, y + 18, w - 4, MENU_BORDER_INNER_2010); + RasterizerDrawHorizontalLine(x + 3, y + h - 3, w - 6, MENU_BORDER_INNER_2010); + RasterizerDrawVerticalLine(x + 2, y + 18, h - 21, MENU_BORDER_INNER_2010); + RasterizerDrawVerticalLine(x + w - 3, y + 18, h - 21, MENU_BORDER_INNER_2010); + + // Options background + RasterizerFillRectangle(x + 3, y + 19, w - 6, h - 22, MENU_BACKGROUND_2010); + + // Corner insets + RasterizerDrawCircle(x + 1, y + 1, 0, MENU_BORDER_OUTER_2010); + RasterizerDrawCircle(x + w - 2, y + 1, 0, MENU_BORDER_OUTER_2010); + RasterizerDrawCircle(x + 1, y + h - 2, 0, MENU_BORDER_OUTER_2010); + RasterizerDrawCircle(x + w - 2, y + h - 2, 0, MENU_BORDER_OUTER_2010); + + RSFont font = getFontBold12(); + font.drawTextLeftAligned("Choose Option", x + 3, y + 14, MENU_TEXT_2010, -1); + + int mouseX = getMouseX(); + int mouseY = getMouseY(); + + int count = getMenuOptionCount(); + String[] targets = getMenuTargets(); + String[] options = getMenuOptions(); + for (int i = 0; i < count; i++) + { + int rowY = y + (count - 1 - i) * 15 + 31; + + String s = options[i]; + if (!targets[i].isEmpty()) + { + s += " " + targets[i]; + } + + font.drawTextLeftAligned(s, x + 3, rowY, MENU_TEXT_2010, -1); + + // Highlight current option + if (mouseX > x && mouseX < w + x && mouseY > rowY - 13 && mouseY < rowY + 3) + { + RasterizerFillRectangleAlpha(x + 3, rowY - 12, w - 6, 15, 0xffffff, 80); + } + } + } +} 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 654e0048ea..b51376bb1a 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 @@ -932,4 +932,37 @@ public interface RSClient extends RSGameEngine, Client @Import("getEnum") RSEnum getRsEnum(int id); + + @Import("menuX") + int getMenuX(); + + @Import("menuY") + int getMenuY(); + + @Import("menuHeight") + int getMenuHeight(); + + @Import("menuWidth") + int getMenuWidth(); + + @Import("fontBold12") + RSFont getFontBold12(); + + @Import("drawHorizontalLine") + void RasterizerDrawHorizontalLine(int x, int y, int w, int rgb); + + @Import("drawVerticalLine") + void RasterizerDrawVerticalLine(int x, int y, int h, int rgb); + + @Import("drawGradient") + void RasterizerDrawGradient(int x, int y, int w, int h, int rgbTop, int rgbBottom); + + @Import("fillRectangleAlpha") + void RasterizerFillRectangleAlpha(int x, int y, int w, int h, int rgb, int a); + + @Import("drawRectangle") + void RasterizerDrawRectangle(int x, int y, int w, int h, int rgb); + + @Import("drawCircle") + void RasterizerDrawCircle(int x, int y, int r, int rgb); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSFont.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFont.java new file mode 100644 index 0000000000..243193302a --- /dev/null +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFont.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019, Ron Young + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.runelite.rs.api; + +public interface RSFont extends RSFontTypeFace +{ +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSFontTypeFace.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFontTypeFace.java index dca901798e..36fe246e0f 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSFontTypeFace.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFontTypeFace.java @@ -36,4 +36,7 @@ public interface RSFontTypeFace extends FontTypeFace @Import("verticalSpace") @Override int getBaseline(); + + @Import("drawTextLeftAligned") + void drawTextLeftAligned(String text, int x, int y, int fontColor, int shadowColor); }