gsk: Add font options to the glyph cache

The cairo_t that we create to render glyphs for
the glyph cache needs to match the font options
that are supposedly governing how glyphs are
drawn.

Since we allow font options to be different per
widget in gtk, we need to have them at least at
the level of individual render nodes. Adding them
to the lookup key for the glyph cache has the
side effect of solving another problem: We are
not flushing the cache when font options change.
This commit is contained in:
Matthias Clasen 2021-08-31 23:01:43 -04:00
parent f1347f5841
commit 6599cb001f
2 changed files with 12 additions and 1 deletions

View File

@ -166,11 +166,19 @@ render_glyph (cairo_surface_t *surface,
{
cairo_t *cr;
cairo_glyph_t glyph;
cairo_font_options_t *options;
g_assert (surface != NULL);
g_assert (scaled_font != NULL);
cr = cairo_create (surface);
options = cairo_font_options_create ();
cairo_font_options_set_hint_metrics (options, key->hint_metrics ? CAIRO_HINT_METRICS_ON : CAIRO_HINT_METRICS_OFF);
cairo_font_options_set_antialias (options, key->antialias ? CAIRO_ANTIALIAS_GRAY : CAIRO_ANTIALIAS_NONE);
cairo_font_options_set_hint_style (options, key->hint_style);
cairo_set_font_options (cr, options);
cairo_font_options_destroy (options);
cairo_set_scaled_font (cr, scaled_font);
cairo_set_source_rgba (cr, 1, 1, 1, 1);

View File

@ -35,7 +35,10 @@ typedef struct _GskNglGlyphKey
PangoGlyph glyph;
guint xshift : 2;
guint yshift : 2;
guint scale : 28; /* times 1024 */
guint hint_metrics : 1;
guint antialias : 1;
guint hint_style : 3;
guint scale : 23; /* times 1024 */
} GskNglGlyphKey;
typedef struct _GskNglGlyphValue