Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdd a hack to handle unknown chars in fontconfig. - st - [fork] customized bui…
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit b0bddc694a79dd24edb8f997acadecbff356a9e0
parent 487bbb24d02190efa3d18093cadfa376f816d7fa
Author: Christoph Lohmann <[email protected]>
Date: Mon, 9 Mar 2015 23:16:03 +0100
Add a hack to handle unknown chars in fontconfig.
The unicode long is added to the cache. So when fontconfig does fall back to
tthe default font (where there is no easy way to find this out from the
pattern) it isn't reloaded.
Diffstat:
M st.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -522,6 +522,7 @@ enum {
typedef struct {
XftFont *font;
int flags;
+ long unicodep;
} Fontcache;
/* Fontcache is an array now. A new font will be appended to the array. */
t@@ -3208,7 +3209,7 @@ void
xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
int winx = borderpx + x * xw.cw, winy = borderpx + y * xw.ch,
width = charlen * xw.cw, xp, i;
- int frcflags;
+ int frcflags, charexists;
int u8fl, u8fblen, u8cblen, doesexist;
char *u8c, *u8fs;
long unicodep;
t@@ -3391,8 +3392,13 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, …
/* Search the font cache. */
for(i = 0; i < frclen; i++) {
- if(XftCharExists(xw.dpy, frc[i].font, unicodep)
- && frc[i].flags == frcflags) {
+ charexists = XftCharExists(xw.dpy, frc[i].font, unicod…
+ /* Everything correct. */
+ if(charexists && frc[i].flags == frcflags)
+ break;
+ /* We got a default font for a not found glyph. */
+ if(!charexists && frc[i].flags == frcflags \
+ && unicodep == unicodep) {
break;
}
}
t@@ -3421,10 +3427,11 @@ xdraws(char *s, Glyph base, int x, int y, int charlen,…
FcConfigSubstitute(0, fcpattern,
FcMatchPattern);
+ FcPatternPrint(fcpattern);
FcDefaultSubstitute(fcpattern);
- fontpattern = FcFontSetMatch(0, fcsets,
- FcTrue, fcpattern, &fcres);
+ fontpattern = FcFontSetMatch(0, fcsets, 1,
+ fcpattern, &fcres);
/*
* Overwrite or create the new cache entry.
t@@ -3432,11 +3439,13 @@ xdraws(char *s, Glyph base, int x, int y, int charlen,…
if(frclen >= LEN(frc)) {
frclen = LEN(frc) - 1;
XftFontClose(xw.dpy, frc[frclen].font);
+ frc[frclen].unicodep = 0;
}
frc[frclen].font = XftFontOpenPattern(xw.dpy,
fontpattern);
frc[frclen].flags = frcflags;
+ frc[frclen].unicodep = unicodep;
i = frclen;
frclen++;
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.