Cleanup overlay logic after native-ui changes

- Remove unnecessary derivations of runescapeSmallFont
- Render overlays in "safe" environment (restore original font and
tranform after overlay rendering is done)
- Use TextComponent at more places
- Remove unnecessary setting of default font in VolcanicMineOverlay
- Change RenderableEntity from abstract class to interface
- Remove unused tooltip configuration from RuneliteConfig
- Use viewportWidget instead of chatbox widget for positioning the
overlay groups (thanks to Devin for tip)

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2017-12-14 16:49:08 +01:00
parent ebc52ed680
commit 4d8dde760f
15 changed files with 72 additions and 140 deletions

View File

@@ -31,16 +31,6 @@ package net.runelite.client.config;
) )
public interface RuneliteConfig extends Config public interface RuneliteConfig extends Config
{ {
@ConfigItem(
keyName = "tooltipLeft",
name = "Tooltip left of mouse?",
description = "Places the tooltip on the left side of the mouse"
)
default boolean tooltipLeft()
{
return false;
}
@ConfigItem( @ConfigItem(
keyName = "chatCommandsRecolorEnabled", keyName = "chatCommandsRecolorEnabled",
name = "Enable chat commands recolor", name = "Enable chat commands recolor",

View File

@@ -48,6 +48,7 @@ import net.runelite.api.Region;
import net.runelite.api.Tile; import net.runelite.api.Tile;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.item.ItemPrice;
@@ -140,6 +141,8 @@ public class GroundItemsOverlay extends Overlay
return null; return null;
} }
graphics.setFont(FontManager.getRunescapeSmallFont());
int z = client.getPlane(); int z = client.getPlane();
for (int x = 0; x < REGION_SIZE; x++) for (int x = 0; x < REGION_SIZE; x++)

View File

@@ -24,10 +24,7 @@
*/ */
package net.runelite.client.plugins.jewellerycount; package net.runelite.client.plugins.jewellerycount;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
@@ -35,7 +32,6 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.Query; import net.runelite.api.Query;
import net.runelite.api.queries.EquipmentItemQuery; import net.runelite.api.queries.EquipmentItemQuery;
import net.runelite.api.queries.InventoryItemQuery; import net.runelite.api.queries.InventoryItemQuery;
@@ -45,20 +41,18 @@ import net.runelite.client.RuneLite;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.TextComponent;
class JewelleryCountOverlay extends Overlay class JewelleryCountOverlay extends Overlay
{ {
private final RuneLite runelite; private final RuneLite runelite;
private final Client client;
private final JewelleryCountConfig config; private final JewelleryCountConfig config;
private final Font font = FontManager.getRunescapeSmallFont().deriveFont(Font.PLAIN, 16);
@Inject @Inject
JewelleryCountOverlay(RuneLite runelite, JewelleryCountConfig config) JewelleryCountOverlay(RuneLite runelite, JewelleryCountConfig config)
{ {
setPosition(OverlayPosition.DYNAMIC); setPosition(OverlayPosition.DYNAMIC);
this.runelite = runelite; this.runelite = runelite;
this.client = runelite.getClient();
this.config = config; this.config = config;
this.setDrawOverBankScreen(true); this.setDrawOverBankScreen(true);
} }
@@ -71,7 +65,7 @@ class JewelleryCountOverlay extends Overlay
return null; return null;
} }
graphics.setFont(font); graphics.setFont(FontManager.getRunescapeSmallFont());
for (WidgetItem item : getJewelleryWidgetItems()) for (WidgetItem item : getJewelleryWidgetItems())
{ {
@@ -82,8 +76,11 @@ class JewelleryCountOverlay extends Overlay
continue; continue;
} }
renderWidgetText(graphics, item.getCanvasBounds(), charges.getCharges(), Color.white); final Rectangle bounds = item.getCanvasBounds();
final TextComponent textComponent = new TextComponent();
textComponent.setPosition(new Point(bounds.x, bounds.y + 16));
textComponent.setText(String.valueOf(charges.getCharges()));
textComponent.render(graphics, parent);
} }
return null; return null;
@@ -106,20 +103,4 @@ class JewelleryCountOverlay extends Overlay
jewellery.addAll(Arrays.asList(equipmentWidgetItems)); jewellery.addAll(Arrays.asList(equipmentWidgetItems));
return jewellery; return jewellery;
} }
private void renderWidgetText(Graphics2D graphics, Rectangle bounds, int charges, Color color)
{
FontMetrics fm = graphics.getFontMetrics();
int textX = (int) bounds.getX();
int textY = (int) bounds.getY() + fm.getHeight();
//text shadow
graphics.setColor(Color.BLACK);
graphics.drawString(String.valueOf(charges), textX + 1, textY + 1);
graphics.setColor(color);
graphics.drawString(String.valueOf(charges), textX, textY);
}
} }

View File

@@ -28,8 +28,6 @@ package net.runelite.client.plugins.runecraft;
import static net.runelite.api.ItemID.BINDING_NECKLACE; import static net.runelite.api.ItemID.BINDING_NECKLACE;
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.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
@@ -37,7 +35,6 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.Query; import net.runelite.api.Query;
import net.runelite.api.queries.EquipmentItemQuery; import net.runelite.api.queries.EquipmentItemQuery;
import net.runelite.api.queries.InventoryItemQuery; import net.runelite.api.queries.InventoryItemQuery;
@@ -47,13 +44,12 @@ import net.runelite.client.RuneLite;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.TextComponent;
public class BindNeckOverlay extends Overlay public class BindNeckOverlay extends Overlay
{ {
private final RuneLite runelite; private final RuneLite runelite;
private final Client client;
private final RunecraftConfig config; private final RunecraftConfig config;
private final Font font = FontManager.getRunescapeSmallFont().deriveFont(Font.PLAIN, 16);
int bindingCharges; int bindingCharges;
@Inject @Inject
@@ -61,7 +57,6 @@ public class BindNeckOverlay extends Overlay
{ {
setPosition(OverlayPosition.DYNAMIC); setPosition(OverlayPosition.DYNAMIC);
this.runelite = runelite; this.runelite = runelite;
this.client = runelite.getClient();
this.config = config; this.config = config;
this.setDrawOverBankScreen(true); this.setDrawOverBankScreen(true);
} }
@@ -74,12 +69,19 @@ public class BindNeckOverlay extends Overlay
return null; return null;
} }
graphics.setFont(font); graphics.setFont(FontManager.getRunescapeSmallFont());
for (WidgetItem necklace : getNecklaceWidgetItems()) for (WidgetItem necklace : getNecklaceWidgetItems())
{ {
Color color = bindingCharges == 1 ? Color.RED : Color.WHITE; final Color color = bindingCharges == 1 ? Color.RED : Color.WHITE;
renderBindNeck(graphics, necklace.getCanvasBounds(), bindingCharges, color); final Rectangle bounds = necklace.getCanvasBounds();
final String text = bindingCharges <= 0 ? "?" : bindingCharges + "";
final TextComponent textComponent = new TextComponent();
textComponent.setPosition(new Point(bounds.x, bounds.y + 16));
textComponent.setText(text);
textComponent.setColor(color);
textComponent.render(graphics, parent);
} }
return null; return null;
@@ -101,20 +103,4 @@ public class BindNeckOverlay extends Overlay
necklaces.addAll(Arrays.asList(equipmentWidgetItems)); necklaces.addAll(Arrays.asList(equipmentWidgetItems));
return necklaces; return necklaces;
} }
private void renderBindNeck(Graphics2D graphics, Rectangle bounds, int charges, Color color)
{
String text = charges <= 0 ? "?" : charges + "";
FontMetrics fm = graphics.getFontMetrics();
int textX = (int) bounds.getX();
int textY = (int) bounds.getY() + fm.getHeight();
//text shadow
graphics.setColor(Color.BLACK);
graphics.drawString(text, textX + 1, textY + 1);
graphics.setColor(color);
graphics.drawString(text, textX, textY);
}
} }

View File

@@ -24,10 +24,7 @@
*/ */
package net.runelite.client.plugins.runecraft; package net.runelite.client.plugins.runecraft;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
@@ -42,6 +39,7 @@ import net.runelite.client.RuneLite;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.TextComponent;
public class RunecraftOverlay extends Overlay public class RunecraftOverlay extends Overlay
{ {
@@ -51,7 +49,6 @@ public class RunecraftOverlay extends Overlay
private final RuneLite runelite; private final RuneLite runelite;
private final Client client; private final Client client;
private final Font font = FontManager.getRunescapeSmallFont().deriveFont(Font.PLAIN, 16);
private final RunecraftConfig config; private final RunecraftConfig config;
@@ -73,10 +70,10 @@ public class RunecraftOverlay extends Overlay
return null; return null;
} }
graphics.setFont(font);
Query query = new InventoryItemQuery(); Query query = new InventoryItemQuery();
WidgetItem[] widgetItems = runelite.runQuery(query); WidgetItem[] widgetItems = runelite.runQuery(query);
graphics.setFont(FontManager.getRunescapeSmallFont());
for (WidgetItem item : widgetItems) for (WidgetItem item : widgetItems)
{ {
Varbits varbits; Varbits varbits;
@@ -102,25 +99,13 @@ public class RunecraftOverlay extends Overlay
continue; continue;
} }
renderPouch(graphics, item.getCanvasBounds(), varbits, Color.WHITE); final Rectangle bounds = item.getCanvasBounds();
final TextComponent textComponent = new TextComponent();
textComponent.setPosition(new Point(bounds.x, bounds.y + 16));
textComponent.setText(String.valueOf(client.getSetting(varbits)));
textComponent.render(graphics, parent);
} }
return null; return null;
} }
private void renderPouch(Graphics2D graphics, Rectangle bounds, Varbits varbits, Color color)
{
FontMetrics fm = graphics.getFontMetrics();
int textX = (int) bounds.getX();
int textY = (int) bounds.getY() + fm.getHeight();
int contents = client.getSetting(varbits);
//text shadow
graphics.setColor(Color.BLACK);
graphics.drawString(String.valueOf(contents), textX + 1, textY + 1);
graphics.setColor(color);
graphics.drawString(String.valueOf(contents), textX, textY);
}
} }

View File

@@ -27,17 +27,13 @@ package net.runelite.client.plugins.slayer;
import static com.google.common.collect.ObjectArrays.concat; import static com.google.common.collect.ObjectArrays.concat;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.util.Collection; import java.util.Collection;
import java.util.Set; import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.ItemID; import net.runelite.api.ItemID;
import net.runelite.api.Query; import net.runelite.api.Query;
import net.runelite.api.queries.EquipmentItemQuery; import net.runelite.api.queries.EquipmentItemQuery;
@@ -48,14 +44,13 @@ import net.runelite.client.RuneLite;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.components.TextComponent;
class SlayerOverlay extends Overlay class SlayerOverlay extends Overlay
{ {
private final RuneLite runelite; private final RuneLite runelite;
private final Client client;
private final SlayerConfig config; private final SlayerConfig config;
private final SlayerPlugin plugin; private final SlayerPlugin plugin;
private final Font font = FontManager.getRunescapeSmallFont().deriveFont(Font.PLAIN, 16);
private final Set<Integer> slayerJewelry = Sets.newHashSet( private final Set<Integer> slayerJewelry = Sets.newHashSet(
ItemID.SLAYER_RING_1, ItemID.SLAYER_RING_1,
@@ -89,7 +84,6 @@ class SlayerOverlay extends Overlay
{ {
setPosition(OverlayPosition.DYNAMIC); setPosition(OverlayPosition.DYNAMIC);
this.runelite = runelite; this.runelite = runelite;
this.client = runelite.getClient();
this.plugin = plugin; this.plugin = plugin;
this.config = config; this.config = config;
} }
@@ -113,7 +107,7 @@ class SlayerOverlay extends Overlay
return null; return null;
} }
graphics.setFont(font); graphics.setFont(FontManager.getRunescapeSmallFont());
for (WidgetItem item : getSlayerWidgetItems()) for (WidgetItem item : getSlayerWidgetItems())
{ {
@@ -124,7 +118,12 @@ class SlayerOverlay extends Overlay
continue; continue;
} }
renderWidgetText(graphics, itemId, item.getCanvasBounds(), amount, Color.white); final Rectangle bounds = item.getCanvasBounds();
final TextComponent textComponent = new TextComponent();
textComponent.setText(String.valueOf(amount));
textComponent.setPosition(new Point(bounds.x, (slayerJewelry.contains(itemId)
? bounds.x
: 16 )));
} }
return null; return null;
@@ -141,19 +140,4 @@ class SlayerOverlay extends Overlay
WidgetItem[] items = concat(inventoryWidgetItems, equipmentWidgetItems, WidgetItem.class); WidgetItem[] items = concat(inventoryWidgetItems, equipmentWidgetItems, WidgetItem.class);
return ImmutableList.copyOf(items); return ImmutableList.copyOf(items);
} }
private void renderWidgetText(Graphics2D graphics, int itemId, Rectangle bounds, int amount, Color color)
{
FontMetrics fm = graphics.getFontMetrics();
int textX = (int) bounds.getX();
int textY = (int) bounds.getY() + (slayerJewelry.contains(itemId) ? (int) bounds.getHeight() : fm.getHeight());
//text shadow
graphics.setColor(Color.BLACK);
graphics.drawString(String.valueOf(amount), textX + 1, textY + 1);
graphics.setColor(color);
graphics.drawString(String.valueOf(amount), textX, textY);
}
} }

View File

@@ -27,7 +27,6 @@ package net.runelite.client.plugins.volcanicmine;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Image; import java.awt.Image;
import java.awt.Polygon; import java.awt.Polygon;
@@ -47,7 +46,6 @@ import net.runelite.api.Point;
import net.runelite.api.Prayer; import net.runelite.api.Prayer;
import net.runelite.api.Region; import net.runelite.api.Region;
import net.runelite.api.Tile; import net.runelite.api.Tile;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import net.runelite.client.ui.overlay.OverlayUtil; import net.runelite.client.ui.overlay.OverlayUtil;
@@ -86,11 +84,6 @@ public class VolcanicMineOverlay extends Overlay
return null; return null;
} }
Font font = FontManager.getRunescapeFont();
if (font != null)
{
graphics.setFont(font);
}
renderTileObjects(graphics); renderTileObjects(graphics);
renderRangePrayer(graphics); renderRangePrayer(graphics);
return null; return null;

View File

@@ -27,7 +27,7 @@ package net.runelite.client.ui.overlay;
import lombok.Data; import lombok.Data;
@Data @Data
public abstract class Overlay extends RenderableEntity public abstract class Overlay implements RenderableEntity
{ {
private OverlayPosition position = OverlayPosition.TOP_LEFT; private OverlayPosition position = OverlayPosition.TOP_LEFT;
private OverlayPriority priority = OverlayPriority.NONE; private OverlayPriority priority = OverlayPriority.NONE;

View File

@@ -28,9 +28,11 @@ import com.google.common.base.MoreObjects;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -55,7 +57,7 @@ public class OverlayRenderer
{ {
private static final int BORDER_TOP = 25; private static final int BORDER_TOP = 25;
private static final int BORDER_LEFT = 5; private static final int BORDER_LEFT = 5;
private static final int BORDER_RIGHT = 5; private static final int BORDER_RIGHT = 2;
private static final int BORDER_BOTTOM = 2; private static final int BORDER_BOTTOM = 2;
private static final int PADDING = 2; private static final int PADDING = 2;
@@ -72,7 +74,6 @@ public class OverlayRenderer
TooltipOverlay tooltipOverlay; TooltipOverlay tooltipOverlay;
private final List<Overlay> overlays = new ArrayList<>(); private final List<Overlay> overlays = new ArrayList<>();
private final Rectangle chatboxBounds = new Rectangle();
private BufferedImage surface; private BufferedImage surface;
private Graphics2D surfaceGraphics; private Graphics2D surfaceGraphics;
@@ -168,21 +169,20 @@ public class OverlayRenderer
return; return;
} }
final Widget chatbox = client.getWidget(WidgetInfo.CHATBOX); final Widget viewport = client.getViewportWidget();
final Rectangle bounds = viewport != null
if (chatbox != null) ? new Rectangle(viewport.getBounds())
{ : new Rectangle(0, 0, surface.getWidth(), surface.getHeight());
chatboxBounds.setBounds(chatbox.getBounds());
}
OverlayUtil.setGraphicProperties(graphics);
final Point topLeftPoint = new Point(); final Point topLeftPoint = new Point();
topLeftPoint.move(BORDER_LEFT, BORDER_TOP); topLeftPoint.move(BORDER_LEFT, BORDER_TOP);
final Point topRightPoint = new Point(); final Point topRightPoint = new Point();
topRightPoint.move(surface.getWidth() - BORDER_RIGHT, BORDER_TOP); topRightPoint.move(bounds.x + bounds.width - BORDER_RIGHT, BORDER_TOP);
final Point bottomLeftPoint = new Point(); final Point bottomLeftPoint = new Point();
bottomLeftPoint.move(BORDER_LEFT, chatboxBounds.y - BORDER_BOTTOM); bottomLeftPoint.move(BORDER_LEFT, bounds.y + bounds.height - BORDER_BOTTOM);
final Point bottomRightPoint = new Point(); final Point bottomRightPoint = new Point();
bottomRightPoint.move(chatboxBounds.x + chatboxBounds.width - BORDER_RIGHT, chatboxBounds.y - BORDER_BOTTOM); bottomRightPoint.move(bounds.x + bounds.width - BORDER_RIGHT, bounds.y + bounds.height - BORDER_BOTTOM);
overlays.stream() overlays.stream()
.filter(overlay -> shouldDrawOverlay(client, overlay)) .filter(overlay -> shouldDrawOverlay(client, overlay))
@@ -208,13 +208,13 @@ public class OverlayRenderer
if (overlay.getPosition().equals(OverlayPosition.DYNAMIC)) if (overlay.getPosition().equals(OverlayPosition.DYNAMIC))
{ {
overlay.render(graphics, new Point()); safeRender(overlay, graphics, new Point());
} }
else else
{ {
surfaceGraphics.clearRect(0, 0, surface.getWidth(), surface.getHeight()); surfaceGraphics.clearRect(0, 0, surface.getWidth(), surface.getHeight());
final Dimension dimension = MoreObjects.firstNonNull(overlay.render(surfaceGraphics, subPosition), new Dimension()); final Dimension dimension = MoreObjects.firstNonNull(safeRender(overlay, surfaceGraphics, subPosition), new Dimension());
if (dimension.width == 0 && dimension.height == 0) if (dimension.width == 0 && dimension.height == 0)
{ {
return; return;
@@ -244,6 +244,16 @@ public class OverlayRenderer
}); });
} }
private Dimension safeRender(RenderableEntity entity, Graphics2D graphics, Point point)
{
final Font font = graphics.getFont();
final AffineTransform transform = graphics.getTransform();
final Dimension dimension = entity.render(graphics, point);
graphics.setFont(font);
graphics.setTransform(transform);
return dimension;
}
private boolean shouldDrawOverlay(Client client, Overlay overlay) private boolean shouldDrawOverlay(Client client, Overlay overlay)
{ {
return client != null return client != null

View File

@@ -28,10 +28,7 @@ import java.awt.Dimension;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Point; import java.awt.Point;
public abstract class RenderableEntity public interface RenderableEntity
{ {
public Dimension render(Graphics2D graphics, Point parent) Dimension render(Graphics2D graphics, Point parent);
{
return null;
}
} }

View File

@@ -36,7 +36,7 @@ import net.runelite.client.ui.overlay.RenderableEntity;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class BackgroundComponent extends RenderableEntity public class BackgroundComponent implements RenderableEntity
{ {
private static final int BORDER_OFFSET = 2; private static final int BORDER_OFFSET = 2;
private static final Color BACKGROUND_COLOR = new Color(70, 61, 50, 156); private static final Color BACKGROUND_COLOR = new Color(70, 61, 50, 156);

View File

@@ -36,7 +36,7 @@ import javax.annotation.Nullable;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.ui.overlay.RenderableEntity; import net.runelite.client.ui.overlay.RenderableEntity;
public class InfoBoxComponent extends RenderableEntity public class InfoBoxComponent implements RenderableEntity
{ {
private static final int BOX_SIZE = 35; private static final int BOX_SIZE = 35;
private static final int SEPARATOR = 2; private static final int SEPARATOR = 2;

View File

@@ -41,7 +41,7 @@ import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.ui.overlay.RenderableEntity; import net.runelite.client.ui.overlay.RenderableEntity;
public class PanelComponent extends RenderableEntity public class PanelComponent implements RenderableEntity
{ {
private static final int TOP_BORDER = 3; private static final int TOP_BORDER = 3;
private static final int LEFT_BORDER = 6; private static final int LEFT_BORDER = 6;

View File

@@ -32,7 +32,7 @@ import java.awt.Point;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.ui.overlay.RenderableEntity; import net.runelite.client.ui.overlay.RenderableEntity;
public class TextComponent extends RenderableEntity public class TextComponent implements RenderableEntity
{ {
@Setter @Setter
private String text; private String text;

View File

@@ -33,9 +33,10 @@ import java.awt.Rectangle;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import lombok.Setter; import lombok.Setter;
import net.runelite.client.ui.FontManager;
import net.runelite.client.ui.overlay.RenderableEntity; import net.runelite.client.ui.overlay.RenderableEntity;
public class TooltipComponent extends RenderableEntity public class TooltipComponent implements RenderableEntity
{ {
private static final Pattern COLOR_SPLIT = Pattern.compile("<\\/?col=?([^>]+)?>"); private static final Pattern COLOR_SPLIT = Pattern.compile("<\\/?col=?([^>]+)?>");
private static final Pattern BR = Pattern.compile("</br>"); private static final Pattern BR = Pattern.compile("</br>");
@@ -50,6 +51,8 @@ public class TooltipComponent extends RenderableEntity
@Override @Override
public Dimension render(Graphics2D graphics, Point parent) public Dimension render(Graphics2D graphics, Point parent)
{ {
graphics.setFont(FontManager.getRunescapeSmallFont());
// Tooltip size // Tooltip size
final FontMetrics metrics = graphics.getFontMetrics(); final FontMetrics metrics = graphics.getFontMetrics();
final int textDescent = metrics.getDescent(); final int textDescent = metrics.getDescent();