From df7cf901e655db26b31fc89689da974a8172065a Mon Sep 17 00:00:00 2001 From: l2- Date: Mon, 22 Oct 2018 17:20:51 +0200 Subject: [PATCH 01/16] correct font positioning to work with any font --- .../client/plugins/devtools/DevToolsOverlay.java | 4 ++-- .../plugins/grounditems/GroundItemsOverlay.java | 4 ++-- .../plugins/itemcharges/ItemChargeOverlay.java | 2 +- .../client/plugins/runecraft/BindNeckOverlay.java | 2 +- .../plugins/runepouch/RunepouchOverlay.java | 15 ++++++++++++--- .../ui/overlay/components/InfoBoxComponent.java | 4 ++-- .../ui/overlay/components/LineComponent.java | 8 +++++--- .../overlay/components/ProgressBarComponent.java | 2 +- .../ui/overlay/components/TitleComponent.java | 2 +- .../ui/overlay/components/TooltipComponent.java | 6 +++--- .../ui/overlay/worldmap/WorldMapOverlay.java | 2 +- 11 files changed, 31 insertions(+), 20 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index fd96de011c..977f3dfb59 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -373,7 +373,7 @@ class DevToolsOverlay extends Overlay Rectangle2D textBounds = fm.getStringBounds(idText, graphics); int textX = (int) (slotBounds.getX() + (slotBounds.getWidth() / 2) - (textBounds.getWidth() / 2)); - int textY = (int) (slotBounds.getY() + (slotBounds.getHeight() / 2) + (textBounds.getHeight() / 2)); + int textY = (int) (slotBounds.getY() + (slotBounds.getHeight() / 2) + (fm.getAscent() / 2)); graphics.setColor(new Color(255, 255, 255, 65)); graphics.fill(slotBounds); @@ -483,7 +483,7 @@ class DevToolsOverlay extends Overlay Rectangle2D textBounds = fm.getStringBounds(text, graphics); int textX = (int) (bounds.getX() + (bounds.getWidth() / 2) - (textBounds.getWidth() / 2)); - int textY = (int) (bounds.getY() + (bounds.getHeight() / 2) + (textBounds.getHeight() / 2)); + int textY = (int) (bounds.getY() + (bounds.getHeight() / 2) + (fm.getMaxAscent() / 2)); graphics.setColor(Color.BLACK); graphics.drawString(text, textX + 1, textY + 1); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 1406bb1747..34181cef31 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -284,14 +284,14 @@ public class GroundItemsOverlay extends Overlay // Item bounds int x = textX - 2; - int y = textY - stringHeight - 2; + int y = textY - stringHeight - 2 + fm.getMaxDescent(); int width = stringWidth + 4; int height = stringHeight + 4; final Rectangle itemBounds = new Rectangle(x, y, width, height); // Hidden box x += width + 2; - y = textY - (RECTANGLE_SIZE + stringHeight) / 2; + y = textY - (fm.getMaxAscent() + RECTANGLE_SIZE) / 2; width = height = RECTANGLE_SIZE; final Rectangle itemHiddenBox = new Rectangle(x, y, width, height); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java index 27bb35b21d..fe178bd3b9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java @@ -109,7 +109,7 @@ class ItemChargeOverlay extends Overlay final Rectangle bounds = item.getCanvasBounds(); final TextComponent textComponent = new TextComponent(); - textComponent.setPosition(new Point(bounds.x, bounds.y + 16)); + textComponent.setPosition(new Point(bounds.x, bounds.y + 1 + graphics.getFontMetrics().getMaxAscent() - graphics.getFontMetrics().getMaxDescent())); textComponent.setText(charges < 0 ? "?" : String.valueOf(charges)); textComponent.setColor(itemChargePlugin.getColor(charges)); textComponent.render(graphics); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java index 6e8dbcd24f..e011e4e2eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/BindNeckOverlay.java @@ -79,7 +79,7 @@ public class BindNeckOverlay extends Overlay final String text = bindingCharges <= 0 ? "?" : bindingCharges + ""; final TextComponent textComponent = new TextComponent(); - textComponent.setPosition(new Point(bounds.x, bounds.y + 16)); + textComponent.setPosition(new Point(bounds.x, bounds.y + 1 + graphics.getFontMetrics().getMaxAscent() - graphics.getFontMetrics().getMaxDescent())); textComponent.setText(text); textComponent.setColor(color); textComponent.render(graphics); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java index 9eac070c94..0e2bfc1971 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java @@ -104,6 +104,10 @@ public class RunepouchOverlay extends Overlay StringBuilder tooltipBuilder = new StringBuilder(); + // location.getY() + graphics.getFontMetrics().getMaxAscent() - graphics.getFontMetrics().getMaxDescent() + // this will draw the character exactly on the border + int yLocation = location.getY() + 1 + + graphics.getFontMetrics().getMaxAscent() - graphics.getFontMetrics().getMaxDescent(); for (int i = 0; i < AMOUNT_VARBITS.length; i++) { Varbits amountVarbit = AMOUNT_VARBITS[i]; @@ -133,13 +137,18 @@ public class RunepouchOverlay extends Overlay continue; } + // the reason this is not split up in maxascent and maxdescent to equal the height of the text like it should + // be is because numbers (afaik) dont use font descent so a 1 pixel seperator should be good and give + // consistent results across fonts + int yOffset = (1 + (graphics.getFontMetrics().getMaxAscent()) * i); + graphics.setColor(Color.black); graphics.drawString("" + formatNumber(amount), location.getX() + (config.showIcons() ? 13 : 6), - location.getY() + 14 + (graphics.getFontMetrics().getHeight() - 1) * i); + yLocation + yOffset); graphics.setColor(config.fontColor()); graphics.drawString("" + formatNumber(amount), location.getX() + (config.showIcons() ? 12 : 5), - location.getY() + 13 + (graphics.getFontMetrics().getHeight() - 1) * i); + yLocation + yOffset); if (!config.showIcons()) { @@ -150,7 +159,7 @@ public class RunepouchOverlay extends Overlay if (image != null) { OverlayUtil.renderImageLocation(graphics, - new Point(location.getX(), location.getY() + graphics.getFontMetrics().getHeight() * i), + new Point(location.getX(), location.getY() + (1 + graphics.getFontMetrics().getMaxAscent()) * i), image); } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java index d8f7841099..8cd54cd926 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java @@ -39,7 +39,7 @@ import net.runelite.client.ui.FontManager; @Setter public class InfoBoxComponent implements LayoutableRenderableEntity { - private static final int SEPARATOR = 3; + private static final int SEPARATOR = 2; private static final int DEFAULT_SIZE = 32; @Getter @@ -92,7 +92,7 @@ public class InfoBoxComponent implements LayoutableRenderableEntity final TextComponent textComponent = new TextComponent(); textComponent.setColor(color); textComponent.setText(text); - textComponent.setPosition(new Point(baseX + ((size - metrics.stringWidth(text)) / 2), baseY + size - SEPARATOR)); + textComponent.setPosition(new Point(baseX + ((size - metrics.stringWidth(text)) / 2), baseY + size - metrics.getMaxDescent() - SEPARATOR)); textComponent.render(graphics); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java index f6c2f5e77c..03b8c0a71d 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/LineComponent.java @@ -68,7 +68,7 @@ public class LineComponent implements LayoutableRenderableEntity final FontMetrics metrics = graphics.getFontMetrics(); final int baseX = preferredLocation.x; - final int baseY = preferredLocation.y + metrics.getHeight(); + final int baseY = preferredLocation.y; int x = baseX; int y = baseY; final int leftFullWidth = getLineWidth(left, metrics); @@ -92,6 +92,7 @@ public class LineComponent implements LayoutableRenderableEntity for (int i = 0; i < lineCount; i++) { + y += metrics.getMaxAscent(); String leftText = ""; String rightText = ""; @@ -116,7 +117,7 @@ public class LineComponent implements LayoutableRenderableEntity rightLineComponent.setText(rightText); rightLineComponent.setColor(rightColor); rightLineComponent.render(graphics); - y += metrics.getHeight(); + y += metrics.getMaxDescent(); } final Dimension dimension = new Dimension(preferredSize.width, y - baseY); @@ -124,6 +125,7 @@ public class LineComponent implements LayoutableRenderableEntity bounds.setSize(dimension); return dimension; } + y += metrics.getMaxAscent(); final TextComponent leftLineComponent = new TextComponent(); leftLineComponent.setPosition(new Point(x, y)); @@ -136,7 +138,7 @@ public class LineComponent implements LayoutableRenderableEntity rightLineComponent.setText(right); rightLineComponent.setColor(rightColor); rightLineComponent.render(graphics); - y += metrics.getHeight(); + y += metrics.getMaxDescent(); final Dimension dimension = new Dimension(preferredSize.width, y - baseY); bounds.setLocation(preferredLocation); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java index ba4634deec..c81d59da2b 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ProgressBarComponent.java @@ -84,7 +84,7 @@ public class ProgressBarComponent implements LayoutableRenderableEntity final int width = preferredSize.width; final int height = Math.max(preferredSize.height, 16); final int progressTextX = barX + (width - metrics.stringWidth(textToWrite)) / 2; - final int progressTextY = barY + ((height - metrics.getHeight()) / 2) + metrics.getHeight(); + final int progressTextY = barY + ((height - metrics.getHeight()) / 2) + metrics.getMaxAscent(); final int progressFill = (int) (width * Math.min(1, pc)); // Draw bar diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java index fa4c9bc3bb..9c9793be66 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TitleComponent.java @@ -64,7 +64,7 @@ public class TitleComponent implements LayoutableRenderableEntity titleComponent.setColor(color); titleComponent.setPosition(new Point( baseX + ((preferredSize.width - metrics.stringWidth(text)) / 2), - baseY + metrics.getHeight())); + baseY + metrics.getMaxAscent())); final Dimension rendered = titleComponent.render(graphics); final Dimension dimension = new Dimension(preferredSize.width, rendered.height); bounds.setLocation(preferredLocation); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java index c7c5381b86..8743c31831 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TooltipComponent.java @@ -104,7 +104,7 @@ public class TooltipComponent implements RenderableEntity textComponent.setColor(nextColor); String text = line.substring(begin, j); textComponent.setText(text); - textComponent.setPosition(new Point(lineX, textY + (i + 1) * textHeight - textDescent)); + textComponent.setPosition(new Point(lineX, textY + (i + 1) * metrics.getMaxAscent() + i * metrics.getMaxDescent())); textComponent.render(graphics); lineX += metrics.stringWidth(text); @@ -141,7 +141,7 @@ public class TooltipComponent implements RenderableEntity textComponent.setColor(nextColor); String text = line.substring(begin, j + 1); textComponent.setText(text); - textComponent.setPosition(new Point(lineX, textY + (i + 1) * textHeight - textDescent)); + textComponent.setPosition(new Point(lineX, textY + (i + 1) * metrics.getMaxAscent() + i * metrics.getMaxDescent())); textComponent.render(graphics); lineX += metrics.stringWidth(text); @@ -155,7 +155,7 @@ public class TooltipComponent implements RenderableEntity final TextComponent textComponent = new TextComponent(); textComponent.setColor(nextColor); textComponent.setText(line.substring(begin, line.length())); - textComponent.setPosition(new Point(lineX, textY + (i + 1) * textHeight - textDescent)); + textComponent.setPosition(new Point(lineX, textY + (i + 1) * metrics.getMaxAscent() + i * metrics.getMaxDescent())); textComponent.render(graphics); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java index 6b5b7474a6..8d81efb61a 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/worldmap/WorldMapOverlay.java @@ -277,7 +277,7 @@ public class WorldMapOverlay extends Overlay graphics.setColor(JagexColors.TOOLTIP_BORDER); graphics.drawRect((int) tooltipRect.getX(), (int) tooltipRect.getY(), (int) tooltipRect.getWidth(), (int) tooltipRect.getHeight()); graphics.setColor(JagexColors.TOOLTIP_TEXT); - graphics.drawString(tooltip, drawPoint.getX(), drawPoint.getY() + height); + graphics.drawString(tooltip, drawPoint.getX(), drawPoint.getY() + fm.getMaxAscent()); } private Point clipToRectangle(Point drawPoint, Rectangle mapDisplayRectangle) From e0c8c0ac792f879da92157a768675f3ae8e88831 Mon Sep 17 00:00:00 2001 From: l2- Date: Mon, 22 Oct 2018 17:48:08 +0200 Subject: [PATCH 02/16] adjust panels and components to work with any font --- .../plugins/timetracking/clocks/ClockTabPanel.java | 8 ++++++++ .../runelite/client/ui/components/ProgressBar.java | 14 +++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java index 79578a3b79..fcc460fdf8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java @@ -40,6 +40,7 @@ import net.runelite.client.plugins.timetracking.TimeTrackingPlugin; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.DynamicGridLayout; import net.runelite.client.ui.FontManager; +import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.IconButton; import net.runelite.client.ui.components.shadowlabel.JShadowedLabel; import net.runelite.client.util.ImageUtil; @@ -97,6 +98,13 @@ public class ClockTabPanel extends TabContentPanel rebuild(); } + // The max panel width is 225 but the + sign gets cut off at 225 so we set it at 223 + @Override + public Dimension getPreferredSize() + { + return new Dimension(PluginPanel.PANEL_WIDTH - 2, super.getPreferredSize().height); + } + /** * Clears and recreates the components of this panel. * This should be done whenever a clock is added or removed. diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java b/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java index a90d53eb87..bc15d21a71 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java @@ -66,18 +66,26 @@ public class ProgressBar extends DimmableJPanel setPreferredSize(new Dimension(100, 16)); + int topIndent = 0; + if (getFont().equals(FontManager.getRunescapeSmallFont()) + || getFont().equals(FontManager.getRunescapeFont()) + || getFont().equals(FontManager.getRunescapeBoldFont())) + { + topIndent = 2; + } + leftLabel.setFont(FontManager.getRunescapeSmallFont()); leftLabel.setForeground(Color.WHITE); - leftLabel.setBorder(new EmptyBorder(2, 5, 0, 0)); + leftLabel.setBorder(new EmptyBorder(topIndent, 5, 0, 0)); rightLabel.setFont(FontManager.getRunescapeSmallFont()); rightLabel.setForeground(Color.WHITE); - rightLabel.setBorder(new EmptyBorder(2, 0, 0, 5)); + rightLabel.setBorder(new EmptyBorder(topIndent, 0, 0, 5)); centerLabel.setFont(FontManager.getRunescapeSmallFont()); centerLabel.setForeground(Color.WHITE); centerLabel.setHorizontalAlignment(SwingConstants.CENTER); - centerLabel.setBorder(new EmptyBorder(2, 0, 0, 0)); + centerLabel.setBorder(new EmptyBorder(topIndent, 0, 0, 0)); // Adds components to be automatically redrawn when paintComponents is called add(leftLabel, BorderLayout.WEST); From 4b61804a4553ffa8d7ee9b984abb2e1be665b21c Mon Sep 17 00:00:00 2001 From: l2- Date: Mon, 22 Oct 2018 17:51:34 +0200 Subject: [PATCH 03/16] make sure rl uses OS font rendering hints --- .../components/shadowlabel/JShadowedLabel.java | 17 +++++++++++++++++ .../client/ui/overlay/OverlayRenderer.java | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java index 35ccf12374..79b7200f7b 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/shadowlabel/JShadowedLabel.java @@ -25,7 +25,11 @@ package net.runelite.client.ui.components.shadowlabel; import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.Point; +import java.awt.Toolkit; +import java.util.Map; import javax.swing.JLabel; import lombok.Getter; @@ -61,4 +65,17 @@ public class JShadowedLabel extends JLabel revalidate(); repaint(); } + + @Override + public void paint(Graphics g) + { + // Set font rendering properties like the OS's font rendering + Toolkit tk = Toolkit.getDefaultToolkit(); + Map desktopHints = (Map)(tk.getDesktopProperty("awt.font.desktophints")); + if (desktopHints != null) + { + ((Graphics2D)g).addRenderingHints(desktopHints); + } + super.paint(g); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index a9f2e9f017..eb817354b7 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -31,9 +31,11 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; +import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.util.List; +import java.util.Map; import javax.inject.Inject; import javax.inject.Singleton; import javax.swing.SwingUtilities; @@ -165,6 +167,14 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener return; } + // Set font rendering properties like the OS's font rendering + Toolkit tk = Toolkit.getDefaultToolkit(); + Map desktopHints = (Map)(tk.getDesktopProperty("awt.font.desktophints")); + if (desktopHints != null) + { + graphics.addRenderingHints(desktopHints); + } + if (shouldInvalidateBounds()) { snapCorners = buildSnapCorners(); From 15d513b3c690046f8de4908934ed2ec601c64275 Mon Sep 17 00:00:00 2001 From: l2- Date: Mon, 22 Oct 2018 21:09:29 +0200 Subject: [PATCH 04/16] add support to select and use any font installed on the user's system --- .../runelite/client/config/ConfigManager.java | 10 ++ .../net/runelite/client/config/FontType.java | 10 +- .../client/config/RuneLiteConfig.java | 13 ++ .../client/plugins/config/ConfigPanel.java | 33 +++++ .../java/net/runelite/client/ui/ClientUI.java | 2 +- .../net/runelite/client/ui/FontManager.java | 131 +++++++++++++++--- .../client/ui/overlay/OverlayRenderer.java | 7 +- 7 files changed, 175 insertions(+), 31 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index 2cde4900ad..ba65241334 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -29,6 +29,7 @@ import com.google.common.collect.ComparisonChain; import com.google.common.collect.ImmutableMap; import java.awt.Color; import java.awt.Dimension; +import java.awt.Font; import java.awt.Point; import java.awt.Rectangle; import java.io.File; @@ -61,6 +62,7 @@ import net.runelite.client.RuneLite; import net.runelite.client.account.AccountSession; import net.runelite.client.eventbus.EventBus; import net.runelite.client.util.ColorUtil; +import net.runelite.client.ui.FontManager; import net.runelite.http.api.config.ConfigClient; import net.runelite.http.api.config.ConfigEntry; import net.runelite.http.api.config.Configuration; @@ -512,6 +514,10 @@ public class ConfigManager { return Enum.valueOf((Class) type, str); } + if (type == Font.class) + { + return FontManager.getFontOrDefault(FontManager.lookupFont(str)); + } if (type == Instant.class) { return Instant.parse(str); @@ -540,6 +546,10 @@ public class ConfigManager { return ((Enum) object).name(); } + if (object instanceof Font) + { + return FontManager.getFontName((Font)object); + } if (object instanceof Dimension) { Dimension d = (Dimension) object; diff --git a/runelite-client/src/main/java/net/runelite/client/config/FontType.java b/runelite-client/src/main/java/net/runelite/client/config/FontType.java index 8ed57bd302..31809d287c 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/FontType.java +++ b/runelite-client/src/main/java/net/runelite/client/config/FontType.java @@ -26,20 +26,16 @@ package net.runelite.client.config; import lombok.RequiredArgsConstructor; import lombok.Getter; -import net.runelite.client.ui.FontManager; - -import java.awt.Font; @Getter @RequiredArgsConstructor public enum FontType { - REGULAR("Regular", FontManager.getRunescapeFont()), - BOLD("Bold", FontManager.getRunescapeBoldFont()), - SMALL("Small", FontManager.getRunescapeSmallFont()); + REGULAR("Regular"), + BOLD("Bold"), + SMALL("Small"); private final String name; - private final Font font; @Override public String toString() diff --git a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java index 546f7e77bc..5566974afb 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/RuneLiteConfig.java @@ -25,7 +25,9 @@ package net.runelite.client.config; import java.awt.Dimension; +import java.awt.Font; import net.runelite.api.Constants; +import net.runelite.client.ui.FontManager; @ConfigGroup("runelite") public interface RuneLiteConfig extends Config @@ -196,6 +198,17 @@ public interface RuneLiteConfig extends Config return false; } + @ConfigItem( + keyName = "clientFont", + name = "Font", + description = "Configure what font is used for the client and runelite added overlays", + position = 29 + ) + default Font clientFont() + { + return FontManager.getRunescapeFont(); + } + @ConfigItem( keyName = "fontType", name = "Dynamic Overlay Font", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index b71d5e8b0e..9edbf71bf3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -30,6 +30,7 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; +import java.awt.Font; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; @@ -84,6 +85,7 @@ import net.runelite.client.plugins.PluginInstantiationException; import net.runelite.client.plugins.PluginManager; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.DynamicGridLayout; +import net.runelite.client.ui.FontManager; import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.components.ComboBoxListRenderer; import net.runelite.client.ui.components.IconButton; @@ -529,6 +531,37 @@ public class ConfigPanel extends PluginPanel item.add(button, BorderLayout.EAST); } + if (cid.getType() == Font.class) + { + JComboBox box = new JComboBox(FontManager.getAvailableFontNames()); + box.setPreferredSize(new Dimension(150, 25)); + box.setRenderer(new ComboBoxListRenderer()); + box.setForeground(Color.WHITE); + box.setFocusable(false); + String currentlyConfigured = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()); + if (FontManager.lookupFont(currentlyConfigured) != null) + { + box.setSelectedItem(currentlyConfigured); + box.setToolTipText(currentlyConfigured); + } + else + { + log.debug("Selected font wasn't found on this system, resetting font back to runescape small"); + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), FontManager.getRunescapeSmallFont()); + } + box.addItemListener(e -> + { + if (e.getStateChange() == ItemEvent.SELECTED && box.getSelectedItem() != null) + { + final Font selected = FontManager.lookupFont(box.getSelectedItem().toString()); + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), selected); + box.setToolTipText(box.getSelectedItem().toString()); + } + }); + item.add(box, BorderLayout.EAST); + } + + mainPanel.add(item); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 59ce146601..ced93fa930 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -302,7 +302,7 @@ public class ClientUI SwingUtil.setTheme(new SubstanceRuneLiteLookAndFeel()); // Use custom UI font - SwingUtil.setFont(FontManager.getRunescapeFont()); + SwingUtil.setFont(FontManager.getFontOrDefault(config.clientFont())); // Create main window frame = new ContainableFrame(); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java index b6fdac5172..3addfb26f9 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java @@ -24,11 +24,16 @@ */ package net.runelite.client.ui; -import javax.swing.text.StyleContext; +import com.google.common.collect.ImmutableBiMap; +import java.awt.Canvas; +import java.util.Arrays; +import java.util.Comparator; +import java.util.LinkedHashMap; import java.awt.Font; import java.awt.FontFormatException; import java.awt.GraphicsEnvironment; import java.io.IOException; +import net.runelite.client.config.FontType; public class FontManager { @@ -36,37 +41,45 @@ public class FontManager private static final Font runescapeSmallFont; private static final Font runescapeBoldFont; + private static final ImmutableBiMap fontMap; + static { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); try { - Font font = Font.createFont(Font.TRUETYPE_FONT, + runescapeFont = Font.createFont(Font.TRUETYPE_FONT, FontManager.class.getResourceAsStream("runescape.ttf")) .deriveFont(Font.PLAIN, 16); - ge.registerFont(font); - runescapeFont = StyleContext.getDefaultStyleContext() - .getFont(font.getName(), Font.PLAIN, 16); - ge.registerFont(runescapeFont); - - Font smallFont = Font.createFont(Font.TRUETYPE_FONT, + runescapeSmallFont = Font.createFont(Font.TRUETYPE_FONT, FontManager.class.getResourceAsStream("runescape_small.ttf")) .deriveFont(Font.PLAIN, 16); - ge.registerFont(smallFont); - runescapeSmallFont = StyleContext.getDefaultStyleContext() - .getFont(smallFont.getName(), Font.PLAIN, 16); + runescapeBoldFont = Font.createFont(Font.TRUETYPE_FONT, + FontManager.class.getResourceAsStream("runescape_bold.ttf")) + .deriveFont(Font.PLAIN, 16); + + final LinkedHashMap _fontMap = new LinkedHashMap<>(); + _fontMap.put("Runescape small", runescapeSmallFont); + _fontMap.put("Runescape default", runescapeFont); + _fontMap.put("Runescape bold", runescapeBoldFont); + + // Get all available fonts on the system + Font[] availableFonts = ge.getAllFonts(); + // build bidirectional map + Arrays.stream(availableFonts).sorted(Comparator.comparing(Font::getFontName)).forEach(f -> + { + if (!_fontMap.containsKey(f.getFontName())) + { + _fontMap.put(f.getFontName(), f); + } + }); + fontMap = ImmutableBiMap.copyOf(_fontMap); + + ge.registerFont(runescapeFont); ge.registerFont(runescapeSmallFont); - - Font boldFont = Font.createFont(Font.TRUETYPE_FONT, - FontManager.class.getResourceAsStream("runescape_bold.ttf")) - .deriveFont(Font.PLAIN, 16); - ge.registerFont(boldFont); - - runescapeBoldFont = StyleContext.getDefaultStyleContext() - .getFont(boldFont.getName(), Font.PLAIN, 16); ge.registerFont(runescapeBoldFont); } catch (FontFormatException ex) @@ -79,6 +92,25 @@ public class FontManager } } + public static Font getFontOffCorrectSize(Font f) + { + // Size of the font is already set + if (f.getSize2D() > 1) + { + return f; + } + + // Dummy canvas for font metrics + Canvas c = new Canvas(); + + f = f.deriveFont(12f); + if (c.getFontMetrics(f).getMaxAscent() > 11) + { + f = f.deriveFont(11f); + } + return f; + } + public static Font getRunescapeFont() { return runescapeFont; @@ -93,4 +125,63 @@ public class FontManager { return runescapeBoldFont; } -} + + private static boolean isRunescapeFont(Font f) + { + return f.equals(runescapeFont) || f.equals(runescapeSmallFont) || f.equals(runescapeBoldFont); + } + + public static Font getFontFromType(Font f, FontType type) + { + switch (type) + { + case SMALL: + if (isRunescapeFont(f)) + { + return runescapeSmallFont; + } + return getFontOrDefault(f); + case BOLD: + if (isRunescapeFont(f)) + { + return runescapeBoldFont; + } + return getFontOrDefault(f).deriveFont(Font.BOLD, 14.0f); + default: //in this case regular + if (isRunescapeFont(f)) + { + return runescapeFont; + } + return getFontOrDefault(f).deriveFont(14.0f); + } + } + + public static Font lookupFont(String fontName) + { + return fontMap.get(fontName); + } + + public static String getFontName(Font font) + { + return fontMap.inverse().get(font); + } + + public static String[] getAvailableFontNames() + { + return fontMap.keySet().toArray(new String[fontMap.keySet().size()]); + } + + public static boolean isAvailable(Font font) + { + return fontMap.containsKey(font.getFontName()); + } + + public static Font getFontOrDefault(Font font) + { + if (font == null || !fontMap.containsKey(font.getFontName())) + { + return getRunescapeFont(); + } + return getFontOffCorrectSize(font); + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index eb817354b7..06405dea83 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -56,6 +56,7 @@ import net.runelite.client.input.MouseAdapter; import net.runelite.client.input.MouseManager; import net.runelite.client.ui.JagexColors; import net.runelite.client.util.ColorUtil; +import net.runelite.client.ui.FontManager; @Singleton public class OverlayRenderer extends MouseAdapter implements KeyListener @@ -456,15 +457,15 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener // Set font based on configuration if (position == OverlayPosition.DYNAMIC || position == OverlayPosition.DETACHED) { - subGraphics.setFont(runeLiteConfig.fontType().getFont()); + subGraphics.setFont(FontManager.getFontFromType(runeLiteConfig.clientFont(), runeLiteConfig.fontType())); } else if (position == OverlayPosition.TOOLTIP) { - subGraphics.setFont(runeLiteConfig.tooltipFontType().getFont()); + subGraphics.setFont(FontManager.getFontFromType(runeLiteConfig.clientFont(), runeLiteConfig.tooltipFontType())); } else { - subGraphics.setFont(runeLiteConfig.interfaceFontType().getFont()); + subGraphics.setFont(FontManager.getFontFromType(runeLiteConfig.clientFont(), runeLiteConfig.interfaceFontType())); } subGraphics.translate(point.x, point.y); From 1f1478a9b22356c730770efec8fe877f47128eab Mon Sep 17 00:00:00 2001 From: l2- Date: Mon, 22 Oct 2018 21:49:22 +0200 Subject: [PATCH 05/16] convert items which would override to small font to override to small version of selected font --- .../client/plugins/devtools/DevToolsOverlay.java | 3 --- .../client/plugins/devtools/VarInspector.java | 2 +- .../runelite/client/plugins/feed/FeedPanel.java | 8 ++++---- .../grandexchange/GrandExchangeOfferSlot.java | 8 ++++---- .../client/plugins/hiscore/HiscorePanel.java | 2 +- .../runelite/client/plugins/info/InfoPanel.java | 8 ++++---- .../client/plugins/kourendlibrary/BookPanel.java | 2 +- .../plugins/loottracker/LootTrackerBox.java | 6 +++--- .../plugins/loottracker/LootTrackerPanel.java | 4 ++-- .../client/plugins/mta/MTAInventoryOverlay.java | 2 +- .../client/plugins/mta/MTASceneOverlay.java | 2 +- .../ui/ScreenMarkerCreationPanel.java | 2 +- .../screenmarkers/ui/ScreenMarkerPanel.java | 6 +++--- .../plugins/skillcalculator/SkillCalculator.java | 2 +- .../plugins/skillcalculator/UIActionSlot.java | 2 +- .../skillcalculator/UICalculatorInputArea.java | 2 +- .../skillcalculator/UICombinedActionSlot.java | 2 +- .../client/plugins/slayer/SlayerOverlay.java | 2 +- .../plugins/timetracking/OverviewItemPanel.java | 4 ++-- .../plugins/timetracking/TimeablePanel.java | 4 ++-- .../timetracking/clocks/ClockTabPanel.java | 4 ++-- .../timetracking/clocks/StopwatchPanel.java | 2 +- .../timetracking/farming/FarmingTabPanel.java | 2 +- .../plugins/worldhopper/WorldTableHeader.java | 2 +- .../client/plugins/worldhopper/WorldTableRow.java | 4 ++-- .../client/plugins/xptracker/XpInfoBox.java | 8 ++++---- .../client/plugins/xptracker/XpPanel.java | 4 ++-- .../java/net/runelite/client/ui/FontManager.java | 15 ++++++++++----- .../client/ui/components/PluginErrorPanel.java | 2 +- .../client/ui/components/ProgressBar.java | 6 +++--- .../ui/overlay/components/InfoBoxComponent.java | 9 ++++++++- 31 files changed, 70 insertions(+), 61 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index 977f3dfb59..b986112645 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -27,7 +27,6 @@ package net.runelite.client.plugins.devtools; import java.awt.Color; import java.awt.Dimension; -import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Polygon; @@ -74,7 +73,6 @@ class DevToolsOverlay extends Overlay private static final int ITEM_EMPTY = 6512; private static final int ITEM_FILLED = 20594; - private static final Font FONT = FontManager.getRunescapeFont().deriveFont(Font.BOLD, 16); private static final Color RED = new Color(221, 44, 0); private static final Color GREEN = new Color(0, 200, 83); private static final Color ORANGE = new Color(255, 109, 0); @@ -111,7 +109,6 @@ class DevToolsOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - graphics.setFont(FONT); if (plugin.getPlayers().isActive()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java index dc6a6f6461..a6a6bcdeb7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/VarInspector.java @@ -192,7 +192,7 @@ class VarInspector extends JFrame { lastTick = tick; JLabel header = new JLabel("Tick " + tick); - header.setFont(FontManager.getRunescapeSmallFont()); + header.setFont(FontManager.getSmallFont(getFont())); header.setBorder(new CompoundBorder( BorderFactory.createMatteBorder(0, 0, 1, 0, ColorScheme.LIGHT_GRAY_COLOR), BorderFactory.createEmptyBorder(3, 6, 0, 0) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java index acace3fe33..b6eb858b72 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java @@ -221,14 +221,14 @@ class FeedPanel extends PluginPanel Color darkerForeground = UIManager.getColor("Label.foreground").darker(); JLabel titleLabel = new JLabel(item.getTitle()); - titleLabel.setFont(FontManager.getRunescapeSmallFont()); + titleLabel.setFont(FontManager.getSmallFont(getFont())); titleLabel.setBackground(null); titleLabel.setForeground(darkerForeground); titleLabel.setPreferredSize(new Dimension(CONTENT_WIDTH - TIME_WIDTH, 0)); Duration duration = Duration.between(Instant.ofEpochMilli(item.getTimestamp()), Instant.now()); JLabel timeLabel = new JLabel(durationToString(duration)); - timeLabel.setFont(FontManager.getRunescapeSmallFont()); + timeLabel.setFont(FontManager.getSmallFont(getFont())); timeLabel.setForeground(darkerForeground); titleAndTime.add(titleLabel, BorderLayout.WEST); @@ -237,9 +237,9 @@ class FeedPanel extends PluginPanel JPanel content = new JPanel(new BorderLayout()); content.setBackground(null); - JLabel contentLabel = new JLabel(lineBreakText(item.getContent(), FontManager.getRunescapeSmallFont())); + JLabel contentLabel = new JLabel(lineBreakText(item.getContent(), FontManager.getSmallFont(getFont()))); contentLabel.setBorder(new EmptyBorder(2, 0, 0, 0)); - contentLabel.setFont(FontManager.getRunescapeSmallFont()); + contentLabel.setFont(FontManager.getSmallFont(getFont())); contentLabel.setForeground(darkerForeground); content.add(contentLabel, BorderLayout.CENTER); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java index 14090170fe..93a6c586b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeOfferSlot.java @@ -131,11 +131,11 @@ public class GrandExchangeOfferSlot extends JPanel itemName.setForeground(Color.WHITE); itemName.setVerticalAlignment(JLabel.BOTTOM); - itemName.setFont(FontManager.getRunescapeSmallFont()); + itemName.setFont(FontManager.getSmallFont(getFont())); offerInfo.setForeground(ColorScheme.LIGHT_GRAY_COLOR); offerInfo.setVerticalAlignment(JLabel.TOP); - offerInfo.setFont(FontManager.getRunescapeSmallFont()); + offerInfo.setFont(FontManager.getSmallFont(getFont())); JLabel switchFaceViewIcon = new JLabel(); switchFaceViewIcon.setIcon(RIGHT_ARROW_ICON); @@ -162,11 +162,11 @@ public class GrandExchangeOfferSlot extends JPanel itemPrice.setForeground(Color.WHITE); itemPrice.setVerticalAlignment(JLabel.BOTTOM); - itemPrice.setFont(FontManager.getRunescapeSmallFont()); + itemPrice.setFont(FontManager.getSmallFont(getFont())); offerSpent.setForeground(Color.WHITE); offerSpent.setVerticalAlignment(JLabel.TOP); - offerSpent.setFont(FontManager.getRunescapeSmallFont()); + offerSpent.setFont(FontManager.getSmallFont(getFont())); JLabel switchDetailsViewIcon = new JLabel(); switchDetailsViewIcon.setIcon(LEFT_ARROW_ICON); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java index 03419c7da9..1c78b36153 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -295,7 +295,7 @@ public class HiscorePanel extends PluginPanel private JPanel makeSkillPanel(HiscoreSkill skill) { JLabel label = new JLabel(); - label.setFont(FontManager.getRunescapeSmallFont()); + label.setFont(FontManager.getSmallFont(getFont())); label.setText("--"); String skillName = (skill == null ? "combat" : skill.getName().toLowerCase()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java index 2edb250135..3a04530212 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java @@ -106,7 +106,7 @@ public class InfoPanel extends PluginPanel versionPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); versionPanel.setLayout(new GridLayout(0, 1)); - final Font smallFont = FontManager.getRunescapeSmallFont(); + final Font smallFont = FontManager.getSmallFont(getFont()); JLabel version = new JLabel(htmlLabel("RuneLite version: ", runeLiteProperties.getVersion())); version.setFont(smallFont); @@ -170,7 +170,7 @@ public class InfoPanel extends PluginPanel /** * Builds a link panel with a given icon, text and url to redirect to. */ - private static JPanel buildLinkPanel(ImageIcon icon, String topText, String bottomText, String url) + private JPanel buildLinkPanel(ImageIcon icon, String topText, String bottomText, String url) { JPanel container = new JPanel(); container.setBackground(ColorScheme.DARKER_GRAY_COLOR); @@ -224,11 +224,11 @@ public class InfoPanel extends PluginPanel JLabel topLine = new JLabel(topText); topLine.setForeground(Color.WHITE); - topLine.setFont(FontManager.getRunescapeSmallFont()); + topLine.setFont(FontManager.getSmallFont(getFont())); JLabel bottomLine = new JLabel(bottomText); bottomLine.setForeground(Color.WHITE); - bottomLine.setFont(FontManager.getRunescapeSmallFont()); + bottomLine.setFont(FontManager.getSmallFont(getFont())); textContainer.add(topLine); textContainer.add(bottomLine); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/BookPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/BookPanel.java index a82cee5814..29976bc0bb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/BookPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/BookPanel.java @@ -47,7 +47,7 @@ class BookPanel extends JPanel JLabel image = new JLabel(); b.getIcon().addTo(image); JLabel name = new JLabel(b.getShortName()); - location.setFont(FontManager.getRunescapeSmallFont()); + location.setFont(FontManager.getSmallFont(getFont())); layout.setVerticalGroup(layout.createParallelGroup() .addComponent(image) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java index f37be3eb43..edd2700920 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerBox.java @@ -90,12 +90,12 @@ class LootTrackerBox extends JPanel logTitle.setBackground(ColorScheme.DARKER_GRAY_COLOR.darker()); final JLabel titleLabel = new JLabel(Text.removeTags(id)); - titleLabel.setFont(FontManager.getRunescapeSmallFont()); + titleLabel.setFont(FontManager.getSmallFont(getFont())); titleLabel.setForeground(Color.WHITE); logTitle.add(titleLabel, BorderLayout.WEST); - subTitleLabel.setFont(FontManager.getRunescapeSmallFont()); + subTitleLabel.setFont(FontManager.getSmallFont(getFont())); subTitleLabel.setForeground(ColorScheme.LIGHT_GRAY_COLOR); logTitle.add(subTitleLabel, BorderLayout.CENTER); @@ -104,7 +104,7 @@ class LootTrackerBox extends JPanel subTitleLabel.setText(subtitle); } - priceLabel.setFont(FontManager.getRunescapeSmallFont()); + priceLabel.setFont(FontManager.getSmallFont(getFont())); priceLabel.setForeground(ColorScheme.LIGHT_GRAY_COLOR); logTitle.add(priceLabel, BorderLayout.EAST); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java index 4aaa7e0c7a..7a3585b1a2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPanel.java @@ -277,8 +277,8 @@ class LootTrackerPanel extends PluginPanel overallInfo.setBackground(ColorScheme.DARKER_GRAY_COLOR); overallInfo.setLayout(new GridLayout(2, 1)); overallInfo.setBorder(new EmptyBorder(2, 10, 2, 0)); - overallKillsLabel.setFont(FontManager.getRunescapeSmallFont()); - overallGpLabel.setFont(FontManager.getRunescapeSmallFont()); + overallKillsLabel.setFont(FontManager.getSmallFont(getFont())); + overallGpLabel.setFont(FontManager.getSmallFont(getFont())); overallInfo.add(overallKillsLabel); overallInfo.add(overallGpLabel); overallPanel.add(overallIcon, BorderLayout.WEST); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAInventoryOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAInventoryOverlay.java index 590b0ff65e..ea99cf7f00 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAInventoryOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAInventoryOverlay.java @@ -51,7 +51,7 @@ public class MTAInventoryOverlay extends Overlay { if (room.inside()) { - graphics.setFont(FontManager.getRunescapeBoldFont()); + graphics.setFont(FontManager.getSmallFont(graphics.getFont())); room.over(graphics); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTASceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTASceneOverlay.java index 717bd86060..5ed9a7e6b1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTASceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTASceneOverlay.java @@ -51,7 +51,7 @@ public class MTASceneOverlay extends Overlay { if (room.inside()) { - graphics.setFont(FontManager.getRunescapeFont()); + graphics.setFont(FontManager.getSmallFont(graphics.getFont())); room.under(graphics); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerCreationPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerCreationPanel.java index 51567dd2dc..0ad6b73d4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerCreationPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerCreationPanel.java @@ -69,7 +69,7 @@ public class ScreenMarkerCreationPanel extends JPanel setBorder(new EmptyBorder(8, 8, 8, 8)); setLayout(new BorderLayout()); - instructionsLabel.setFont(FontManager.getRunescapeSmallFont()); + instructionsLabel.setFont(FontManager.getSmallFont(getFont())); instructionsLabel.setForeground(Color.WHITE); JPanel actionsContainer = new JPanel(new GridLayout(1, 2, 8, 0)); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPanel.java index d225410209..e934bff8b8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenmarkers/ui/ScreenMarkerPanel.java @@ -162,7 +162,7 @@ class ScreenMarkerPanel extends JPanel nameActions.setBackground(ColorScheme.DARKER_GRAY_COLOR); save.setVisible(false); - save.setFont(FontManager.getRunescapeSmallFont()); + save.setFont(FontManager.getSmallFont(getFont())); save.setForeground(ColorScheme.PROGRESS_COMPLETE_COLOR); save.addMouseListener(new MouseAdapter() { @@ -191,7 +191,7 @@ class ScreenMarkerPanel extends JPanel }); cancel.setVisible(false); - cancel.setFont(FontManager.getRunescapeSmallFont()); + cancel.setFont(FontManager.getSmallFont(getFont())); cancel.setForeground(ColorScheme.PROGRESS_ERROR_COLOR); cancel.addMouseListener(new MouseAdapter() { @@ -217,7 +217,7 @@ class ScreenMarkerPanel extends JPanel } }); - rename.setFont(FontManager.getRunescapeSmallFont()); + rename.setFont(FontManager.getSmallFont(getFont())); rename.setForeground(ColorScheme.LIGHT_GRAY_COLOR.darker()); rename.addMouseListener(new MouseAdapter() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java index e2114a6a95..92d17bd4ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/SkillCalculator.java @@ -212,7 +212,7 @@ class SkillCalculator extends JPanel JCheckBox uiCheckbox = new JCheckBox(); uiLabel.setForeground(Color.WHITE); - uiLabel.setFont(FontManager.getRunescapeSmallFont()); + uiLabel.setFont(FontManager.getSmallFont(getFont())); uiOption.setBorder(BorderFactory.createEmptyBorder(3, 7, 3, 0)); uiOption.setBackground(ColorScheme.DARKER_GRAY_COLOR); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java index 2051a0ddcd..696fa2dfdc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UIActionSlot.java @@ -125,7 +125,7 @@ class UIActionSlot extends JPanel uiLabelName.setForeground(Color.WHITE); uiLabelActions = new JShadowedLabel("Unknown"); - uiLabelActions.setFont(FontManager.getRunescapeSmallFont()); + uiLabelActions.setFont(FontManager.getSmallFont(getFont())); uiLabelActions.setForeground(ColorScheme.LIGHT_GRAY_COLOR); uiInfo.add(uiLabelName); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java index 3aa1bff236..b1d9af5665 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICalculatorInputArea.java @@ -123,7 +123,7 @@ class UICalculatorInputArea extends JPanel uiInput.setHoverBackgroundColor(ColorScheme.DARK_GRAY_HOVER_COLOR); uiInput.setBorder(new EmptyBorder(5, 7, 5, 7)); - uiLabel.setFont(FontManager.getRunescapeSmallFont()); + uiLabel.setFont(FontManager.getSmallFont(getFont())); uiLabel.setBorder(new EmptyBorder(0, 0, 4, 0)); uiLabel.setForeground(Color.WHITE); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java index fa1614c91b..a6bc9c0d52 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/UICombinedActionSlot.java @@ -68,7 +68,7 @@ class UICombinedActionSlot extends JPanel uiLabelTitle.setForeground(Color.WHITE); uiLabelActions = new JShadowedLabel("Shift-click to select multiple"); - uiLabelActions.setFont(FontManager.getRunescapeSmallFont()); + uiLabelActions.setFont(FontManager.getSmallFont(getFont())); uiLabelActions.setForeground(ColorScheme.LIGHT_GRAY_COLOR); uiInfo.add(uiLabelTitle); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java index 675381b1fb..b0d28cdd0b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerOverlay.java @@ -134,7 +134,7 @@ class SlayerOverlay extends Overlay int slaughterCount = plugin.getSlaughterChargeCount(); int expeditiousCount = plugin.getExpeditiousChargeCount(); - graphics.setFont(FontManager.getRunescapeSmallFont()); + graphics.setFont(FontManager.getSmallFont(graphics.getFont())); for (WidgetItem item : getSlayerItems()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/OverviewItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/OverviewItemPanel.java index 96cf62c6fc..9b0e40ee02 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/OverviewItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/OverviewItemPanel.java @@ -105,11 +105,11 @@ class OverviewItemPanel extends JPanel JLabel titleLabel = new JLabel(title); titleLabel.setForeground(Color.WHITE); - titleLabel.setFont(FontManager.getRunescapeSmallFont()); + titleLabel.setFont(FontManager.getSmallFont(getFont())); statusLabel = new JLabel(); statusLabel.setForeground(Color.GRAY); - statusLabel.setFont(FontManager.getRunescapeSmallFont()); + statusLabel.setFont(FontManager.getSmallFont(getFont())); textContainer.add(titleLabel); textContainer.add(statusLabel); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java index 8bbb5ae4ab..872eb43f5c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeablePanel.java @@ -66,10 +66,10 @@ public class TimeablePanel extends JPanel infoPanel.setBorder(new EmptyBorder(4, 4, 4, 0)); final JLabel location = new JShadowedLabel(title); - location.setFont(FontManager.getRunescapeSmallFont()); + location.setFont(FontManager.getSmallFont(getFont())); location.setForeground(Color.WHITE); - estimate.setFont(FontManager.getRunescapeSmallFont()); + estimate.setFont(FontManager.getSmallFont(getFont())); estimate.setForeground(Color.GRAY); infoPanel.add(location); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java index fcc460fdf8..14722f4b4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/ClockTabPanel.java @@ -155,7 +155,7 @@ public class ClockTabPanel extends TabContentPanel JLabel headerLabel = new JLabel(title); headerLabel.setForeground(Color.WHITE); - headerLabel.setFont(FontManager.getRunescapeSmallFont()); + headerLabel.setFont(FontManager.getSmallFont(getFont())); panel.add(headerLabel, BorderLayout.CENTER); IconButton addButton = new IconButton(ADD_ICON, ADD_ICON_HOVER); @@ -175,7 +175,7 @@ public class ClockTabPanel extends TabContentPanel JLabel infoLabel = new JShadowedLabel(text); infoLabel.setForeground(ColorScheme.LIGHT_GRAY_COLOR.darker()); - infoLabel.setFont(FontManager.getRunescapeSmallFont()); + infoLabel.setFont(FontManager.getSmallFont(getFont())); panel.add(infoLabel); return panel; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/StopwatchPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/StopwatchPanel.java index 99bb8def81..bf285be9e9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/StopwatchPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/clocks/StopwatchPanel.java @@ -129,7 +129,7 @@ class StopwatchPanel extends ClockPanel private JLabel createSmallLabel(String text) { JLabel label = new JLabel(text, SwingConstants.CENTER); - label.setFont(FontManager.getRunescapeSmallFont()); + label.setFont(FontManager.getSmallFont(getFont())); label.setForeground(LAP_DATA_COLOR); return label; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTabPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTabPanel.java index 2c262111e2..e4dcf97508 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTabPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTabPanel.java @@ -94,7 +94,7 @@ public class FarmingTabPanel extends TabContentPanel groupLabel.setBorder(new EmptyBorder(15, 0, 0, 0)); } - groupLabel.setFont(FontManager.getRunescapeSmallFont()); + groupLabel.setFont(FontManager.getSmallFont(getFont())); add(groupLabel, c); c.gridy++; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java index 2d7ef01406..89a2071124 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableHeader.java @@ -102,7 +102,7 @@ class WorldTableHeader extends JPanel }); textLabel.setText(title); - textLabel.setFont(FontManager.getRunescapeSmallFont()); + textLabel.setFont(FontManager.getSmallFont(getFont())); final JMenuItem refresh = new JMenuItem("Refresh worlds"); refresh.addActionListener(e -> diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java index c23face9ba..faab767125 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java @@ -271,7 +271,7 @@ class WorldTableRow extends JPanel column.setBorder(new EmptyBorder(0, 5, 0, 5)); playerCountField = new JLabel(world.getPlayers() + ""); - playerCountField.setFont(FontManager.getRunescapeSmallFont()); + playerCountField.setFont(FontManager.getSmallFont(getFont())); column.add(playerCountField, BorderLayout.WEST); @@ -300,7 +300,7 @@ class WorldTableRow extends JPanel column.setBorder(new EmptyBorder(0, 5, 0, 5)); activityField = new JLabel(world.getActivity()); - activityField.setFont(FontManager.getRunescapeSmallFont()); + activityField.setFont(FontManager.getSmallFont(getFont())); column.add(activityField, BorderLayout.WEST); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java index f5987290eb..62aef759b6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java @@ -142,10 +142,10 @@ class XpInfoBox extends JPanel statsPanel.setBackground(ColorScheme.DARKER_GRAY_COLOR); statsPanel.setBorder(new EmptyBorder(9, 2, 9, 2)); - expGained.setFont(FontManager.getRunescapeSmallFont()); - expHour.setFont(FontManager.getRunescapeSmallFont()); - expLeft.setFont(FontManager.getRunescapeSmallFont()); - actionsLeft.setFont(FontManager.getRunescapeSmallFont()); + expGained.setFont(FontManager.getSmallFont(getFont())); + expHour.setFont(FontManager.getSmallFont(getFont())); + expLeft.setFont(FontManager.getSmallFont(getFont())); + actionsLeft.setFont(FontManager.getSmallFont(getFont())); statsPanel.add(expGained); statsPanel.add(expLeft); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java index e98f4da4f7..03d0a4cbbe 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java @@ -114,8 +114,8 @@ class XpPanel extends PluginPanel overallInfo.setLayout(new GridLayout(2, 1)); overallInfo.setBorder(new EmptyBorder(0, 10, 0, 0)); - overallExpGained.setFont(FontManager.getRunescapeSmallFont()); - overallExpHour.setFont(FontManager.getRunescapeSmallFont()); + overallExpGained.setFont(FontManager.getSmallFont(getFont())); + overallExpHour.setFont(FontManager.getSmallFont(getFont())); overallInfo.add(overallExpGained); overallInfo.add(overallExpHour); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java index 3addfb26f9..82d2ad2e1d 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java @@ -131,16 +131,21 @@ public class FontManager return f.equals(runescapeFont) || f.equals(runescapeSmallFont) || f.equals(runescapeBoldFont); } + public static Font getSmallFont(Font f) + { + if (isRunescapeFont(f)) + { + return runescapeSmallFont; + } + return getFontOrDefault(f); + } + public static Font getFontFromType(Font f, FontType type) { switch (type) { case SMALL: - if (isRunescapeFont(f)) - { - return runescapeSmallFont; - } - return getFontOrDefault(f); + return getSmallFont(f); case BOLD: if (isRunescapeFont(f)) { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/PluginErrorPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/components/PluginErrorPanel.java index e7b2fad971..92f48a6993 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/PluginErrorPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/PluginErrorPanel.java @@ -52,7 +52,7 @@ public class PluginErrorPanel extends JPanel noResultsTitle.setForeground(Color.WHITE); noResultsTitle.setHorizontalAlignment(SwingConstants.CENTER); - noResultsDescription.setFont(FontManager.getRunescapeSmallFont()); + noResultsDescription.setFont(FontManager.getSmallFont(getFont())); noResultsDescription.setForeground(Color.GRAY); noResultsDescription.setHorizontalAlignment(SwingConstants.CENTER); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java b/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java index bc15d21a71..8c3c7e6a54 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java @@ -74,15 +74,15 @@ public class ProgressBar extends DimmableJPanel topIndent = 2; } - leftLabel.setFont(FontManager.getRunescapeSmallFont()); + leftLabel.setFont(FontManager.getSmallFont(getFont())); leftLabel.setForeground(Color.WHITE); leftLabel.setBorder(new EmptyBorder(topIndent, 5, 0, 0)); - rightLabel.setFont(FontManager.getRunescapeSmallFont()); + rightLabel.setFont(FontManager.getSmallFont(getFont())); rightLabel.setForeground(Color.WHITE); rightLabel.setBorder(new EmptyBorder(topIndent, 0, 0, 5)); - centerLabel.setFont(FontManager.getRunescapeSmallFont()); + centerLabel.setFont(FontManager.getSmallFont(getFont())); centerLabel.setForeground(Color.WHITE); centerLabel.setHorizontalAlignment(SwingConstants.CENTER); centerLabel.setBorder(new EmptyBorder(topIndent, 0, 0, 0)); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java index 8cd54cd926..3a433ffb15 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java @@ -63,7 +63,14 @@ public class InfoBoxComponent implements LayoutableRenderableEntity return new Dimension(); } - graphics.setFont(getSize() < DEFAULT_SIZE ? FontManager.getRunescapeSmallFont() : FontManager.getRunescapeFont()); + if (graphics.getFont().equals(FontManager.getRunescapeFont()) && getSize() > DEFAULT_SIZE) + { + graphics.setFont(FontManager.getRunescapeFont()); + } + else + { + graphics.setFont(FontManager.getSmallFont(graphics.getFont())); + } final int baseX = preferredLocation.x; final int baseY = preferredLocation.y; From 6dec9b5f626976430c15521c9361528edd224fb6 Mon Sep 17 00:00:00 2001 From: l2- Date: Tue, 23 Oct 2018 22:14:44 +0200 Subject: [PATCH 06/16] now caching the 3 differently sized font objects and setting fallback font as rs default --- .../client/plugins/config/ConfigPanel.java | 4 +- .../net/runelite/client/ui/FontManager.java | 53 ++++++++++++++++--- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index 9edbf71bf3..a59769b48f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -546,8 +546,8 @@ public class ConfigPanel extends PluginPanel } else { - log.debug("Selected font wasn't found on this system, resetting font back to runescape small"); - configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), FontManager.getRunescapeSmallFont()); + log.debug("Selected font wasn't found on this system, resetting font back to runescape regular"); + configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), FontManager.getRunescapeFont()); } box.addItemListener(e -> { diff --git a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java index 82d2ad2e1d..91a1a658ab 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java @@ -28,11 +28,13 @@ import com.google.common.collect.ImmutableBiMap; import java.awt.Canvas; import java.util.Arrays; import java.util.Comparator; +import java.util.HashMap; import java.util.LinkedHashMap; import java.awt.Font; import java.awt.FontFormatException; import java.awt.GraphicsEnvironment; import java.io.IOException; +import lombok.Getter; import net.runelite.client.config.FontType; public class FontManager @@ -41,7 +43,23 @@ public class FontManager private static final Font runescapeSmallFont; private static final Font runescapeBoldFont; + @Getter + private static class CachedFont + { + private final Font reg; + private final Font small; + private final Font bold; + + private CachedFont(Font f) + { + reg = f.deriveFont(14.0f); + small = getFontOffCorrectSize(f); + bold = f.deriveFont(Font.BOLD, 14.0f); + } + } + private static final ImmutableBiMap fontMap; + private static final HashMap derivedFontMap = new HashMap<>(); static { @@ -62,9 +80,7 @@ public class FontManager .deriveFont(Font.PLAIN, 16); final LinkedHashMap _fontMap = new LinkedHashMap<>(); - _fontMap.put("Runescape small", runescapeSmallFont); - _fontMap.put("Runescape default", runescapeFont); - _fontMap.put("Runescape bold", runescapeBoldFont); + _fontMap.put("Runescape", runescapeFont); // Get all available fonts on the system Font[] availableFonts = ge.getAllFonts(); @@ -137,7 +153,16 @@ public class FontManager { return runescapeSmallFont; } - return getFontOrDefault(f); + + if (derivedFontMap.containsKey(f)) + { + return derivedFontMap.get(f).getSmall(); + } + + // cache and return + CachedFont cachedFont = new CachedFont(f); + derivedFontMap.put(f, cachedFont); + return cachedFont.getSmall(); } public static Font getFontFromType(Font f, FontType type) @@ -151,13 +176,29 @@ public class FontManager { return runescapeBoldFont; } - return getFontOrDefault(f).deriveFont(Font.BOLD, 14.0f); + if (derivedFontMap.containsKey(f)) + { + return derivedFontMap.get(f).getBold(); + } + + // cache and return + CachedFont cachedBoldFont = new CachedFont(f); + derivedFontMap.put(f, cachedBoldFont); + return cachedBoldFont.getBold(); default: //in this case regular if (isRunescapeFont(f)) { return runescapeFont; } - return getFontOrDefault(f).deriveFont(14.0f); + if (derivedFontMap.containsKey(f)) + { + return derivedFontMap.get(f).getReg(); + } + + // cache and return + CachedFont cachedFont = new CachedFont(f); + derivedFontMap.put(f, cachedFont); + return cachedFont.getReg(); } } From dc6dc64dae107cfc9ed894426844816c3b746838 Mon Sep 17 00:00:00 2001 From: l2- Date: Wed, 24 Oct 2018 19:00:09 +0200 Subject: [PATCH 07/16] Change font metrics logic in xpglobes and dev plugin to center y text position for any font --- .../net/runelite/client/plugins/devtools/DevToolsOverlay.java | 4 ++-- .../net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index b986112645..907c2ce4e2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -370,7 +370,7 @@ class DevToolsOverlay extends Overlay Rectangle2D textBounds = fm.getStringBounds(idText, graphics); int textX = (int) (slotBounds.getX() + (slotBounds.getWidth() / 2) - (textBounds.getWidth() / 2)); - int textY = (int) (slotBounds.getY() + (slotBounds.getHeight() / 2) + (fm.getAscent() / 2)); + int textY = (int) (slotBounds.getY() + (slotBounds.getHeight() / 2) + (fm.getHeight() / 2) - fm.getMaxDescent()); graphics.setColor(new Color(255, 255, 255, 65)); graphics.fill(slotBounds); @@ -480,7 +480,7 @@ class DevToolsOverlay extends Overlay Rectangle2D textBounds = fm.getStringBounds(text, graphics); int textX = (int) (bounds.getX() + (bounds.getWidth() / 2) - (textBounds.getWidth() / 2)); - int textY = (int) (bounds.getY() + (bounds.getHeight() / 2) + (fm.getMaxAscent() / 2)); + int textY = (int) (bounds.getY() + (bounds.getHeight() / 2) + (fm.getHeight() / 2) - fm.getMaxDescent()); graphics.setColor(Color.BLACK); graphics.drawString(text, textX + 1, textY + 1); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java index 1b487ebe5c..232fb2588e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java @@ -185,7 +185,7 @@ public class XpGlobesOverlay extends Overlay final FontMetrics metrics = graphics.getFontMetrics(); int drawX = x + (config.xpOrbSize() / 2) - (metrics.stringWidth(progress) / 2); - int drawY = y + (config.xpOrbSize() / 2) + (metrics.getHeight() / 2); + int drawY = y + (config.xpOrbSize() / 2) + (metrics.getHeight() / 2) - metrics.getMaxDescent(); OverlayUtil.renderTextLocation(graphics, new Point(drawX, drawY), progress, Color.WHITE); } From 8747e40f6a3ff599f8ec09e7097805ea4a5bb0ce Mon Sep 17 00:00:00 2001 From: l2- Date: Sun, 20 Jan 2019 15:37:09 +0100 Subject: [PATCH 08/16] unused import --- .../net/runelite/client/plugins/devtools/DevToolsOverlay.java | 1 - 1 file changed, 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index 907c2ce4e2..573cd70400 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -59,7 +59,6 @@ import net.runelite.api.coords.LocalPoint; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetItem; -import net.runelite.client.ui.FontManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; From 13e0baffe070d1598bbd4c96f7ac159c060d21f2 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 12 Mar 2019 11:47:11 +0000 Subject: [PATCH 09/16] Added support for transparent text and border color customization to TextComponent, added font and alpha customization to the ground items plugin --- .../grounditems/GroundItemsConfig.java | 30 +++++++++-- .../grounditems/GroundItemsOverlay.java | 12 ++++- .../ui/overlay/components/TextComponent.java | 50 +++++++++++++------ 3 files changed, 70 insertions(+), 22 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java index da3db4a3f1..ce698609d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java @@ -26,9 +26,11 @@ package net.runelite.client.plugins.grounditems; import java.awt.Color; +import net.runelite.client.config.Alpha; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; 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.MenuHighlightMode; import net.runelite.client.plugins.grounditems.config.PriceDisplayMode; @@ -115,16 +117,16 @@ public interface GroundItemsConfig extends Config { return false; } - + @ConfigItem( keyName = "highlightTiles", name = "Highlight Tiles", description = "Configures whether or not to highlight tiles containing ground items", position = 6 ) - default boolean highlightTiles() - { - return false; + default boolean highlightTiles() + { + return false; } @ConfigItem( @@ -199,6 +201,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for default, non-highlighted items", position = 13 ) + @Alpha default Color defaultColor() { return Color.WHITE; @@ -210,6 +213,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for highlighted items", position = 14 ) + @Alpha default Color highlightedColor() { 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", position = 15 ) + @Alpha default Color hiddenColor() { return Color.GRAY; @@ -232,6 +237,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for low value items", position = 16 ) + @Alpha default Color lowValueColor() { return Color.decode("#66B2FF"); @@ -254,6 +260,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for medium value items", position = 18 ) + @Alpha default Color mediumValueColor() { return Color.decode("#99FF99"); @@ -276,6 +283,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for high value items", position = 20 ) + @Alpha default Color highValueColor() { return Color.decode("#FF9600"); @@ -298,6 +306,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for insane value items", position = 22 ) + @Alpha default Color insaneValueColor() { return Color.decode("#FF66B2"); @@ -346,4 +355,15 @@ public interface GroundItemsConfig extends Config { 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; + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 1406bb1747..ac1d0e2c1f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.grounditems; import java.awt.Color; import java.awt.Dimension; +import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Polygon; @@ -94,8 +95,6 @@ public class GroundItemsOverlay extends Overlay { return null; } - - final FontMetrics fm = graphics.getFontMetrics(); final Player player = client.getLocalPlayer(); if (player == null || client.getViewportWidget() == null) @@ -103,6 +102,13 @@ public class GroundItemsOverlay extends Overlay return null; } + final Font originalFont = graphics.getFont(); + final Font font = config.fontStyle().getFont(); + + graphics.setFont(font); + + final FontMetrics fm = graphics.getFontMetrics(); + offsetMap.clear(); final LocalPoint localLocation = player.getLocalLocation(); final Point mousePos = client.getMouseCanvasPosition(); @@ -339,6 +345,8 @@ public class GroundItemsOverlay extends Overlay textComponent.render(graphics); } + graphics.setFont(originalFont); + return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java index 98532a8d7c..fba19f5013 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java @@ -24,11 +24,15 @@ */ package net.runelite.client.ui.overlay.components; +import java.awt.AlphaComposite; import java.awt.Color; +import java.awt.Composite; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; +import java.awt.Shape; +import java.awt.font.GlyphVector; import java.util.regex.Pattern; import lombok.Setter; import net.runelite.client.ui.overlay.RenderableEntity; @@ -43,6 +47,7 @@ public class TextComponent implements RenderableEntity private String text; private Point position = new Point(); private Color color = Color.WHITE; + private Color borderColor = Color.BLACK; public static String textWithoutColTags(String text) { @@ -64,28 +69,43 @@ public class TextComponent implements RenderableEntity final String textWithoutCol = textWithoutColTags(textSplitOnCol); final String colColor = textSplitOnCol.substring(textSplitOnCol.indexOf("=") + 1, textSplitOnCol.indexOf(">")); - // shadow - 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); + renderText(graphics, x, position.y, textWithoutCol, Color.decode("#" + colColor), borderColor); x += fontMetrics.stringWidth(textWithoutCol); } } else { - // shadow - 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); + renderText(graphics, position.x, position.y, text, color, borderColor); } - 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); + } + } From ff8a85448077a258139e08efb654b5a7d335748f Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 12 Mar 2019 11:47:11 +0000 Subject: [PATCH 10/16] Added support for transparent text and border color customization to TextComponent, added font and alpha customization to the ground items plugin --- .../grounditems/GroundItemsConfig.java | 30 +++++++++-- .../grounditems/GroundItemsOverlay.java | 12 ++++- .../ui/overlay/components/TextComponent.java | 50 +++++++++++++------ 3 files changed, 70 insertions(+), 22 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java index da3db4a3f1..ce698609d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java @@ -26,9 +26,11 @@ package net.runelite.client.plugins.grounditems; import java.awt.Color; +import net.runelite.client.config.Alpha; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; 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.MenuHighlightMode; import net.runelite.client.plugins.grounditems.config.PriceDisplayMode; @@ -115,16 +117,16 @@ public interface GroundItemsConfig extends Config { return false; } - + @ConfigItem( keyName = "highlightTiles", name = "Highlight Tiles", description = "Configures whether or not to highlight tiles containing ground items", position = 6 ) - default boolean highlightTiles() - { - return false; + default boolean highlightTiles() + { + return false; } @ConfigItem( @@ -199,6 +201,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for default, non-highlighted items", position = 13 ) + @Alpha default Color defaultColor() { return Color.WHITE; @@ -210,6 +213,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for highlighted items", position = 14 ) + @Alpha default Color highlightedColor() { 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", position = 15 ) + @Alpha default Color hiddenColor() { return Color.GRAY; @@ -232,6 +237,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for low value items", position = 16 ) + @Alpha default Color lowValueColor() { return Color.decode("#66B2FF"); @@ -254,6 +260,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for medium value items", position = 18 ) + @Alpha default Color mediumValueColor() { return Color.decode("#99FF99"); @@ -276,6 +283,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for high value items", position = 20 ) + @Alpha default Color highValueColor() { return Color.decode("#FF9600"); @@ -298,6 +306,7 @@ public interface GroundItemsConfig extends Config description = "Configures the color for insane value items", position = 22 ) + @Alpha default Color insaneValueColor() { return Color.decode("#FF66B2"); @@ -346,4 +355,15 @@ public interface GroundItemsConfig extends Config { 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; + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 1406bb1747..ac1d0e2c1f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.grounditems; import java.awt.Color; import java.awt.Dimension; +import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Polygon; @@ -94,8 +95,6 @@ public class GroundItemsOverlay extends Overlay { return null; } - - final FontMetrics fm = graphics.getFontMetrics(); final Player player = client.getLocalPlayer(); if (player == null || client.getViewportWidget() == null) @@ -103,6 +102,13 @@ public class GroundItemsOverlay extends Overlay return null; } + final Font originalFont = graphics.getFont(); + final Font font = config.fontStyle().getFont(); + + graphics.setFont(font); + + final FontMetrics fm = graphics.getFontMetrics(); + offsetMap.clear(); final LocalPoint localLocation = player.getLocalLocation(); final Point mousePos = client.getMouseCanvasPosition(); @@ -339,6 +345,8 @@ public class GroundItemsOverlay extends Overlay textComponent.render(graphics); } + graphics.setFont(originalFont); + return null; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java index 98532a8d7c..fba19f5013 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/TextComponent.java @@ -24,11 +24,15 @@ */ package net.runelite.client.ui.overlay.components; +import java.awt.AlphaComposite; import java.awt.Color; +import java.awt.Composite; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Point; +import java.awt.Shape; +import java.awt.font.GlyphVector; import java.util.regex.Pattern; import lombok.Setter; import net.runelite.client.ui.overlay.RenderableEntity; @@ -43,6 +47,7 @@ public class TextComponent implements RenderableEntity private String text; private Point position = new Point(); private Color color = Color.WHITE; + private Color borderColor = Color.BLACK; public static String textWithoutColTags(String text) { @@ -64,28 +69,43 @@ public class TextComponent implements RenderableEntity final String textWithoutCol = textWithoutColTags(textSplitOnCol); final String colColor = textSplitOnCol.substring(textSplitOnCol.indexOf("=") + 1, textSplitOnCol.indexOf(">")); - // shadow - 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); + renderText(graphics, x, position.y, textWithoutCol, Color.decode("#" + colColor), borderColor); x += fontMetrics.stringWidth(textWithoutCol); } } else { - // shadow - 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); + renderText(graphics, position.x, position.y, text, color, borderColor); } - 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); + } + } From 1f45546dc9f1f4b5067c0720be132af313035045 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Tue, 12 Mar 2019 15:23:05 +0000 Subject: [PATCH 11/16] Replaced the TextComponentTest test --- .../overlay/components/TextComponentTest.java | 155 ++++++++---------- 1 file changed, 68 insertions(+), 87 deletions(-) diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java index 067205bd3b..ca36f014b5 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java @@ -1,87 +1,68 @@ -/* - * Copyright (c) 2018, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.ui.overlay.components; - -import java.awt.Color; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.eq; -import org.mockito.Mock; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import org.mockito.runners.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class TextComponentTest -{ - @Mock - private Graphics2D graphics; - - @Before - public void before() - { - when(graphics.getFontMetrics()).thenReturn(mock(FontMetrics.class)); - } - - @Test - public void testRender() - { - TextComponent textComponent = new TextComponent(); - textComponent.setText("test"); - textComponent.setColor(Color.RED); - textComponent.render(graphics); - verify(graphics, times(2)).drawString(eq("test"), anyInt(), anyInt()); - verify(graphics, atLeastOnce()).setColor(Color.RED); - } - - @Test - public void testRender2() - { - TextComponent textComponent = new TextComponent(); - textComponent.setText("test"); - textComponent.render(graphics); - verify(graphics, times(2)).drawString(eq("test"), anyInt(), anyInt()); - verify(graphics, atLeastOnce()).setColor(Color.BLUE); - } - - @Test - public void testRender3() - { - TextComponent textComponent = new TextComponent(); - textComponent.setText("test test"); - textComponent.render(graphics); - verify(graphics, atLeastOnce()).drawString(eq("test"), anyInt(), anyInt()); - verify(graphics, atLeastOnce()).drawString(eq(" test"), anyInt(), anyInt()); - verify(graphics, atLeastOnce()).setColor(Color.BLUE); - verify(graphics, atLeastOnce()).setColor(Color.GREEN); - } -} +/* + * Copyright (c) 2018, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.ui.overlay.components; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import org.junit.Before; +import org.junit.Test; + +public class TextComponentTest +{ + private Graphics2D graphics; + + @Before + public void before() + { + BufferedImage dest = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + graphics = (Graphics2D) dest.getGraphics(); + } + + @Test + public void testRender() + { + TextComponent textComponent = new TextComponent(); + textComponent.setText("test"); + textComponent.setColor(Color.RED); + textComponent.render(graphics); + } + + @Test + public void testRender2() + { + TextComponent textComponent = new TextComponent(); + textComponent.setText("test"); + textComponent.render(graphics); + } + + @Test + public void testRender3() + { + TextComponent textComponent = new TextComponent(); + textComponent.setText("test test"); + textComponent.render(graphics); + } +} From dd2c351218ca8aff7f6b44c42f72fc5aeac8f3e3 Mon Sep 17 00:00:00 2001 From: CalebWhiting Date: Thu, 14 Mar 2019 13:13:30 +0000 Subject: [PATCH 12/16] Removed grounditems.fontStyle option --- .../client/plugins/grounditems/GroundItemsConfig.java | 11 ----------- .../plugins/grounditems/GroundItemsOverlay.java | 9 --------- .../ui/overlay/components/TextComponentTest.java | 11 ++++++++++- 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java index ce698609d3..1e658f84cd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsConfig.java @@ -30,7 +30,6 @@ import net.runelite.client.config.Alpha; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; 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.MenuHighlightMode; import net.runelite.client.plugins.grounditems.config.PriceDisplayMode; @@ -356,14 +355,4 @@ public interface GroundItemsConfig extends Config 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; - } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index ac1d0e2c1f..31a6077d1a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -27,7 +27,6 @@ package net.runelite.client.plugins.grounditems; import java.awt.Color; import java.awt.Dimension; -import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Polygon; @@ -102,11 +101,6 @@ public class GroundItemsOverlay extends Overlay return null; } - final Font originalFont = graphics.getFont(); - final Font font = config.fontStyle().getFont(); - - graphics.setFont(font); - final FontMetrics fm = graphics.getFontMetrics(); offsetMap.clear(); @@ -344,9 +338,6 @@ public class GroundItemsOverlay extends Overlay textComponent.setPosition(new java.awt.Point(textX, textY)); textComponent.render(graphics); } - - graphics.setFont(originalFont); - return null; } diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java index ca36f014b5..6bd5ebfaa4 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java @@ -27,17 +27,19 @@ package net.runelite.client.ui.overlay.components; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; +import org.junit.After; import org.junit.Before; import org.junit.Test; public class TextComponentTest { private Graphics2D graphics; + private BufferedImage dest; @Before public void before() { - BufferedImage dest = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + dest = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); graphics = (Graphics2D) dest.getGraphics(); } @@ -65,4 +67,11 @@ public class TextComponentTest textComponent.setText("test test"); textComponent.render(graphics); } + + @After + public void after() { + graphics.dispose(); + dest.flush(); + } + } From 51fb57e0b03b80802b078f683ef2e95cba379fb8 Mon Sep 17 00:00:00 2001 From: CalebWhiting Date: Thu, 14 Mar 2019 13:23:24 +0000 Subject: [PATCH 13/16] Formatting fix --- .../client/ui/overlay/components/TextComponentTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java index 6bd5ebfaa4..f1677daa4b 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/TextComponentTest.java @@ -69,7 +69,8 @@ public class TextComponentTest } @After - public void after() { + public void after() + { graphics.dispose(); dest.flush(); } From 3b96dcf8a5803416af018052fdb5e8d454b702cb Mon Sep 17 00:00:00 2001 From: James Munson Date: Mon, 1 Jul 2019 15:50:29 -0700 Subject: [PATCH 14/16] buildLinkPanel no longer static --- .../main/java/net/runelite/client/plugins/info/InfoPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java index d7dfe18365..c3157b9b85 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/info/InfoPanel.java @@ -199,7 +199,7 @@ public class InfoPanel extends PluginPanel /** * Builds a link panel with a given icon, text and callable to call. */ - private static JPanel buildLinkPanel(ImageIcon icon, String topText, String bottomText, Runnable callback) + private JPanel buildLinkPanel(ImageIcon icon, String topText, String bottomText, Runnable callback) { JPanel container = new JPanel(); container.setBackground(ColorScheme.DARKER_GRAY_COLOR); From 06224bd42ebc1b58ac0da85664454c3a843dda38 Mon Sep 17 00:00:00 2001 From: James Munson Date: Mon, 1 Jul 2019 16:26:22 -0700 Subject: [PATCH 15/16] TODO : SUPPORT CUSTOM FONT ON UI? --- .../src/main/java/net/runelite/client/util/SwingUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java index e8aaef79a6..021de4dc10 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/SwingUtil.java @@ -309,6 +309,8 @@ public class SwingUtil // Use substance look and feel SwingUtil.setTheme(new SubstanceRuneLiteLookAndFeel()); // Use custom UI font + //TODO : SUPPORT CUSTOM FONT? + //SwingUtil.setFont(FontManager.getFontOrDefault(config.clientFont())); SwingUtil.setFont(FontManager.getRunescapeFont()); } } From 6e0eee982a80fb807c1163ab76c57f93a3daed21 Mon Sep 17 00:00:00 2001 From: James Munson Date: Mon, 1 Jul 2019 17:13:06 -0700 Subject: [PATCH 16/16] Fix for test failing --- .../components/table/TableComponentTest.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java index 1c7e95d37a..a10bd03d80 100644 --- a/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java +++ b/runelite-client/src/test/java/net/runelite/client/ui/overlay/components/table/TableComponentTest.java @@ -25,32 +25,28 @@ package net.runelite.client.ui.overlay.components.table; import java.awt.Color; -import java.awt.FontMetrics; +import java.awt.image.BufferedImage; +import org.junit.After; import java.awt.Graphics2D; import java.util.List; import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.eq; import org.mockito.Mock; -import static org.mockito.Mockito.atLeastOnce; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import org.mockito.runners.MockitoJUnitRunner; -@RunWith(MockitoJUnitRunner.class) + + public class TableComponentTest { @Mock private Graphics2D graphics; + private BufferedImage dest; + @Before public void before() { - when(graphics.getFontMetrics()).thenReturn(mock(FontMetrics.class)); + dest = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + graphics = (Graphics2D) dest.getGraphics(); } @Test @@ -61,8 +57,6 @@ public class TableComponentTest tableComponent.setDefaultAlignment(TableAlignment.CENTER); tableComponent.setDefaultColor(Color.RED); tableComponent.render(graphics); - verify(graphics, times(2)).drawString(eq("test"), anyInt(), anyInt()); - verify(graphics, atLeastOnce()).setColor(Color.RED); } @Test @@ -76,10 +70,13 @@ public class TableComponentTest elements.get(1).setColor(Color.GREEN); elements.get(2).setColor(Color.BLUE); tableComponent.render(graphics); - verify(graphics, atLeastOnce()).setColor(Color.RED); - verify(graphics, atLeastOnce()).setColor(Color.GREEN); - verify(graphics, atLeastOnce()).setColor(Color.BLUE); - verify(graphics, atLeastOnce()).setColor(Color.YELLOW); - verify(graphics, atLeastOnce()).setColor(Color.WHITE); } + + @After + public void after() + { + graphics.dispose(); + dest.flush(); + } + }