diff options
Diffstat (limited to 'graphics/fonts')
-rw-r--r-- | graphics/fonts/ttf.cpp | 35 | ||||
-rw-r--r-- | graphics/fonts/ttf.h | 27 |
2 files changed, 50 insertions, 12 deletions
diff --git a/graphics/fonts/ttf.cpp b/graphics/fonts/ttf.cpp index 93f119f028..09a00672e3 100644 --- a/graphics/fonts/ttf.cpp +++ b/graphics/fonts/ttf.cpp @@ -101,7 +101,7 @@ public: TTFFont(); virtual ~TTFFont(); - bool load(Common::SeekableReadStream &stream, int size, uint dpi, bool monochrome, const uint32 *mapping); + bool load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping); virtual int getFontHeight() const; @@ -135,13 +135,15 @@ private: bool _allowLateCaching; void assureCached(uint32 chr) const; - bool _monochrome; + FT_Int32 _loadFlags; + FT_Render_Mode _renderMode; bool _hasKerning; }; TTFFont::TTFFont() : _initialized(false), _face(), _ttfFile(0), _size(0), _width(0), _height(0), _ascent(0), - _descent(0), _glyphs(), _monochrome(false), _hasKerning(false), _allowLateCaching(false) { + _descent(0), _glyphs(), _loadFlags(FT_LOAD_TARGET_NORMAL), _renderMode(FT_RENDER_MODE_NORMAL), + _hasKerning(false), _allowLateCaching(false) { } TTFFont::~TTFFont() { @@ -158,7 +160,7 @@ TTFFont::~TTFFont() { } } -bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, bool monochrome, const uint32 *mapping) { +bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) { if (!g_ttf.isInitialized()) return false; @@ -203,7 +205,22 @@ bool TTFFont::load(Common::SeekableReadStream &stream, int size, uint dpi, bool return false; } - _monochrome = monochrome; + switch (renderMode) { + case kTTFRenderModeNormal: + _loadFlags = FT_LOAD_TARGET_NORMAL; + _renderMode = FT_RENDER_MODE_NORMAL; + break; + + case kTTFRenderModeLight: + _loadFlags = FT_LOAD_TARGET_LIGHT; + _renderMode = FT_RENDER_MODE_LIGHT; + break; + + case kTTFRenderModeMonochrome: + _loadFlags = FT_LOAD_TARGET_MONO; + _renderMode = FT_RENDER_MODE_MONO; + break; + } FT_Fixed yScale = _face->size->metrics.y_scale; _ascent = ftCeil26_6(FT_MulFix(_face->ascender, yScale)); @@ -413,10 +430,10 @@ bool TTFFont::cacheGlyph(Glyph &glyph, uint32 chr) const { // We use the light target and render mode to improve the looks of the // glyphs. It is most noticable in FreeSansBold.ttf, where otherwise the // 't' glyph looks like it is cut off on the right side. - if (FT_Load_Glyph(_face, slot, (_monochrome ? FT_LOAD_TARGET_MONO : FT_LOAD_TARGET_LIGHT))) + if (FT_Load_Glyph(_face, slot, _loadFlags)) return false; - if (FT_Render_Glyph(_face->glyph, (_monochrome ? FT_RENDER_MODE_MONO : FT_RENDER_MODE_LIGHT))) + if (FT_Render_Glyph(_face->glyph, _renderMode)) return false; if (_face->glyph->format != FT_GLYPH_FORMAT_BITMAP) @@ -503,10 +520,10 @@ void TTFFont::assureCached(uint32 chr) const { } } -Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi, bool monochrome, const uint32 *mapping) { +Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) { TTFFont *font = new TTFFont(); - if (!font->load(stream, size, dpi, monochrome, mapping)) { + if (!font->load(stream, size, dpi, renderMode, mapping)) { delete font; return 0; } diff --git a/graphics/fonts/ttf.h b/graphics/fonts/ttf.h index 65aba32fbf..bd25b69f21 100644 --- a/graphics/fonts/ttf.h +++ b/graphics/fonts/ttf.h @@ -34,14 +34,35 @@ namespace Graphics { class Font; /** + * This specifies the mode in which TTF glyphs are rendered. This, for example, + * allows to render glyphs fully monochrome, i.e. without any anti-aliasing. + */ +enum TTFRenderMode { + /** + * Standard render mode. Equivalent of FreeType2's FT_RENDER_MODE_NORMAL. + */ + kTTFRenderModeNormal, + + /** + * Use lighter hinting. Equivalent of FreeType2's FT_RENDER_MODE_LIGHT. + */ + kTTFRenderModeLight, + + /** + * Render fully monochrome. This makes glyph pixels either be fully opaque + * or fully transparent. + */ + kTTFRenderModeMonochrome +}; + +/** * Loads a TTF font file from a given data stream object. * * @param stream Stream object to load font data from. * @param size The point size to load. * @param dpi The dpi to use for size calculations, by default 72dpi * are used. - * @param monochrome Whether the font should be loaded in pure monochrome - * mode. In case this is true no aliasing is used. + * @param renderMode FreeType2 mode used to render glyphs. @see TTFRenderMode * @param mapping A mapping from code points 0-255 into UTF-32 code points. * This can be used to support various 8bit character sets. * In case the msb of the UTF-32 code point is set the font @@ -50,7 +71,7 @@ class Font; * supported. * @return 0 in case loading fails, otherwise a pointer to the Font object. */ -Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi = 0, bool monochrome = false, const uint32 *mapping = 0); +Font *loadTTFFont(Common::SeekableReadStream &stream, int size, uint dpi = 0, TTFRenderMode renderMode = kTTFRenderModeLight, const uint32 *mapping = 0); void shutdownTTF(); |