Hi,
Please see attached patch and discussion at:
Thanks,
commit bce6044a76fb565a39224cafbbc03ff904066297
Author: Behdad Esfahbod <behdad@xxxxxxxxxx>
Date: Mon Nov 8 21:16:08 2021 -0800
If a varfont has 'opsz' axis, set FC_SIZE on default instant pattern
Otherwise default-instance pattern would match as an "all sizes",
which would be wrong. See:
https://gitlab.gnome.org/GNOME/pango/-/issues/621#note_1305844
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index ee86eb9..8c4c3d2 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -1257,16 +1257,15 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
goto bail1;
}
+ if (FT_Get_MM_Var (face, &master))
+ goto bail1;
+
if (id >> 16)
{
- if (FT_Get_MM_Var (face, &master))
- goto bail1;
-
if (id >> 16 == 0x8000)
{
/* Query variable font itself. */
unsigned int i;
-
for (i = 0; i < master->num_axis; i++)
{
double min_value = master->axis[i].minimum / (double) (1U << 16);
@@ -1352,6 +1351,22 @@ FcFreeTypeQueryFaceInternal (const FT_Face face,
else
goto bail1;
}
+ else
+ {
+ unsigned int i;
+ for (i = 0; i < master->num_axis; i++)
+ {
+ switch (master->axis[i].tag)
+ {
+ case FT_MAKE_TAG ('o','p','s','z'):
+ if (!FcPatternObjectAddDouble (pat, FC_SIZE_OBJECT, master->axis[i].def / (double) (1U << 16)))
+ goto bail1;
+ variable_size = FcTrue;
+ break;
+ }
+
+ }
+ }
if (!FcPatternObjectAddBool (pat, FC_VARIABLE_OBJECT, variable))
goto bail1;