From 6a63968ff55fefbb3f3e0b342b5161ae0c1823cd Mon Sep 17 00:00:00 2001 From: dekvall Date: Thu, 30 Apr 2020 06:25:31 +0200 Subject: [PATCH 1/3] interfacestyles: add support for menu alpha --- .../src/main/java/net/runelite/api/Client.java | 14 +++++++++++++- .../interfacestyles/InterfaceStylesConfig.java | 14 ++++++++++++++ .../interfacestyles/InterfaceStylesPlugin.java | 7 ++++++- 3 files changed, 33 insertions(+), 2 deletions(-) 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 3937457d61..d58414f2d9 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1706,7 +1706,19 @@ public interface Client extends GameEngine EnumComposition getEnum(int id); - void draw2010Menu(); + /** + * Draws a menu in the 2010 interface style. + * + * @param alpha background transparency of the menu + */ + void draw2010Menu(int alpha); + + /** + * Draws a menu in the OSRS interface style. + * + * @param alpha background transparency of the menu + */ + void drawOriginalMenu(int alpha); void resetHealthBarCaches(); 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 0d372602c4..3c14155710 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 @@ -29,6 +29,7 @@ package net.runelite.client.plugins.interfacestyles; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; +import net.runelite.client.config.Range; @ConfigGroup("interfaceStyles") public interface InterfaceStylesConfig extends Config @@ -82,4 +83,17 @@ public interface InterfaceStylesConfig extends Config { return false; } + + @Range( + max = 255 + ) + @ConfigItem( + keyName = "menuAlpha", + name = "Menu alpha", + description = "Configures the transparency of the right-click menu" + ) + default int menuAlpha() + { + return 255; + } } \ 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 a93206f1eb..48ee9313fa 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 @@ -175,7 +175,12 @@ public class InterfaceStylesPlugin extends Plugin { if (config.hdMenu()) { - client.draw2010Menu(); + client.draw2010Menu(config.menuAlpha()); + event.consume(); + } + else if (config.menuAlpha() != 255) + { + client.drawOriginalMenu(config.menuAlpha()); event.consume(); } } From 37760c977587910ce260d21d78317013fd642960 Mon Sep 17 00:00:00 2001 From: Melky <5113962+melkypie@users.noreply.github.com> Date: Fri, 15 May 2020 05:46:47 +0300 Subject: [PATCH 2/3] agility plugin: add config for Prifddinas portal color --- .../client/plugins/agility/AgilityConfig.java | 32 ++++++++++++++++--- .../plugins/agility/AgilityOverlay.java | 5 +++ .../client/plugins/agility/AgilityPlugin.java | 1 + .../client/plugins/agility/Obstacles.java | 5 ++- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java index c75b77b068..6e100b2bf9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityConfig.java @@ -122,11 +122,33 @@ public interface AgilityConfig extends Config return Color.RED; } + @ConfigItem( + keyName = "highlightPortals", + name = "Highlight Portals", + description = "Enable/disable the highlighting of Prifddinas portals", + position = 8 + ) + default boolean highlightPortals() + { + return true; + } + + @ConfigItem( + keyName = "portalsHighlight", + name = "Portals Highlight Color", + description = "Color of highlighted Prifddinas portals", + position = 9 + ) + default Color getPortalsColor() + { + return Color.MAGENTA; + } + @ConfigItem( keyName = "highlightShortcuts", name = "Highlight Agility Shortcuts", description = "Enable/disable the highlighting of Agility shortcuts", - position = 8 + position = 10 ) default boolean highlightShortcuts() { @@ -137,7 +159,7 @@ public interface AgilityConfig extends Config keyName = "trapOverlay", name = "Show Trap Overlay", description = "Enable/disable the highlighting of traps on Agility courses", - position = 9 + position = 11 ) default boolean showTrapOverlay() { @@ -148,7 +170,7 @@ public interface AgilityConfig extends Config keyName = "trapHighlight", name = "Trap Overlay Color", description = "Color of Agility trap overlay", - position = 10 + position = 12 ) default Color getTrapColor() { @@ -159,7 +181,7 @@ public interface AgilityConfig extends Config keyName = "agilityArenaNotifier", name = "Agility Arena notifier", description = "Notify on ticket location change in Agility Arena", - position = 11 + position = 13 ) default boolean notifyAgilityArena() { @@ -170,7 +192,7 @@ public interface AgilityConfig extends Config keyName = "agilityArenaTimer", name = "Agility Arena timer", description = "Configures whether Agility Arena timer is displayed", - position = 12 + position = 14 ) default boolean showAgilityArenaTimer() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java index 5a868b1b20..6f3bb34a34 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java @@ -103,6 +103,11 @@ class AgilityOverlay extends Overlay configColor = config.getMarkColor(); } + if (config.highlightPortals() && Obstacles.PORTAL_OBSTACLE_IDS.contains(object.getId())) + { + configColor = config.getPortalsColor(); + } + if (objectClickbox.contains(mousePosition.getX(), mousePosition.getY())) { graphics.setColor(configColor.darker()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java index 621af6ca1f..6752fbfdf4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java @@ -405,6 +405,7 @@ public class AgilityPlugin extends Plugin } if (Obstacles.COURSE_OBSTACLE_IDS.contains(newObject.getId()) || + Obstacles.PORTAL_OBSTACLE_IDS.contains(newObject.getId()) || (Obstacles.TRAP_OBSTACLE_IDS.contains(newObject.getId()) && Obstacles.TRAP_OBSTACLE_REGIONS.contains(newObject.getWorldLocation().getRegionID()))) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java index 71617848bc..7d500f4e03 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/Obstacles.java @@ -94,7 +94,10 @@ class Obstacles ZIP_LINE_11645, ZIP_LINE_11646, // Prifddinas LADDER_36221, TIGHTROPE_36225, CHIMNEY_36227, ROOF_EDGE, DARK_HOLE_36229, LADDER_36231, LADDER_36232, - ROPE_BRIDGE_36233, TIGHTROPE_36234, ROPE_BRIDGE_36235, TIGHTROPE_36236, TIGHTROPE_36237, DARK_HOLE_36238, + ROPE_BRIDGE_36233, TIGHTROPE_36234, ROPE_BRIDGE_36235, TIGHTROPE_36236, TIGHTROPE_36237, DARK_HOLE_36238 + ); + + static final Set PORTAL_OBSTACLE_IDS = ImmutableSet.of( // Prifddinas portals NULL_36241, NULL_36242, NULL_36243, NULL_36244, NULL_36245, NULL_36246 ); From 97011b7e36fbb3a374296565da4d9e5450d0487e Mon Sep 17 00:00:00 2001 From: Ganom Date: Thu, 14 May 2020 22:53:16 -0400 Subject: [PATCH 3/3] menumixin: add mixins for menu alpha. --- .../java/net/runelite/mixins/MenuMixin.java | 86 ++++++++++++++----- .../java/net/runelite/rs/api/RSClient.java | 15 ++++ 2 files changed, 80 insertions(+), 21 deletions(-) diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java index b35729e799..08919de99a 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java @@ -44,6 +44,7 @@ public abstract class MenuMixin implements RSClient 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; + private static final int ORIGINAL_BG = 0x5D5447; @Shadow("client") private static RSClient client; @@ -53,7 +54,7 @@ public abstract class MenuMixin implements RSClient @Inject @Override - public void draw2010Menu() + public void draw2010Menu(int alpha) { int x = getMenuX(); int y = getMenuY(); @@ -61,36 +62,36 @@ public abstract class MenuMixin implements RSClient 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); + rasterizerDrawHorizontalLineAlpha(x + 2, y, w - 4, MENU_BORDER_OUTER_2010, alpha); + rasterizerDrawHorizontalLineAlpha(x + 2, y + h - 1, w - 4, MENU_BORDER_OUTER_2010, alpha); + rasterizerDrawVerticalLineAlpha(x, y + 2, h - 4, MENU_BORDER_OUTER_2010, alpha); + rasterizerDrawVerticalLineAlpha(x + w - 1, y + 2, h - 4, MENU_BORDER_OUTER_2010, alpha); // 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); + rasterizerDrawRectangleAlpha(x + 1, y + 5, w - 2, h - 6, MENU_PADDING_2010, alpha); + rasterizerDrawHorizontalLineAlpha(x + 1, y + 17, w - 2, MENU_PADDING_2010, alpha); + rasterizerDrawCircleAlpha(x + 2, y + h - 3, 0, MENU_PADDING_2010, alpha); + rasterizerDrawCircleAlpha(x + w - 3, y + h - 3, 0, MENU_PADDING_2010, alpha); // 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); + rasterizerDrawGradientAlpha(x + 2, y + 1, w - 4, 16, MENU_HEADER_GRADIENT_TOP_2010, MENU_HEADER_GRADIENT_BOTTOM_2010, alpha, alpha); + rasterizerFillRectangleAlpha(x + 1, y + 1, 2, 4, MENU_PADDING_2010, alpha); + rasterizerFillRectangleAlpha(x + w - 3, y + 1, 2, 4, MENU_PADDING_2010, alpha); // 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); + rasterizerDrawHorizontalLineAlpha(x + 2, y + 18, w - 4, MENU_BORDER_INNER_2010, alpha); + rasterizerDrawHorizontalLineAlpha(x + 3, y + h - 3, w - 6, MENU_BORDER_INNER_2010, alpha); + rasterizerDrawVerticalLineAlpha(x + 2, y + 18, h - 21, MENU_BORDER_INNER_2010, alpha); + rasterizerDrawVerticalLineAlpha(x + w - 3, y + 18, h - 21, MENU_BORDER_INNER_2010, alpha); // Options background - rasterizerFillRectangle(x + 3, y + 19, w - 6, h - 22, MENU_BACKGROUND_2010); + rasterizerFillRectangleAlpha(x + 3, y + 19, w - 6, h - 22, MENU_BACKGROUND_2010, alpha); // 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); + rasterizerDrawCircleAlpha(x + 1, y + 1, 0, MENU_BORDER_OUTER_2010, alpha); + rasterizerDrawCircleAlpha(x + w - 2, y + 1, 0, MENU_BORDER_OUTER_2010, alpha); + rasterizerDrawCircleAlpha(x + 1, y + h - 2, 0, MENU_BORDER_OUTER_2010, alpha); + rasterizerDrawCircleAlpha(x + w - 2, y + h - 2, 0, MENU_BORDER_OUTER_2010, alpha); RSFont font = getFontBold12(); font.drawTextLeftAligned("Choose Option", x + 3, y + 14, MENU_TEXT_2010, -1); @@ -121,6 +122,47 @@ public abstract class MenuMixin implements RSClient } } + @Inject + @Override + public void drawOriginalMenu(int alpha) + { + int x = getMenuX(); + int y = getMenuY(); + int w = getMenuWidth(); + int h = getMenuHeight(); + rasterizerFillRectangleAlpha(x, y, w, h, ORIGINAL_BG, alpha); + rasterizerDrawRectangleAlpha(x, y, w, h, ORIGINAL_BG, alpha); + rasterizerFillRectangleAlpha(x + 1, y + 1, w - 2, 16, 0, alpha); + rasterizerDrawRectangleAlpha(x + 1, y + 18, w - 2, h - 19, 0, alpha); + RSFont font = getFontBold12(); + font.drawTextLeftAligned("Choose Option", x + 3, y + 14, ORIGINAL_BG, -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]; + } + + int highlight = 0xFFFFFF; + if (mouseX > x && mouseX < w + x && mouseY > rowY - 13 && mouseY < rowY + 3) + { + highlight = 0xFFFF00; + } + + font.drawTextLeftAligned(s, x + 3, rowY, highlight, -1); + } + } + @Inject @Override public MenuEntry getLeftClickMenuEntry() @@ -166,7 +208,9 @@ public abstract class MenuMixin implements RSClient public void setTempMenuEntry(MenuEntry entry) { if (entry == null || tempMenuAction == null) + { return; + } tempMenuAction.setOption(entry.getOption()); tempMenuAction.setOpcode(entry.getOpcode()); 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 17e3f69e34..cd705aba67 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 @@ -1009,21 +1009,36 @@ public interface RSClient extends RSGameShell, Client @Import("Rasterizer2D_drawHorizontalLine") void rasterizerDrawHorizontalLine(int x, int y, int w, int rgb); + @Import("Rasterizer2D_drawHorizontalLineAlpha") + void rasterizerDrawHorizontalLineAlpha(int x, int y, int w, int rgb, int a); + @Import("Rasterizer2D_drawVerticalLine") void rasterizerDrawVerticalLine(int x, int y, int h, int rgb); + @Import("Rasterizer2D_drawVerticalLineAlpha") + void rasterizerDrawVerticalLineAlpha(int x, int y, int h, int rgb, int a); + @Import("Rasterizer2D_fillRectangleGradient") void rasterizerDrawGradient(int x, int y, int w, int h, int rgbTop, int rgbBottom); + @Import("Rasterizer2D_fillRectangleGradientAlpha") + void rasterizerDrawGradientAlpha(int x, int y, int w, int h, int rgbTop, int rgbBottom, int alphaTop, int alphaBottom); + @Import("Rasterizer2D_fillRectangleAlpha") void rasterizerFillRectangleAlpha(int x, int y, int w, int h, int rgb, int a); @Import("Rasterizer2D_drawRectangle") void rasterizerDrawRectangle(int x, int y, int w, int h, int rgb); + @Import("Rasterizer2D_drawRectangleAlpha") + void rasterizerDrawRectangleAlpha(int x, int y, int w, int h, int rgb, int a); + @Import("drawCircle") void rasterizerDrawCircle(int x, int y, int r, int rgb); + @Import("Rasterizer2D_drawCircleAlpha") + void rasterizerDrawCircleAlpha(int x, int y, int r, int rgb, int a); + @Import("HealthBarDefinition_cached") RSEvictingDualNodeHashTable getHealthBarCache();