package de.lessvoid.nifty.slick2d.render.font.loader;
import de.lessvoid.nifty.slick2d.render.font.SlickLoadFontException;
import de.lessvoid.nifty.slick2d.render.font.SlickRenderFont;
import de.lessvoid.nifty.slick2d.render.font.UnicodeSlickRenderFont;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;
import javax.annotation.Nonnull;
import java.awt.*;
/**
* Load the font as Unicode font using Hiero settings to specify how the font is supposed to look like.
*
* @author Martin Karing <nitram@illarion.org>
*/
public final class UnicodeSlickRenderFontLoader extends AbstractJavaSlickRenderFontLoader {
/**
* The default size of a font. This value is needed as TrueType fonts in general do not have a default size,
* but Nifty
* expects a font to be rendered at default size.
*/
private static final float DEFAULT_SIZE = 12.0f;
/**
* The font size that will be actually used in case the font does not provide a default size.
*/
private final float fontSize;
/**
* Constructor that uses the provided default size of 12pt as font size.
*/
public UnicodeSlickRenderFontLoader() {
this(DEFAULT_SIZE);
}
/**
* This constructor allows setting the size all fonts are load with.
*
* @param defaultSize the new size of the font
*/
public UnicodeSlickRenderFontLoader(final float defaultSize) {
fontSize = defaultSize;
}
/**
* Load the font. The name of the font will be used as name of the Hiero settings file. The true type font file will
* be load by trying to add ".ttf" to the filename and by replacing the file ending with "ttf".
*/
@Nonnull
@Override
@SuppressWarnings("unchecked")
public SlickRenderFont loadFont(final Graphics g, final String filename) throws SlickLoadFontException {
Font javaFont = loadJavaFont(filename);
if (javaFont == null) {
throw new SlickLoadFontException("Loading TTF Font failed.");
}
javaFont = javaFont.deriveFont(fontSize);
try {
final UnicodeFont uniFont = new UnicodeFont(javaFont);
uniFont.addAsciiGlyphs();
uniFont.getEffects().add(new ColorEffect());
return new UnicodeSlickRenderFont(uniFont, javaFont);
} catch (@Nonnull final SlickLoadFontException e) {
throw new SlickLoadFontException("Loading the font failed.", e);
}
}
}