|
@@ -40,6 +40,8 @@ TrueTypeRasterizer::TrueTypeRasterizer(FT_Library library, love::Data *data, int
|
|
|
dpiScale = settings.dpiScale.get(defaultdpiscale);
|
|
|
size = floorf(size * dpiScale + 0.5f);
|
|
|
|
|
|
+ sdf = settings.sdf;
|
|
|
+
|
|
|
if (size <= 0)
|
|
|
throw love::Exception("Invalid TrueType font size: %d", size);
|
|
|
|
|
@@ -119,13 +121,26 @@ GlyphData *TrueTypeRasterizer::getGlyphDataForIndex(int index) const
|
|
|
throw love::Exception("TrueType Font glyph error: FT_Get_Glyph failed (0x%x)", err);
|
|
|
|
|
|
FT_Render_Mode rendermode = FT_RENDER_MODE_NORMAL;
|
|
|
- if (hinting == HINTING_MONO)
|
|
|
+ if (sdf)
|
|
|
+ rendermode = FT_RENDER_MODE_SDF;
|
|
|
+ else if (hinting == HINTING_MONO)
|
|
|
rendermode = FT_RENDER_MODE_MONO;
|
|
|
|
|
|
err = FT_Glyph_To_Bitmap(&ftglyph, rendermode, 0, 1);
|
|
|
|
|
|
if (err != FT_Err_Ok)
|
|
|
- throw love::Exception("TrueType Font glyph error: FT_Glyph_To_Bitmap failed (0x%x)", err);
|
|
|
+ {
|
|
|
+ if (rendermode == FT_RENDER_MODE_SDF)
|
|
|
+ {
|
|
|
+ err = FT_Glyph_To_Bitmap(&ftglyph, FT_RENDER_MODE_NORMAL, 0, 1);
|
|
|
+ if (err != FT_Err_Ok)
|
|
|
+ throw love::Exception("TrueType Font glyph error: FT_Glyph_To_Bitmap failed (0x%x)", err);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ throw love::Exception("TrueType Font glyph error: FT_Glyph_To_Bitmap failed (0x%x)", err);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph) ftglyph;
|
|
|
const FT_Bitmap &bitmap = bitmap_glyph->bitmap; //just to make things easier
|