diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2022-01-04 19:07:29 -0700 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-01-12 16:42:27 +0200 |
commit | f373b52ba91ff9b1e04578e6c42efd2414ddf1fa (patch) | |
tree | 47315937b1c244d2da9459b2cb05de1675ab01c6 /src/ftfont.c | |
parent | 492bf1e06edb4324a643ccb15dd6062762145f17 (diff) | |
download | emacs-f373b52ba91ff9b1e04578e6c42efd2414ddf1fa.tar.gz |
Skip virtual FcPattern entries for variable weight fonts
* src/ftfont.c (ftfont_list): Pass FC_VARIABLE to FcObjectSetBuild.
* src/ftfont.c (ftfont_pattern_entity): Skip meta/virtual FcPattern
entries for variable weight fonts (Bug#52888).
Diffstat (limited to 'src/ftfont.c')
-rw-r--r-- | src/ftfont.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/ftfont.c b/src/ftfont.c index 2bdcce306bc..5797300d231 100644 --- a/src/ftfont.c +++ b/src/ftfont.c @@ -189,6 +189,24 @@ ftfont_pattern_entity (FcPattern *p, Lisp_Object extra) return Qnil; if (FcPatternGetInteger (p, FC_INDEX, 0, &idx) != FcResultMatch) return Qnil; +#ifdef FC_VARIABLE + /* This is a virtual/meta FcPattern for a variable weight font, from + which it is possible to extract an FcRange value specifying the + minimum and maximum weights available in this file. We don't + need to know that information explicitly, so skip it. We will be + called with an FcPattern for each actually available, non-virtual + weight. + + Fontconfig started generating virtual/meta patterns for variable + weight fonts in the same release that FC_VARIABLE was added, so + we conditionalize on that constant. This also ensures that + FcPatternGetRange is available. */ + FcRange *range; + if (FcPatternGetRange (p, FC_WEIGHT, 0, &range) == FcResultMatch + && FcPatternGetBool (p, FC_VARIABLE, 0, &b) == FcResultMatch + && b == FcTrue) + return Qnil; +#endif /* FC_VARIABLE */ file = (char *) str; key = Fcons (build_unibyte_string (file), make_fixnum (idx)); @@ -863,6 +881,9 @@ ftfont_list (struct frame *f, Lisp_Object spec) #if defined HAVE_XFT && defined FC_COLOR FC_COLOR, #endif +#ifdef FC_VARIABLE + FC_VARIABLE, +#endif /* FC_VARIABLE */ NULL); if (! objset) goto err; |