Fix mouse highlight and add custom border color (#162)
* Fix hover to show item being used on objects * Add custom color for border * Replace hex2rgb with Color.decode
This commit is contained in:
@@ -27,6 +27,8 @@ package net.runelite.client.plugins.mousehighlight;
|
|||||||
import net.runelite.client.config.ConfigGroup;
|
import net.runelite.client.config.ConfigGroup;
|
||||||
import net.runelite.client.config.ConfigItem;
|
import net.runelite.client.config.ConfigItem;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
@ConfigGroup(
|
@ConfigGroup(
|
||||||
keyName = "mousehighlight",
|
keyName = "mousehighlight",
|
||||||
name = "Mouse Highlighting",
|
name = "Mouse Highlighting",
|
||||||
@@ -43,4 +45,14 @@ public interface MouseHighlightConfig
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConfigItem(
|
||||||
|
keyName = "border",
|
||||||
|
name = "Border Color",
|
||||||
|
description = "Color of the mouse hover border"
|
||||||
|
)
|
||||||
|
default Color borderColor()
|
||||||
|
{
|
||||||
|
return Color.cyan;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ import java.awt.Color;
|
|||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.FontMetrics;
|
import java.awt.FontMetrics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
@@ -41,7 +43,7 @@ class MouseHighlightOverlay extends Overlay
|
|||||||
{
|
{
|
||||||
// Grabs the colour and name from a target string
|
// Grabs the colour and name from a target string
|
||||||
// <col=ffffff>Player1
|
// <col=ffffff>Player1
|
||||||
private final Pattern p = Pattern.compile("^<col=([^>]+)>([^<]*)");
|
private final Pattern p = Pattern.compile("<col=([^>]+)>([^<]*)");
|
||||||
private final MouseHighlightConfig config;
|
private final MouseHighlightConfig config;
|
||||||
|
|
||||||
MouseHighlightOverlay(MouseHighlight plugin)
|
MouseHighlightOverlay(MouseHighlight plugin)
|
||||||
@@ -91,14 +93,21 @@ class MouseHighlightOverlay extends Overlay
|
|||||||
}
|
}
|
||||||
|
|
||||||
Matcher m = p.matcher(target);
|
Matcher m = p.matcher(target);
|
||||||
if (!m.find())
|
|
||||||
|
List<String> parts = new ArrayList<>();
|
||||||
|
List<String> colours = new ArrayList<>();
|
||||||
|
|
||||||
|
while (m.find())
|
||||||
|
{
|
||||||
|
colours.add(m.group(1));
|
||||||
|
parts.add(m.group(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parts.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String colour = m.group(1);
|
|
||||||
String matchedTarget = m.group(2);
|
|
||||||
|
|
||||||
// Remove colour text from option
|
// Remove colour text from option
|
||||||
option = option.replaceAll("<col=([^>]+)>", "");
|
option = option.replaceAll("<col=([^>]+)>", "");
|
||||||
|
|
||||||
@@ -109,7 +118,11 @@ class MouseHighlightOverlay extends Overlay
|
|||||||
FontMetrics fm = graphics.getFontMetrics();
|
FontMetrics fm = graphics.getFontMetrics();
|
||||||
// Gets the widths of the various strings we will be displaying
|
// Gets the widths of the various strings we will be displaying
|
||||||
int option_width = fm.stringWidth(option + " ");
|
int option_width = fm.stringWidth(option + " ");
|
||||||
int total_width = option_width + fm.stringWidth(matchedTarget);
|
int total_width = option_width;
|
||||||
|
for (String part : parts)
|
||||||
|
{
|
||||||
|
total_width += fm.stringWidth(part);
|
||||||
|
}
|
||||||
int height = fm.getHeight();
|
int height = fm.getHeight();
|
||||||
|
|
||||||
x -= total_width + 6; // Draw to the left of the mouse
|
x -= total_width + 6; // Draw to the left of the mouse
|
||||||
@@ -132,7 +145,7 @@ class MouseHighlightOverlay extends Overlay
|
|||||||
graphics.fillRect(x, y - (height / 2), total_width + 6, height);
|
graphics.fillRect(x, y - (height / 2), total_width + 6, height);
|
||||||
|
|
||||||
// Draws the outline of the rect
|
// Draws the outline of the rect
|
||||||
graphics.setColor(Color.cyan);
|
graphics.setColor(config.borderColor());
|
||||||
graphics.drawRect(x, y - (height / 2), total_width + 6, height);
|
graphics.drawRect(x, y - (height / 2), total_width + 6, height);
|
||||||
x += 3;
|
x += 3;
|
||||||
y += 5;
|
y += 5;
|
||||||
@@ -140,25 +153,20 @@ class MouseHighlightOverlay extends Overlay
|
|||||||
graphics.setColor(Color.white);
|
graphics.setColor(Color.white);
|
||||||
// Draws the option (Use, Walk here, Wield)
|
// Draws the option (Use, Walk here, Wield)
|
||||||
graphics.drawString(option + " ", x, y);
|
graphics.drawString(option + " ", x, y);
|
||||||
// Sets the string colour to the colour the game uses.
|
// Write text
|
||||||
graphics.setColor(hex2rgb(colour));
|
int parts_width = 0;
|
||||||
// Draws the target (Player, item)
|
for (int i = 0; i < parts.size(); i++)
|
||||||
graphics.drawString(matchedTarget, x + option_width, y);
|
{
|
||||||
|
// 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);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Color hex2rgb(String col)
|
|
||||||
{
|
|
||||||
if (col.length() < 6)
|
|
||||||
{
|
|
||||||
return new Color(0, 255, 255);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Color(
|
|
||||||
Integer.valueOf(col.substring(0, 2), 16),
|
|
||||||
Integer.valueOf(col.substring(2, 4), 16),
|
|
||||||
Integer.valueOf(col.substring(4, 6), 16)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user