Lazy fontset loading. - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 62502a88e94dd908fdd4418899afdd09a4de3bea
 (DIR) parent 678eff6e1882a888deda5e4e429df42c39b604fe
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sat, 11 May 2013 08:54:26 +0200
       
       Lazy fontset loading.
       
       Thanks Johannes Hofmann <Johannes.Hofmann@gmx.de>!
       
       Diffstat:
         M st.c                                |      21 +++++++++++++++------
       
       1 file changed, 15 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -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