|
|
@ -363,6 +363,7 @@ static void xloadcols(void); |
|
|
|
static int xsetcolorname(int, const char *); |
|
|
|
static int xloadfont(Font *, FcPattern *); |
|
|
|
static void xloadfonts(char *, int); |
|
|
|
static int xloadfontset(Font *); |
|
|
|
static void xsettitle(char *); |
|
|
|
static void xresettitle(void); |
|
|
|
static void xseturgency(int); |
|
|
@ -2643,16 +2644,12 @@ xloadfont(Font *f, FcPattern *pattern) { |
|
|
|
if(!match) |
|
|
|
return 1; |
|
|
|
|
|
|
|
if(!(f->set = FcFontSort(0, match, FcTrue, 0, &result))) { |
|
|
|
FcPatternDestroy(match); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
if(!(f->match = XftFontOpenPattern(xw.dpy, match))) { |
|
|
|
FcPatternDestroy(match); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
f->set = NULL; |
|
|
|
f->pattern = FcPatternDuplicate(pattern); |
|
|
|
|
|
|
|
f->ascent = f->match->ascent; |
|
|
@ -2727,6 +2724,15 @@ xloadfonts(char *fontstr, int fontsize) { |
|
|
|
FcPatternDestroy(pattern); |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
xloadfontset(Font *f) { |
|
|
|
FcResult result; |
|
|
|
|
|
|
|
if(!(f->set = FcFontSort(0, f->pattern, FcTrue, 0, &result))) |
|
|
|
return 1; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
void |
|
|
|
xunloadfonts(void) { |
|
|
|
int i, ip; |
|
|
@ -2987,7 +2993,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
r.width = width; |
|
|
|
XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1); |
|
|
|
|
|
|
|
fcsets[0] = font->set; |
|
|
|
for(xp = winx; bytelen > 0;) { |
|
|
|
/* |
|
|
|
* Search for the range in the to be printed string of glyphs |
|
|
@ -3045,6 +3050,10 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) { |
|
|
|
|
|
|
|
/* Nothing was found. */ |
|
|
|
if(i >= frclen) { |
|
|
|
if(!font->set) |
|
|
|
xloadfontset(font); |
|
|
|
fcsets[0] = font->set; |
|
|
|
|
|
|
|
/* |
|
|
|
* Nothing was found in the cache. Now use |
|
|
|
* some dozen of Fontconfig calls to get the |
|
|
|