diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-05-13 21:35:26 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-05-13 22:02:35 -0400 |
commit | bc088d668340b2b02cd4c97d158cd944dea238ea (patch) | |
tree | cbaa3d90e2d79ef3bdcd3452b1c3594e15449ccd | |
parent | 8e7bc8d74264324bccc4334d9ead0aba2c048a0d (diff) | |
download | gtk+-better-glyph-caching.tar.gz |
ngl: Improve glyph cachingbetter-glyph-caching
Avoid creating duplicate cache entries with miniscule
scale differences. It does not cost us much to use a
slightly larger texture for a glyph.
-rw-r--r-- | gsk/ngl/gsknglrenderjob.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gsk/ngl/gsknglrenderjob.c b/gsk/ngl/gsknglrenderjob.c index d08d45a04f..0ebe3921cb 100644 --- a/gsk/ngl/gsknglrenderjob.c +++ b/gsk/ngl/gsknglrenderjob.c @@ -2837,6 +2837,7 @@ gsk_ngl_render_job_visit_text_node (GskNglRenderJob *job, guint i; int yshift; float ypos; + float scale; if (num_glyphs == 0) return; @@ -2847,8 +2848,13 @@ gsk_ngl_render_job_visit_text_node (GskNglRenderJob *job, if (force_color || !gsk_text_node_has_color_glyphs (node)) rgba_to_half (color, c); + /* Avoid caching glyphs with miniscule scale differences */ + scale = 1; + while (scale < text_scale) + scale *= 1.2; + lookup.font = (PangoFont *)font; - lookup.scale = (guint) (text_scale * 1024); + lookup.scale = (guint) (scale * 1024); yshift = compute_phase_and_pos (y, &ypos); |