# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 62502a88e94dd908fdd4418899afdd09a4de3bea
    parent 678eff6e1882a888deda5e4e429df42c39b604fe
    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:
    Mst.c | 21+++++++++++++++------

    1 file changed, 15 insertions(+), 6 deletions(-)
    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