aboutsummaryrefslogtreecommitdiff
path: root/src/graphics/font.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics/font.c')
-rw-r--r--src/graphics/font.c15
1 files changed, 14 insertions, 1 deletions
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 };