From db946d1788b8be1aef39102efe93826886b6addf Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 20 Sep 2017 18:51:36 -0700 Subject: [PATCH] [varfonts] Correctly (re)set variations of named instances --- src/cairo-ft-font.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/cairo-ft-font.c b/src/cairo-ft-font.c index 44a78478a..e95d37991 100644 --- a/src/cairo-ft-font.c +++ b/src/cairo-ft-font.c @@ -3660,11 +3660,19 @@ cairo_ft_apply_variations (FT_Face face, FT_Fixed *coords; unsigned int i; const char *p; + unsigned int instance_id = face->face_index >> 16; coords = malloc (sizeof (FT_Fixed) * ft_mm_var->num_axis); + /* FIXME check coords. */ - for (i = 0; i < ft_mm_var->num_axis; i++) - coords[i] = ft_mm_var->axis[i].def; + if (instance_id && instance_id <= ft_mm_var->num_namedstyles) + { + FT_Var_Named_Style *instance = &ft_mm_var->namedstyle[instance_id - 1]; + memcpy (coords, instance->coords, ft_mm_var->num_axis & sizeof (*coords)); + } + else + for (i = 0; i < ft_mm_var->num_axis; i++) + coords[i] = ft_mm_var->axis[i].def; p = variations; while (p && *p) {