diff options
| -rw-r--r-- | st.c | 19 |
1 files changed, 14 insertions, 5 deletions
| @@ -522,6 +522,7 @@ enum { | |||
| 522 | typedef struct { | 522 | typedef struct { |
| 523 | XftFont *font; | 523 | XftFont *font; |
| 524 | int flags; | 524 | int flags; |
| 525 | long unicodep; | ||
| 525 | } Fontcache; | 526 | } Fontcache; |
| 526 | 527 | ||
| 527 | /* Fontcache is an array now. A new font will be appended to the array. */ | 528 | /* Fontcache is an array now. A new font will be appended to the array. */ |
| @@ -3208,7 +3209,7 @@ void | |||
| 3208 | xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { | 3209 | xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
| 3209 | int winx = borderpx + x * xw.cw, winy = borderpx + y * xw.ch, | 3210 | int winx = borderpx + x * xw.cw, winy = borderpx + y * xw.ch, |
| 3210 | width = charlen * xw.cw, xp, i; | 3211 | width = charlen * xw.cw, xp, i; |
| 3211 | int frcflags; | 3212 | int frcflags, charexists; |
| 3212 | int u8fl, u8fblen, u8cblen, doesexist; | 3213 | int u8fl, u8fblen, u8cblen, doesexist; |
| 3213 | char *u8c, *u8fs; | 3214 | char *u8c, *u8fs; |
| 3214 | long unicodep; | 3215 | long unicodep; |
| @@ -3391,8 +3392,13 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { | |||
| 3391 | 3392 | ||
| 3392 | /* Search the font cache. */ | 3393 | /* Search the font cache. */ |
| 3393 | for(i = 0; i < frclen; i++) { | 3394 | for(i = 0; i < frclen; i++) { |
| 3394 | if(XftCharExists(xw.dpy, frc[i].font, unicodep) | 3395 | charexists = XftCharExists(xw.dpy, frc[i].font, unicodep); |
| 3395 | && frc[i].flags == frcflags) { | 3396 | /* Everything correct. */ |
| 3397 | if(charexists && frc[i].flags == frcflags) | ||
| 3398 | break; | ||
| 3399 | /* We got a default font for a not found glyph. */ | ||
| 3400 | if(!charexists && frc[i].flags == frcflags \ | ||
| 3401 | && unicodep == unicodep) { | ||
| 3396 | break; | 3402 | break; |
| 3397 | } | 3403 | } |
| 3398 | } | 3404 | } |
| @@ -3421,10 +3427,11 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { | |||
| 3421 | 3427 | ||
| 3422 | FcConfigSubstitute(0, fcpattern, | 3428 | FcConfigSubstitute(0, fcpattern, |
| 3423 | FcMatchPattern); | 3429 | FcMatchPattern); |
| 3430 | FcPatternPrint(fcpattern); | ||
| 3424 | FcDefaultSubstitute(fcpattern); | 3431 | FcDefaultSubstitute(fcpattern); |
| 3425 | 3432 | ||
| 3426 | fontpattern = FcFontSetMatch(0, fcsets, | 3433 | fontpattern = FcFontSetMatch(0, fcsets, 1, |
| 3427 | FcTrue, fcpattern, &fcres); | 3434 | fcpattern, &fcres); |
| 3428 | 3435 | ||
| 3429 | /* | 3436 | /* |
| 3430 | * Overwrite or create the new cache entry. | 3437 | * Overwrite or create the new cache entry. |
| @@ -3432,11 +3439,13 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { | |||
| 3432 | if(frclen >= LEN(frc)) { | 3439 | if(frclen >= LEN(frc)) { |
| 3433 | frclen = LEN(frc) - 1; | 3440 | frclen = LEN(frc) - 1; |
| 3434 | XftFontClose(xw.dpy, frc[frclen].font); | 3441 | XftFontClose(xw.dpy, frc[frclen].font); |
| 3442 | frc[frclen].unicodep = 0; | ||
| 3435 | } | 3443 | } |
| 3436 | 3444 | ||
| 3437 | frc[frclen].font = XftFontOpenPattern(xw.dpy, | 3445 | frc[frclen].font = XftFontOpenPattern(xw.dpy, |
| 3438 | fontpattern); | 3446 | fontpattern); |
| 3439 | frc[frclen].flags = frcflags; | 3447 | frc[frclen].flags = frcflags; |
| 3448 | frc[frclen].unicodep = unicodep; | ||
| 3440 | 3449 | ||
| 3441 | i = frclen; | 3450 | i = frclen; |
| 3442 | frclen++; | 3451 | frclen++; |
