diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java index aaa220c0ca..43bd0abc4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java @@ -24,27 +24,25 @@ */ package net.runelite.client.plugins.mousehighlight; -import java.awt.Color; import java.awt.Dimension; -import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.api.Point; import net.runelite.client.RuneLite; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.tooltips.Tooltip; +import net.runelite.client.ui.overlay.tooltips.TooltipPriority; +import net.runelite.client.ui.overlay.tooltips.TooltipRenderer; class MouseHighlightOverlay extends Overlay { // Grabs the colour and name from a target string // Player1 - private final Pattern p = Pattern.compile("]+)>([^<]*)"); private final MouseHighlightConfig config; + private final Client client = RuneLite.getClient(); + private final RuneLite runelite = RuneLite.getRunelite(); + private final TooltipRenderer tooltipRenderer = runelite.getRenderer().getTooltipRenderer(); MouseHighlightOverlay(MouseHighlight plugin) { @@ -54,8 +52,6 @@ class MouseHighlightOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - Client client = RuneLite.getClient(); - if (client.getGameState() != GameState.LOGGED_IN || !config.enabled()) { return null; @@ -92,95 +88,9 @@ class MouseHighlightOverlay extends Overlay return null; } - Matcher m = p.matcher(target); - - List parts = new ArrayList<>(); - List colours = new ArrayList<>(); - - while (m.find()) - { - colours.add(m.group(1)); - parts.add(m.group(2)); - } - - if (parts.isEmpty()) - { - return null; - } - - // Remove colour text from option - option = option.replaceAll("]+)>", ""); - - Point mouse = client.getMouseCanvasPosition(); - int x = mouse.getX(); - int y = mouse.getY(); - - FontMetrics fm = graphics.getFontMetrics(); - // Gets the widths of the various strings we will be displaying - int option_width = fm.stringWidth(option + " "); - int total_width = option_width; - for (String part : parts) - { - total_width += fm.stringWidth(part); - } - int height = fm.getHeight(); - - if (config.display_left()) - { - x -= total_width + 6; // Draw to the left of the mouse - - // Don't draw off of the screen (left) - if (x < 0) - { - x = 0; - } - } - else - { - // Don't draw off of the screen (right) - int canvas_width = client.getCanvas().getWidth(); - if (x + total_width + 7 > canvas_width) - { - x = canvas_width - total_width - 7; - } - } - - y -= height / 2; // Draw slightly above the mouse - - // Don't draw off of the screen (top) - if (y < height / 2) - { - y = height / 2; - } - - Color gray = new Color(Color.darkGray.getRed(), Color.darkGray.getGreen(), Color.darkGray.getBlue(), 190); - graphics.setColor(gray); - - // Draws the background rect - graphics.fillRect(x, y - (height / 2), total_width + 6, height); - - // Draws the outline of the rect - graphics.setColor(config.borderColor()); - graphics.drawRect(x, y - (height / 2), total_width + 6, height); - x += 3; - y += 5; - - graphics.setColor(Color.white); - // Draws the option (Use, Walk here, Wield) - graphics.drawString(option + " ", x, y); - // Write text - int parts_width = 0; - for (int i = 0; i < parts.size(); i++) - { - // Sets the string colour to the colour the game uses. - graphics.setColor(Color.decode("#" + colours.get(i))); - // Draws the target (Player, item) - graphics.drawString(parts.get(i), x + option_width + parts_width, y); - - parts_width += fm.stringWidth(parts.get(i)); - } - - graphics.setColor(Color.white); + Tooltip tooltip = new Tooltip(TooltipPriority.LOW, + option + " " + target); + tooltipRenderer.add(tooltip); return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RuneImageCache.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RuneImageCache.java index d36a66af4f..6097ed2873 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RuneImageCache.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RuneImageCache.java @@ -96,4 +96,9 @@ public class RuneImageCache return null; } } + + public String getName(int runeId) + { + return RUNE_NAMES[runeId]; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java index f335ef7abf..52493d2363 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java @@ -42,6 +42,9 @@ import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayUtil; +import net.runelite.client.ui.overlay.tooltips.Tooltip; +import net.runelite.client.ui.overlay.tooltips.TooltipPriority; +import net.runelite.client.ui.overlay.tooltips.TooltipRenderer; public class RunepouchOverlay extends Overlay { @@ -56,6 +59,7 @@ public class RunepouchOverlay extends Overlay private final Client client = RuneLite.getClient(); private final RuneLite runelite = RuneLite.getRunelite(); + private final TooltipRenderer toolripRenderer = new TooltipRenderer(); private final RuneImageCache runeImageCache = new RuneImageCache(); private final RunepouchConfig config; @@ -93,10 +97,10 @@ public class RunepouchOverlay extends Overlay graphics.setFont(FontManager.getRunescapeSmallFont()); + StringBuilder tooltipBuilder = new StringBuilder(); for (int i = 0; i < AMOUNT_VARBITS.length; i++) { Varbits amountVarbit = AMOUNT_VARBITS[i]; - Varbits runeVarbit = RUNE_VARBITS[i]; int amount = client.getSetting(amountVarbit); if (amount <= 0) @@ -104,6 +108,9 @@ public class RunepouchOverlay extends Overlay continue; } + Varbits runeVarbit = RUNE_VARBITS[i]; + int runeId = client.getSetting(runeVarbit); + graphics.setColor(Color.black); graphics.drawString("" + formatNumber(amount), location.getX() + (config.showIcons() ? 13 : 1), location.getY() + 14 + graphics.getFontMetrics().getHeight() * i); @@ -112,13 +119,17 @@ public class RunepouchOverlay extends Overlay graphics.drawString("" + formatNumber(amount), location.getX() + (config.showIcons() ? 12 : 0), location.getY() + 13 + graphics.getFontMetrics().getHeight() * i); + tooltipBuilder + .append(amount) + .append(" ") + .append(runeImageCache.getName(runeId)) + .append("
"); + if (!config.showIcons()) { continue; } - int runeId = client.getSetting(runeVarbit); - BufferedImage runeImg = runeImageCache.getImage(runeId); if (runeImg != null) { @@ -127,6 +138,13 @@ public class RunepouchOverlay extends Overlay runeImg); } } + + if (runePouch.getCanvasBounds().contains(client.getMouseCanvasPosition().getX(), client.getMouseCanvasPosition().getY())) + { + String tooltipText = tooltipBuilder.toString(); + Tooltip tooltip = new Tooltip(TooltipPriority.HIGH, tooltipText); + toolripRenderer.add(tooltip); + } return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Slayer.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Slayer.java index fbbfbc6c81..9a6e0043cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Slayer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Slayer.java @@ -280,7 +280,8 @@ public class Slayer extends Plugin BufferedImage taskImg = runelite.getItemManager().getImage(itemSpriteId); counter = new TaskCounter(taskImg, amount); - counter.setTooltip(capsString(taskName)); + counter.setTooltip(String.format("%s
Pts: %s
Streak: %s", + capsString(taskName), points, streak)); infoBoxManager.addInfoBox(counter); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java index 0457a61813..cd1e5e9ec0 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java @@ -39,6 +39,9 @@ import net.runelite.client.RuneLite; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.tooltips.Tooltip; +import net.runelite.client.ui.overlay.tooltips.TooltipPriority; +import net.runelite.client.ui.overlay.tooltips.TooltipRenderer; public class InfoBoxOverlay extends Overlay { @@ -48,10 +51,12 @@ public class InfoBoxOverlay extends Overlay private final RuneLite runelite = RuneLite.getRunelite(); private final Client client = RuneLite.getClient(); + private final TooltipRenderer tooltipRenderer; - public InfoBoxOverlay() + public InfoBoxOverlay(TooltipRenderer tooltipRenderer) { super(OverlayPosition.TOP_LEFT, OverlayPriority.LOW); + this.tooltipRenderer = tooltipRenderer; } @Override @@ -114,8 +119,8 @@ public class InfoBoxOverlay extends Overlay continue; } - String tooltip = box.getTooltip(); - if (tooltip == null || tooltip.isEmpty()) + String tooltipText = box.getTooltip(); + if (tooltipText == null || tooltipText.isEmpty()) { x += BOXSIZE + SEPARATOR; continue; @@ -124,26 +129,9 @@ public class InfoBoxOverlay extends Overlay Rectangle infoboxBounds = new Rectangle((int) overlayBounds.getX() + x, (int) overlayBounds.getY(), BOXSIZE, BOXSIZE); if (infoboxBounds.contains(mouseX, mouseY)) { - int tooltipWidth = metrics.stringWidth(tooltip); - int height = metrics.getHeight(); - - int tooltipY = mouseY - (int) infoboxBounds.getY(); - if (tooltipY - height < 0) - tooltipY = height; - - Color gray = new Color(Color.darkGray.getRed(), Color.darkGray.getGreen(), Color.darkGray.getBlue(), 190); - graphics.setColor(gray); - - // Draws the background rect - graphics.fillRect(mouseX, tooltipY - height, tooltipWidth + 6, height); - - // Draws the outline of the rect - graphics.setColor(Color.yellow); - graphics.drawRect(mouseX, tooltipY - height, tooltipWidth + 6, height); - - // Tooltip text - graphics.setColor(Color.WHITE); - graphics.drawString(tooltip, mouseX + 3, tooltipY - height / 2 + 5); + Tooltip tooltip = new Tooltip(TooltipPriority.HIGH, + tooltipText); + tooltipRenderer.add(tooltip); } x += BOXSIZE + SEPARATOR;