Changeset - r21300:3d7233ce7814
[Not reviewed]
master
0 1 0
fonsinchen - 10 years ago 2014-03-03 21:34:36
fonsinchen@openttd.org
(svn r26389) -Fix [FS#5885]: Select a specific font size when freetype fails to select one automatically.
1 file changed with 22 insertions and 10 deletions:
0 comments (0 inline, 0 general)
src/fontcache.cpp
Show inline comments
 
@@ -274,23 +274,35 @@ FreeTypeFontCache::FreeTypeFontCache(Fon
 
	}
 

	
 
	FT_Error err = FT_Set_Pixel_Sizes(this->face, 0, pixels);
 
	if (err == FT_Err_Invalid_Pixel_Size) {
 
	if (err != FT_Err_Ok) {
 

	
 
		/* Find nearest size to that requested */
 
		FT_Bitmap_Size *bs = this->face->available_sizes;
 
		int i = this->face->num_fixed_sizes;
 
		int n = bs->height;
 
		for (; --i; bs++) {
 
			if (abs(pixels - bs->height) < abs(pixels - n)) n = bs->height;
 
		if (i > 0) { // In pathetic cases one might get no fixed sizes at all.
 
			int n = bs->height;
 
			FT_Int chosen = 0;
 
			for (; --i; bs++) {
 
				if (abs(pixels - bs->height) >= abs(pixels - n)) continue;
 
				n = bs->height;
 
				chosen = this->face->num_fixed_sizes - i;
 
			}
 

	
 
			/* Don't use FT_Set_Pixel_Sizes here - it might give us another
 
			 * error, even though the size is available (FS#5885). */
 
			err = FT_Select_Size(this->face, chosen);
 
		}
 

	
 
		FT_Set_Pixel_Sizes(this->face, 0, n);
 
	}
 

	
 
	this->units_per_em = this->face->units_per_EM;
 
	this->ascender     = this->face->size->metrics.ascender >> 6;
 
	this->descender    = this->face->size->metrics.descender >> 6;
 
	this->height       = this->ascender - this->descender;
 
	if (err == FT_Err_Ok) {
 
		this->units_per_em = this->face->units_per_EM;
 
		this->ascender     = this->face->size->metrics.ascender >> 6;
 
		this->descender    = this->face->size->metrics.descender >> 6;
 
		this->height       = this->ascender - this->descender;
 
	} else {
 
		/* Both FT_Set_Pixel_Sizes and FT_Select_Size failed. */
 
		DEBUG(freetype, 0, "Font size selection failed. Using FontCache defaults.");
 
	}
 
}
 

	
 
/**
0 comments (0 inline, 0 general)