| tLazy fontset loading. - st - [fork] customized build of st, the simple terminal | |
| git clone git://src.adamsgaard.dk/st | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 62502a88e94dd908fdd4418899afdd09a4de3bea | |
| parent 678eff6e1882a888deda5e4e429df42c39b604fe | |
| Author: Christoph Lohmann <[email protected]> | |
| Date: Sat, 11 May 2013 08:54:26 +0200 | |
| Lazy fontset loading. | |
| Thanks Johannes Hofmann <[email protected]>! | |
| Diffstat: | |
| M st.c | 21 +++++++++++++++------ | |
| 1 file changed, 15 insertions(+), 6 deletions(-) | |
| --- | |
| diff --git a/st.c b/st.c | |
| t@@ -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); | |
| t@@ -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; | |
| t@@ -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; | |
| t@@ -2987,7 +2993,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, i… | |
| 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 | |
| t@@ -3045,6 +3050,10 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, … | |
| /* 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 |