Skip to content

Commit

Permalink
Merge pull request #1966 from Labrium/sdf-font-hintingmode
Browse files Browse the repository at this point in the history
Add SDF HintingMode
  • Loading branch information
slime73 authored Jun 23, 2024
2 parents 10c435c + 85cd98f commit 2e1e48b
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/modules/font/Rasterizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ class Rasterizer : public Object

FontMetrics metrics;
float dpiScale;
bool sdf;

}; // Rasterizer

Expand Down
1 change: 1 addition & 0 deletions src/modules/font/TrueTypeRasterizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class TrueTypeRasterizer : public Rasterizer
{
Hinting hinting = HINTING_NORMAL;
OptionalFloat dpiScale;
bool sdf = false;
};

virtual ~TrueTypeRasterizer() {}
Expand Down
19 changes: 17 additions & 2 deletions src/modules/font/freetype/TrueTypeRasterizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions src/modules/font/wrap_Font.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@ static TrueTypeRasterizer::Settings luax_checktruetypesettings(lua_State* L, int
if (!lua_isnoneornil(L, -1))
s.dpiScale.set((float)luaL_checknumber(L, -1));
lua_pop(L, 1);

lua_getfield(L, startidx, "sdf");
if (!lua_isnoneornil(L, -1))
s.sdf = lua_toboolean(L, -1);
lua_pop(L, 1);
}

return s;
Expand Down

0 comments on commit 2e1e48b

Please sign in to comment.