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 ++++++++++++++- src/graphics/text.c | 3 ++- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src/graphics') 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 }; diff --git a/src/graphics/text.c b/src/graphics/text.c index 66ef7e3..92c578c 100644 --- a/src/graphics/text.c +++ b/src/graphics/text.c @@ -213,10 +213,11 @@ void mgl_text_draw(mgl_context *context, mgl_text *text) { return; /* Calculate bounds beforehand if needed, which also generates glyphs because opengl outputs an error if that is done inside glBegin/glEnd */ + /* TODO: Only run this on the new glyphs */ mgl_text_get_bounds(text); TextDrawUserdata text_draw_userdata; - text_draw_userdata.position = (mgl_vec2f){ text->position.x, text->position.y + text->font->character_size }; + text_draw_userdata.position = (mgl_vec2f){ text->position.x, text->position.y }; text_draw_userdata.text = text; text_draw_userdata.context = context; text_draw_userdata.prev_codepoint = 0; -- cgit v1.2.3