From 8e25f05bad59323d55dd80ce9c753322d2ac73e5 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Fri, 31 Aug 2018 14:19:11 +0200 Subject: gl: Allow varying font sizes in text rendering. --- platform/gl/gl-app.h | 2 +- platform/gl/gl-font.c | 20 ++++++++++---------- platform/gl/gl-ui.c | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'platform') diff --git a/platform/gl/gl-app.h b/platform/gl/gl-app.h index 8b4cbe74..0faa35b0 100644 --- a/platform/gl/gl-app.h +++ b/platform/gl/gl-app.h @@ -109,7 +109,7 @@ void ui_finish(void); void ui_set_clipboard(const char *buf); const char *ui_get_clipboard(void); -void ui_init_fonts(float pixelsize); +void ui_init_fonts(void); void ui_finish_fonts(void); float ui_measure_character(int ucs); void ui_begin_text(void); diff --git a/platform/gl/gl-font.c b/platform/gl/gl-font.c index 3b7c3e77..b286d8a6 100644 --- a/platform/gl/gl-font.c +++ b/platform/gl/gl-font.c @@ -29,6 +29,7 @@ struct key { fz_font *font; + float size; short gid; unsigned char subx; unsigned char suby; @@ -56,7 +57,6 @@ static int g_cache_row_x = 0; static int g_cache_row_h = 0; static fz_font *g_font = NULL; -static float g_font_size = 16; static void clear_font_cache(void) { @@ -76,7 +76,7 @@ static void clear_font_cache(void) g_cache_row_h = 0; } -void ui_init_fonts(float pixelsize) +void ui_init_fonts(void) { const unsigned char *data; int size; @@ -95,7 +95,6 @@ void ui_init_fonts(float pixelsize) if (!data) data = fz_lookup_builtin_font(ctx, "Times", 0, 0, &size); g_font = fz_new_font_from_memory(ctx, NULL, data, size, 0, 0); - g_font_size = pixelsize; } void ui_finish_fonts(void) @@ -127,7 +126,7 @@ static unsigned int lookup_table(struct key *key) } } -static struct glyph *lookup_glyph(fz_font *font, int gid, float *xp, float *yp) +static struct glyph *lookup_glyph(fz_font *font, float size, int gid, float *xp, float *yp) { fz_matrix trm, subpix_trm; unsigned char subx, suby; @@ -137,7 +136,7 @@ static struct glyph *lookup_glyph(fz_font *font, int gid, float *xp, float *yp) int w, h; /* match fitz's glyph cache quantization */ - trm = fz_scale(g_font_size, -g_font_size); + trm = fz_scale(size, -size); trm.e = *xp; trm.f = *yp; fz_subpixel_adjust(ctx, &trm, &subpix_trm, &subx, &suby); @@ -150,6 +149,7 @@ static struct glyph *lookup_glyph(fz_font *font, int gid, float *xp, float *yp) memset(&key, 0, sizeof key); key.font = font; + key.size = size; key.gid = gid; key.subx = subx; key.suby = suby; @@ -225,12 +225,12 @@ static struct glyph *lookup_glyph(fz_font *font, int gid, float *xp, float *yp) return &g_table[pos].glyph; } -static float ui_draw_glyph(fz_font *font, int gid, float x, float y) +static float ui_draw_glyph(fz_font *font, float size, int gid, float x, float y) { struct glyph *glyph; float s0, t0, s1, t1, xc, yc; - glyph = lookup_glyph(font, gid, &x, &y); + glyph = lookup_glyph(font, size, gid, &x, &y); if (!glyph) return 0; @@ -246,21 +246,21 @@ static float ui_draw_glyph(fz_font *font, int gid, float x, float y) glTexCoord2f(s1, t1); glVertex2f(xc + glyph->w, yc); glTexCoord2f(s0, t1); glVertex2f(xc, yc); - return fz_advance_glyph(ctx, font, gid, 0) * g_font_size; + return fz_advance_glyph(ctx, font, gid, 0) * size; } float ui_measure_character(int ucs) { fz_font *font; int gid = fz_encode_character_with_fallback(ctx, g_font, ucs, 0, 0, &font); - return fz_advance_glyph(ctx, font, gid, 0) * g_font_size; + return fz_advance_glyph(ctx, font, gid, 0) * ui.fontsize; } float ui_draw_character(int ucs, float x, float y) { fz_font *font; int gid = fz_encode_character_with_fallback(ctx, g_font, ucs, 0, 0, &font); - return ui_draw_glyph(font, gid, x, y); + return ui_draw_glyph(font, ui.fontsize, gid, x, y); } void ui_begin_text(void) diff --git a/platform/gl/gl-ui.c b/platform/gl/gl-ui.c index 7ce94500..4e8a4325 100644 --- a/platform/gl/gl-ui.c +++ b/platform/gl/gl-ui.c @@ -422,7 +422,7 @@ void ui_init(int w, int h, const char *title) ui.lineheight = DEFAULT_UI_LINEHEIGHT * ui_scale; ui.gridsize = DEFAULT_UI_GRIDSIZE * ui_scale; - ui_init_fonts(ui.fontsize); + ui_init_fonts(); ui.overlay_list = glGenLists(1); } -- cgit v1.2.3