From 08fe64b91e7e43db54628f922f07864a8d8e5402 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 27 Nov 2021 19:42:03 +0100 Subject: Use correct offset y for font position (ascent) --- src/graphics/font.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/graphics/font.c') diff --git a/src/graphics/font.c b/src/graphics/font.c index 82a8029..cad5790 100644 --- a/src/graphics/font.c +++ b/src/graphics/font.c @@ -50,6 +50,16 @@ int mgl_font_load_from_file(mgl_font *self, const mgl_memory_mapped_file *mapped return -1; } + int ascent = 0; + int descent = 0; + int linegap = 0; + stbtt_GetFontVMetrics(self->font_info, &ascent, &descent, &linegap); + + const float font_scale = stbtt_ScaleForPixelHeight(self->font_info, self->character_size*GLYPH_UPSAMPLE); + self->ascent = round_float(font_scale * ascent); + self->descent = round_float(font_scale * descent); + self->linegap = round_float(font_scale * linegap); + /* TODO: Use stbtt_GetCodepointSDF */ return 0; } @@ -59,6 +69,9 @@ void mgl_font_unload(mgl_font *self) { mgl_font_char_map_deinit(&self->char_map); self->current_line_max_height = 0; + self->ascent = 0; + self->descent = 0; + self->linegap = 0; free(self->font_info); self->font_info = NULL; @@ -216,7 +229,7 @@ int mgl_font_get_glyph(mgl_font *self, uint32_t codepoint, mgl_font_glyph *glyph render_offset.y = self->font_atlas.pointer_position.y; mgl_font_glyph new_glyph; - new_glyph.position = (mgl_vec2i){ xoff/GLYPH_UPSAMPLE, yoff/GLYPH_UPSAMPLE }; + new_glyph.position = (mgl_vec2i){ xoff/GLYPH_UPSAMPLE, self->ascent + yoff/GLYPH_UPSAMPLE }; new_glyph.size = (mgl_vec2i){ width/GLYPH_UPSAMPLE, height/GLYPH_UPSAMPLE }; new_glyph.texture_position = (mgl_vec2i){ render_offset.x, render_offset.y }; new_glyph.texture_size = (mgl_vec2i){ width, height }; -- cgit v1.2.3