From 878c94a334e2b830e57f90def10d3654b6996ed5 Mon Sep 17 00:00:00 2001 From: rxi Date: Sat, 5 Sep 2020 15:06:12 +0100 Subject: [PATCH] Changed rencache to store font tab_width with font command Fixes bug where text would be drawn/cached wrongly if more than one tab_width was used in a given frame --- src/rencache.c | 3 +++ src/renderer.c | 6 ++++++ src/renderer.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/rencache.c b/src/rencache.c index b0b06cf..5c6de32 100644 --- a/src/rencache.c +++ b/src/rencache.c @@ -18,6 +18,7 @@ typedef struct { RenRect rect; RenColor color; RenFont *font; + int tab_width; char text[0]; } Command; @@ -143,6 +144,7 @@ int rencache_draw_text(RenFont *font, const char *text, int x, int y, RenColor c cmd->color = color; cmd->font = font; cmd->rect = rect; + cmd->tab_width = ren_get_font_tab_width(font); } } @@ -254,6 +256,7 @@ void rencache_end_frame(void) { ren_draw_rect(cmd->rect, cmd->color); break; case DRAW_TEXT: + ren_set_font_tab_width(cmd->font, cmd->tab_width); ren_draw_text(cmd->font, cmd->text, cmd->rect.x, cmd->rect.y, cmd->color); break; } diff --git a/src/renderer.c b/src/renderer.c index 695634f..0751d0b 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -222,6 +222,12 @@ void ren_set_font_tab_width(RenFont *font, int n) { } +int ren_get_font_tab_width(RenFont *font) { + GlyphSet *set = get_glyphset(font, '\t'); + return set->glyphs['\t'].xadvance; +} + + int ren_get_font_width(RenFont *font, const char *text) { int x = 0; const char *p = text; diff --git a/src/renderer.h b/src/renderer.h index 3cefa5c..69cc1f0 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -22,6 +22,7 @@ void ren_free_image(RenImage *image); RenFont* ren_load_font(const char *filename, float size); void ren_free_font(RenFont *font); void ren_set_font_tab_width(RenFont *font, int n); +int ren_get_font_tab_width(RenFont *font); int ren_get_font_width(RenFont *font, const char *text); int ren_get_font_height(RenFont *font);