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:
Tyler Hardy
2017-10-09 20:17:16 -05:00
committed by Adam
parent 34d277c169
commit b05fc2e83e
2 changed files with 45 additions and 25 deletions

View File

@@ -27,6 +27,8 @@ package net.runelite.client.plugins.mousehighlight;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
import java.awt.Color;
@ConfigGroup(
keyName = "mousehighlight",
name = "Mouse Highlighting",
@@ -43,4 +45,14 @@ public interface MouseHighlightConfig
{
return true;
}
@ConfigItem(
keyName = "border",
name = "Border Color",
description = "Color of the mouse hover border"
)
default Color borderColor()
{
return Color.cyan;
}
}

View File

@@ -28,6 +28,8 @@ 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;
@@ -41,7 +43,7 @@ class MouseHighlightOverlay extends Overlay
{
// Grabs the colour and name from a target string
// <col=ffffff>Player1
private final Pattern p = Pattern.compile("^<col=([^>]+)>([^<]*)");
private final Pattern p = Pattern.compile("<col=([^>]+)>([^<]*)");
private final MouseHighlightConfig config;
MouseHighlightOverlay(MouseHighlight plugin)
@@ -91,14 +93,21 @@ class MouseHighlightOverlay extends Overlay
}
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;
}
String colour = m.group(1);
String matchedTarget = m.group(2);
// Remove colour text from option
option = option.replaceAll("<col=([^>]+)>", "");
@@ -109,7 +118,11 @@ class MouseHighlightOverlay extends Overlay
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 + fm.stringWidth(matchedTarget);
int total_width = option_width;
for (String part : parts)
{
total_width += fm.stringWidth(part);
}
int height = fm.getHeight();
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);
// Draws the outline of the rect
graphics.setColor(Color.cyan);
graphics.setColor(config.borderColor());
graphics.drawRect(x, y - (height / 2), total_width + 6, height);
x += 3;
y += 5;
@@ -140,25 +153,20 @@ class MouseHighlightOverlay extends Overlay
graphics.setColor(Color.white);
// Draws the option (Use, Walk here, Wield)
graphics.drawString(option + " ", x, y);
// Sets the string colour to the colour the game uses.
graphics.setColor(hex2rgb(colour));
// Draws the target (Player, item)
graphics.drawString(matchedTarget, x + option_width, 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);
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)
);
}
}