Introduction
Introduction Statistics Contact Development Disclaimer Help
tFixed 'missing glyph doesn't use fontconfig config substitutions' bug - st - […
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit fa9a4599720703932d1c4f16b9aeee1f91f96263
parent 740ada1447a0bf9eb7db327d9433fa0b96e0a4d8
Author: Spencer Phippen <[email protected]>
Date: Wed, 23 Nov 2016 19:17:59 +0100
Fixed 'missing glyph doesn't use fontconfig config substitutions' bug
XftFontMatch does display-specific font configuration (commit 528241a).
Nice. Unfortunately, when we switched from FcFontMatch, we also stopped
storing the post-Fc{Config,Default}Substitute FcPattern for future
lookups. The result is that if a glyph isn't found in the primary font,
secondary font lookups use the original FcPattern, not the configured
one. If you have custom fontconfig rules (like me), this can be
disappointing.
I basically just copied the guts out of XftFontMatch[1] and saved
tthe intermediate configured FcPattern. Could be related to the bug that
inspired commit 4242027.
t[1]: https://cgit.freedesktop.org/xorg/lib/libXft/tree/src/xftfont.c
Diffstat:
M st.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -3373,16 +3373,32 @@ xgeommasktogravity(int mask)
int
xloadfont(Font *f, FcPattern *pattern)
{
+ FcPattern *configured;
FcPattern *match;
FcResult result;
XGlyphInfo extents;
int wantattr, haveattr;
- match = XftFontMatch(xw.dpy, xw.scr, pattern, &result);
- if (!match)
+ /*
+ * Manually configure instead of calling XftMatchFont
+ * so that we can use the configured pattern for
+ * "missing glyph" lookups.
+ */
+ configured = FcPatternDuplicate(pattern);
+ if (!configured)
+ return 1;
+
+ FcConfigSubstitute(NULL, configured, FcMatchPattern);
+ XftDefaultSubstitute(xw.dpy, xw.scr, configured);
+
+ match = FcFontMatch(NULL, configured, &result);
+ if (!match) {
+ FcPatternDestroy(configured);
return 1;
+ }
if (!(f->match = XftFontOpenPattern(xw.dpy, match))) {
+ FcPatternDestroy(configured);
FcPatternDestroy(match);
return 1;
}
t@@ -3414,7 +3430,7 @@ xloadfont(Font *f, FcPattern *pattern)
strlen(ascii_printable), &extents);
f->set = NULL;
- f->pattern = FcPatternDuplicate(pattern);
+ f->pattern = configured;
f->ascent = f->match->ascent;
f->descent = f->match->descent;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.