now caching the 3 differently sized font objects and setting fallback font as rs default

This commit is contained in:
l2-
2018-10-23 22:14:44 +02:00
parent 1f1478a9b2
commit 6dec9b5f62
2 changed files with 49 additions and 8 deletions

View File

@@ -546,8 +546,8 @@ public class ConfigPanel extends PluginPanel
} }
else else
{ {
log.debug("Selected font wasn't found on this system, resetting font back to runescape small"); 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.getRunescapeSmallFont()); configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), FontManager.getRunescapeFont());
} }
box.addItemListener(e -> box.addItemListener(e ->
{ {

View File

@@ -28,11 +28,13 @@ import com.google.common.collect.ImmutableBiMap;
import java.awt.Canvas; import java.awt.Canvas;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.awt.Font; import java.awt.Font;
import java.awt.FontFormatException; import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment; import java.awt.GraphicsEnvironment;
import java.io.IOException; import java.io.IOException;
import lombok.Getter;
import net.runelite.client.config.FontType; import net.runelite.client.config.FontType;
public class FontManager public class FontManager
@@ -41,7 +43,23 @@ public class FontManager
private static final Font runescapeSmallFont; private static final Font runescapeSmallFont;
private static final Font runescapeBoldFont; 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<String, Font> fontMap; private static final ImmutableBiMap<String, Font> fontMap;
private static final HashMap<Font, CachedFont> derivedFontMap = new HashMap<>();
static static
{ {
@@ -62,9 +80,7 @@ public class FontManager
.deriveFont(Font.PLAIN, 16); .deriveFont(Font.PLAIN, 16);
final LinkedHashMap<String, Font> _fontMap = new LinkedHashMap<>(); final LinkedHashMap<String, Font> _fontMap = new LinkedHashMap<>();
_fontMap.put("Runescape small", runescapeSmallFont); _fontMap.put("Runescape", runescapeFont);
_fontMap.put("Runescape default", runescapeFont);
_fontMap.put("Runescape bold", runescapeBoldFont);
// Get all available fonts on the system // Get all available fonts on the system
Font[] availableFonts = ge.getAllFonts(); Font[] availableFonts = ge.getAllFonts();
@@ -137,7 +153,16 @@ public class FontManager
{ {
return runescapeSmallFont; 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) public static Font getFontFromType(Font f, FontType type)
@@ -151,13 +176,29 @@ public class FontManager
{ {
return runescapeBoldFont; 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 default: //in this case regular
if (isRunescapeFont(f)) if (isRunescapeFont(f))
{ {
return runescapeFont; 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();
} }
} }