summaryrefslogtreecommitdiff
path: root/src/net/sourceforge/plantuml/ugraphic/UFont.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/sourceforge/plantuml/ugraphic/UFont.java')
-rw-r--r--src/net/sourceforge/plantuml/ugraphic/UFont.java39
1 files changed, 31 insertions, 8 deletions
diff --git a/src/net/sourceforge/plantuml/ugraphic/UFont.java b/src/net/sourceforge/plantuml/ugraphic/UFont.java
index 6854518..beb757c 100644
--- a/src/net/sourceforge/plantuml/ugraphic/UFont.java
+++ b/src/net/sourceforge/plantuml/ugraphic/UFont.java
@@ -2,7 +2,7 @@
* PlantUML : a free UML diagram generator
* ========================================================================
*
- * (C) Copyright 2009-2017, Arnaud Roques
+ * (C) Copyright 2009-2020, Arnaud Roques
*
* Project Info: http://plantuml.com
*
@@ -38,9 +38,13 @@ package net.sourceforge.plantuml.ugraphic;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
+import java.awt.GraphicsEnvironment;
import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics;
+import java.util.HashSet;
+import java.util.Set;
+import net.sourceforge.plantuml.StringUtils;
import net.sourceforge.plantuml.graphic.FontConfiguration;
import net.sourceforge.plantuml.graphic.HtmlColor;
import net.sourceforge.plantuml.graphic.TextBlockUtils;
@@ -50,8 +54,32 @@ public class UFont {
private final Font font;
private final String family;
+ private static final Set<String> names = new HashSet<String>();
+
+ static {
+ for (String name : GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()) {
+ names.add(name.toLowerCase());
+ }
+ }
+
public UFont(String fontFamily, int fontStyle, int fontSize) {
- this(new Font(fontFamily, fontStyle, fontSize), fontFamily);
+ this(buildFont(fontFamily, fontStyle, fontSize), fontFamily);
+ }
+
+ private static Font buildFont(String fontFamily, int fontStyle, int fontSize) {
+ if (fontFamily.contains(",")) {
+ for (String name : fontFamily.split(",")) {
+ name = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(name).trim();
+ if (doesFamilyExists(name)) {
+ return new Font(fontFamily, fontStyle, fontSize);
+ }
+ }
+ }
+ return new Font(fontFamily, fontStyle, fontSize);
+ }
+
+ private static boolean doesFamilyExists(String name) {
+ return names.contains(name.toLowerCase());
}
public static UFont serif(int size) {
@@ -87,6 +115,7 @@ public class UFont {
return font;
}
+ @Deprecated
public FontConfiguration toFont2(HtmlColor color, boolean useUnderlineForHyperlink, HtmlColor hyperlinkColor,
int tabSize) {
return new FontConfiguration(this, color, hyperlinkColor, useUnderlineForHyperlink, tabSize);
@@ -170,12 +199,6 @@ public class UFont {
return this.font.equals(((UFont) obj).font);
}
- @Deprecated
- public static UFont getCurrentFont(Graphics2D g2d) {
- // return new UFont(g2d.getFont(), g2d.getFont().getFontName());
- throw new UnsupportedOperationException();
- }
-
public LineMetrics getLineMetrics(Graphics2D gg, String text) {
final FontRenderContext frc = gg.getFontRenderContext();
return font.getLineMetrics(text, frc);