From 39d347501a9475b019338a5584ca4dae8404e702 Mon Sep 17 00:00:00 2001 From: Seth Date: Mon, 22 Jan 2018 21:42:48 -0600 Subject: [PATCH] perspective: add getCanvasTextMiniMapLocation Properly center text on the minimap based on string bounds --- .../java/net/runelite/api/Perspective.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/Perspective.java b/runelite-api/src/main/java/net/runelite/api/Perspective.java index f058646213..851a313c53 100644 --- a/runelite-api/src/main/java/net/runelite/api/Perspective.java +++ b/runelite-api/src/main/java/net/runelite/api/Perspective.java @@ -696,4 +696,31 @@ public class Perspective return new Area(hull); } + /** + * Calculates text position and centers on minimap depending on string length. + * + * @param client + * @param graphics + * @param localLocation local location of the tile + * @param text string for width measurement + * @return a {@link Point} on screen corresponding to the given + * localLocation. + */ + public static Point getCanvasTextMiniMapLocation(Client client, Graphics2D graphics, Point localLocation, String text) + { + Point p = Perspective.worldToMiniMap(client, localLocation.getX(), localLocation.getY()); + + if (p == null) + { + return null; + } + + FontMetrics fm = graphics.getFontMetrics(); + Rectangle2D bounds = fm.getStringBounds(text, graphics); + int xOffset = p.getX() - (int) (bounds.getWidth() / 2); + int yOffset = p.getY() - (int) (bounds.getHeight() / 2) + fm.getAscent(); + + return new Point(xOffset, yOffset); + } + }