Added support for transparent text and border color customization to TextComponent, added font and alpha customization to the ground items plugin

This commit is contained in:
BuildTools
2019-03-12 11:47:11 +00:00
parent 167cc53cc1
commit 13e0baffe0
3 changed files with 70 additions and 22 deletions

View File

@@ -26,9 +26,11 @@
package net.runelite.client.plugins.grounditems; package net.runelite.client.plugins.grounditems;
import java.awt.Color; import java.awt.Color;
import net.runelite.client.config.Alpha;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
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 net.runelite.client.config.FontType;
import net.runelite.client.plugins.grounditems.config.ItemHighlightMode; import net.runelite.client.plugins.grounditems.config.ItemHighlightMode;
import net.runelite.client.plugins.grounditems.config.MenuHighlightMode; import net.runelite.client.plugins.grounditems.config.MenuHighlightMode;
import net.runelite.client.plugins.grounditems.config.PriceDisplayMode; import net.runelite.client.plugins.grounditems.config.PriceDisplayMode;
@@ -115,16 +117,16 @@ public interface GroundItemsConfig extends Config
{ {
return false; return false;
} }
@ConfigItem( @ConfigItem(
keyName = "highlightTiles", keyName = "highlightTiles",
name = "Highlight Tiles", name = "Highlight Tiles",
description = "Configures whether or not to highlight tiles containing ground items", description = "Configures whether or not to highlight tiles containing ground items",
position = 6 position = 6
) )
default boolean highlightTiles() default boolean highlightTiles()
{ {
return false; return false;
} }
@ConfigItem( @ConfigItem(
@@ -199,6 +201,7 @@ public interface GroundItemsConfig extends Config
description = "Configures the color for default, non-highlighted items", description = "Configures the color for default, non-highlighted items",
position = 13 position = 13
) )
@Alpha
default Color defaultColor() default Color defaultColor()
{ {
return Color.WHITE; return Color.WHITE;
@@ -210,6 +213,7 @@ public interface GroundItemsConfig extends Config
description = "Configures the color for highlighted items", description = "Configures the color for highlighted items",
position = 14 position = 14
) )
@Alpha
default Color highlightedColor() default Color highlightedColor()
{ {
return Color.decode("#AA00FF"); return Color.decode("#AA00FF");
@@ -221,6 +225,7 @@ public interface GroundItemsConfig extends Config
description = "Configures the color for hidden items in right-click menu and when holding ALT", description = "Configures the color for hidden items in right-click menu and when holding ALT",
position = 15 position = 15
) )
@Alpha
default Color hiddenColor() default Color hiddenColor()
{ {
return Color.GRAY; return Color.GRAY;
@@ -232,6 +237,7 @@ public interface GroundItemsConfig extends Config
description = "Configures the color for low value items", description = "Configures the color for low value items",
position = 16 position = 16
) )
@Alpha
default Color lowValueColor() default Color lowValueColor()
{ {
return Color.decode("#66B2FF"); return Color.decode("#66B2FF");
@@ -254,6 +260,7 @@ public interface GroundItemsConfig extends Config
description = "Configures the color for medium value items", description = "Configures the color for medium value items",
position = 18 position = 18
) )
@Alpha
default Color mediumValueColor() default Color mediumValueColor()
{ {
return Color.decode("#99FF99"); return Color.decode("#99FF99");
@@ -276,6 +283,7 @@ public interface GroundItemsConfig extends Config
description = "Configures the color for high value items", description = "Configures the color for high value items",
position = 20 position = 20
) )
@Alpha
default Color highValueColor() default Color highValueColor()
{ {
return Color.decode("#FF9600"); return Color.decode("#FF9600");
@@ -298,6 +306,7 @@ public interface GroundItemsConfig extends Config
description = "Configures the color for insane value items", description = "Configures the color for insane value items",
position = 22 position = 22
) )
@Alpha
default Color insaneValueColor() default Color insaneValueColor()
{ {
return Color.decode("#FF66B2"); return Color.decode("#FF66B2");
@@ -346,4 +355,15 @@ public interface GroundItemsConfig extends Config
{ {
return false; return false;
} }
}
@ConfigItem(
keyName = "fontType",
name = "Font type",
description = "Configures the font type to use when drawing items",
position = 27
)
default FontType fontStyle()
{
return FontType.REGULAR;
}
}

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.grounditems;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Polygon; import java.awt.Polygon;
@@ -94,8 +95,6 @@ public class GroundItemsOverlay extends Overlay
{ {
return null; return null;
} }
final FontMetrics fm = graphics.getFontMetrics();
final Player player = client.getLocalPlayer(); final Player player = client.getLocalPlayer();
if (player == null || client.getViewportWidget() == null) if (player == null || client.getViewportWidget() == null)
@@ -103,6 +102,13 @@ public class GroundItemsOverlay extends Overlay
return null; return null;
} }
final Font originalFont = graphics.getFont();
final Font font = config.fontStyle().getFont();
graphics.setFont(font);
final FontMetrics fm = graphics.getFontMetrics();
offsetMap.clear(); offsetMap.clear();
final LocalPoint localLocation = player.getLocalLocation(); final LocalPoint localLocation = player.getLocalLocation();
final Point mousePos = client.getMouseCanvasPosition(); final Point mousePos = client.getMouseCanvasPosition();
@@ -339,6 +345,8 @@ public class GroundItemsOverlay extends Overlay
textComponent.render(graphics); textComponent.render(graphics);
} }
graphics.setFont(originalFont);
return null; return null;
} }

View File

@@ -24,11 +24,15 @@
*/ */
package net.runelite.client.ui.overlay.components; package net.runelite.client.ui.overlay.components;
import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite;
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.awt.Point; import java.awt.Point;
import java.awt.Shape;
import java.awt.font.GlyphVector;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.ui.overlay.RenderableEntity; import net.runelite.client.ui.overlay.RenderableEntity;
@@ -43,6 +47,7 @@ public class TextComponent implements RenderableEntity
private String text; private String text;
private Point position = new Point(); private Point position = new Point();
private Color color = Color.WHITE; private Color color = Color.WHITE;
private Color borderColor = Color.BLACK;
public static String textWithoutColTags(String text) public static String textWithoutColTags(String text)
{ {
@@ -64,28 +69,43 @@ public class TextComponent implements RenderableEntity
final String textWithoutCol = textWithoutColTags(textSplitOnCol); final String textWithoutCol = textWithoutColTags(textSplitOnCol);
final String colColor = textSplitOnCol.substring(textSplitOnCol.indexOf("=") + 1, textSplitOnCol.indexOf(">")); final String colColor = textSplitOnCol.substring(textSplitOnCol.indexOf("=") + 1, textSplitOnCol.indexOf(">"));
// shadow renderText(graphics, x, position.y, textWithoutCol, Color.decode("#" + colColor), borderColor);
graphics.setColor(Color.BLACK);
graphics.drawString(textWithoutCol, x + 1, position.y + 1);
// actual text
graphics.setColor(Color.decode("#" + colColor));
graphics.drawString(textWithoutCol, x, position.y);
x += fontMetrics.stringWidth(textWithoutCol); x += fontMetrics.stringWidth(textWithoutCol);
} }
} }
else else
{ {
// shadow renderText(graphics, position.x, position.y, text, color, borderColor);
graphics.setColor(Color.BLACK);
graphics.drawString(text, position.x + 1, position.y + 1);
// actual text
graphics.setColor(color);
graphics.drawString(text, position.x, position.y);
} }
return new Dimension(fontMetrics.stringWidth(text), fontMetrics.getHeight()); return new Dimension(fontMetrics.stringWidth(text), fontMetrics.getHeight());
} }
private void renderText(Graphics2D graphics, int x, int y, String text, Color color, Color border)
{
// remember previous composite
Composite originalComposite = graphics.getComposite();
// create a vector of the text
GlyphVector vector = graphics.getFont().createGlyphVector(graphics.getFontRenderContext(), text);
// compute the text shape
Shape stroke = vector.getOutline(x + 1, y + 1);
Shape shape = vector.getOutline(x, y);
// draw text border
graphics.setColor(border);
graphics.fill(stroke);
// replace the pixels instead of overlaying
graphics.setComposite(AlphaComposite.Src);
// draw actual text
graphics.setColor(color);
graphics.fill(shape);
// reset composite to original
graphics.setComposite(originalComposite);
}
} }