Lazy fontset loading.
Thanks Johannes Hofmann <Johannes.Hofmann@gmx.de>!
This commit is contained in:
		
							parent
							
								
									678eff6e18
								
							
						
					
					
						commit
						62502a88e9
					
				
							
								
								
									
										21
									
								
								st.c
								
								
								
								
							
							
						
						
									
										21
									
								
								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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue