summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-08-31 14:19:11 +0200
committerTor Andersson <tor.andersson@artifex.com>2018-09-05 12:52:06 +0200
commit8e25f05bad59323d55dd80ce9c753322d2ac73e5 (patch)
tree9b4996e32bac315d0b40f458af586e925a6e6c4a
parent173216938390389c68af78518f3f521434cb66a9 (diff)
downloadmupdf-8e25f05bad59323d55dd80ce9c753322d2ac73e5.tar.xz
gl: Allow varying font sizes in text rendering.
-rw-r--r--platform/gl/gl-app.h2
-rw-r--r--platform/gl/gl-font.c20
-rw-r--r--platform/gl/gl-ui.c2
3 files changed, 12 insertions, 12 deletions
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);
}