Lazy fontset loading.
Thanks Johannes Hofmann <Johannes.Hofmann@gmx.de>!
This commit is contained in:
parent
678eff6e18
commit
62502a88e9
1 changed files with 15 additions and 6 deletions
21
st.c
21
st.c
|
@ -363,6 +363,7 @@ static void xloadcols(void);
|
||||||
static int xsetcolorname(int, const char *);
|
static int xsetcolorname(int, const char *);
|
||||||
static int xloadfont(Font *, FcPattern *);
|
static int xloadfont(Font *, FcPattern *);
|
||||||
static void xloadfonts(char *, int);
|
static void xloadfonts(char *, int);
|
||||||
|
static int xloadfontset(Font *);
|
||||||
static void xsettitle(char *);
|
static void xsettitle(char *);
|
||||||
static void xresettitle(void);
|
static void xresettitle(void);
|
||||||
static void xseturgency(int);
|
static void xseturgency(int);
|
||||||
|
@ -2643,16 +2644,12 @@ xloadfont(Font *f, FcPattern *pattern) {
|
||||||
if(!match)
|
if(!match)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if(!(f->set = FcFontSort(0, match, FcTrue, 0, &result))) {
|
|
||||||
FcPatternDestroy(match);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!(f->match = XftFontOpenPattern(xw.dpy, match))) {
|
if(!(f->match = XftFontOpenPattern(xw.dpy, match))) {
|
||||||
FcPatternDestroy(match);
|
FcPatternDestroy(match);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f->set = NULL;
|
||||||
f->pattern = FcPatternDuplicate(pattern);
|
f->pattern = FcPatternDuplicate(pattern);
|
||||||
|
|
||||||
f->ascent = f->match->ascent;
|
f->ascent = f->match->ascent;
|
||||||
|
@ -2727,6 +2724,15 @@ xloadfonts(char *fontstr, int fontsize) {
|
||||||
FcPatternDestroy(pattern);
|
FcPatternDestroy(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
xloadfontset(Font *f) {
|
||||||
|
FcResult result;
|
||||||
|
|
||||||
|
if(!(f->set = FcFontSort(0, f->pattern, FcTrue, 0, &result)))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
xunloadfonts(void) {
|
xunloadfonts(void) {
|
||||||
int i, ip;
|
int i, ip;
|
||||||
|
@ -2987,7 +2993,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
|
||||||
r.width = width;
|
r.width = width;
|
||||||
XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1);
|
XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1);
|
||||||
|
|
||||||
fcsets[0] = font->set;
|
|
||||||
for(xp = winx; bytelen > 0;) {
|
for(xp = winx; bytelen > 0;) {
|
||||||
/*
|
/*
|
||||||
* Search for the range in the to be printed string of glyphs
|
* 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. */
|
/* Nothing was found. */
|
||||||
if(i >= frclen) {
|
if(i >= frclen) {
|
||||||
|
if(!font->set)
|
||||||
|
xloadfontset(font);
|
||||||
|
fcsets[0] = font->set;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Nothing was found in the cache. Now use
|
* Nothing was found in the cache. Now use
|
||||||
* some dozen of Fontconfig calls to get the
|
* some dozen of Fontconfig calls to get the
|
||||||
|
|
Loading…
Reference in a new issue