package boxrenderer;
import java.awt.Font;
import java.io.InputStream;
import java.util.Map;
import org.apache.poi.util.IOUtils;
import com.google.common.collect.Maps;
public class FontManager {
private Resolver resolver;
private Map<String, Font> fonts = Maps.newHashMap();
public FontManager(Resolver resolver) {
this.resolver = resolver;
}
public void registerFont(String family, String src) {
try {
InputStream stream = resolver.resolve(src);
if(stream == null) {
throw new Exception("failed to resolve "+src);
}
Font font = Font.createFont(Font.TRUETYPE_FONT, stream);
fonts.put(family, font);
IOUtils.closeQuietly(stream);
} catch(Exception e) {
throw new RuntimeException(String.format(
"failed to register font %s with source %s", family, src), e);
}
}
public Font getFont(String family, int style, int size) {
Font font = fonts.get(family);
if(font != null) {
return font.deriveFont(style, getSize(size));
} else {
return new Font(family, style, getSize(size));
}
}
// fixes the font size, http://www.3rd-evolution.de/tkrammer/docs/java_font_size.html
public int getSize(int size) {
return (int)Math.round((double)size * 96.0 / 72.0);
}
}