diff --git a/src/api/types/font.c b/src/api/types/font.c index 43b261b4..faa0f99c 100644 --- a/src/api/types/font.c +++ b/src/api/types/font.c @@ -14,8 +14,23 @@ int l_lovrFontSetLineHeight(lua_State* L) { return 0; } +int l_lovrFontGetPixelDensity(lua_State* L) { + Font* font = luax_checktype(L, 1, Font); + lua_pushnumber(L, lovrFontGetPixelDensity(font)); + return 1; +} + +int l_lovrFontSetPixelDensity(lua_State* L) { + Font* font = luax_checktype(L, 1, Font); + float pixelDensity = luaL_optnumber(L, 2, -1); + lovrFontSetPixelDensity(font, pixelDensity); + return 0; +} + const luaL_Reg lovrFont[] = { { "getLineHeight", l_lovrFontGetLineHeight }, { "setLineHeight", l_lovrFontSetLineHeight }, + { "getPixelDensity", l_lovrFontGetPixelDensity }, + { "setPixelDensity", l_lovrFontSetPixelDensity }, { NULL, NULL } }; diff --git a/src/graphics/font.c b/src/graphics/font.c index e13b534b..4392de44 100644 --- a/src/graphics/font.c +++ b/src/graphics/font.c @@ -29,6 +29,7 @@ Font* lovrFontCreate(FontData* fontData) { font->fontData = fontData; font->texture = NULL; font->lineHeight = 1.f; + font->pixelDensity = font->fontData->height; vec_init(&font->vertices); map_init(&font->kerning); @@ -73,7 +74,7 @@ void lovrFontPrint(Font* font, const char* str, mat4 transform, float wrap, Hori float cy = -font->fontData->height * .8; float u = atlas->width; float v = atlas->height; - float scale = 1 / (float) font->fontData->height; + float scale = 1 / font->pixelDensity; int len = strlen(str); const char* start = str; @@ -191,6 +192,18 @@ int lovrFontGetKerning(Font* font, unsigned int left, unsigned int right) { return kerning; } +float lovrFontGetPixelDensity(Font* font) { + return font->pixelDensity; +} + +void lovrFontSetPixelDensity(Font* font, float pixelDensity) { + if (pixelDensity <= 0) { + pixelDensity = font->fontData->height; + } + + font->pixelDensity = pixelDensity; +} + Glyph* lovrFontGetGlyph(Font* font, uint32_t codepoint) { char key[6]; snprintf(key, 6, "%d", codepoint); diff --git a/src/graphics/font.h b/src/graphics/font.h index 59944082..66c30d20 100644 --- a/src/graphics/font.h +++ b/src/graphics/font.h @@ -38,6 +38,7 @@ typedef struct { map_int_t kerning; vec_float_t vertices; float lineHeight; + float pixelDensity; } Font; Font* lovrFontCreate(FontData* fontData); @@ -46,6 +47,8 @@ void lovrFontPrint(Font* font, const char* str, mat4 transform, float wrap, Hori float lovrFontGetLineHeight(Font* font); void lovrFontSetLineHeight(Font* font, float lineHeight); int lovrFontGetKerning(Font* font, unsigned int a, unsigned int b); +float lovrFontGetPixelDensity(Font* font); +void lovrFontSetPixelDensity(Font* font, float pixelDensity); Glyph* lovrFontGetGlyph(Font* font, uint32_t codepoint); void lovrFontAddGlyph(Font* font, Glyph* glyph); void lovrFontExpandTexture(Font* font);