Changeset - r23353:b9572b727040
[Not reviewed]
master
0 2 0
PeterN - 5 years ago 2019-02-23 16:07:25
peter@fuzzle.org
Fix #7003: Freetype fonts were scaled by both GUI and Font zoom levels. (#7267)
2 files changed with 26 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/fontcache.cpp
Show inline comments
 
@@ -184,12 +184,12 @@ uint SpriteFontCache::GetGlyphWidth(Glyp
 
{
 
	SpriteID sprite = this->GetUnicodeGlyph(key);
 
	if (sprite == 0) sprite = this->GetUnicodeGlyph('?');
 
	return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleGUITrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
 
	return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
 
}
 

	
 
int SpriteFontCache::GetHeight() const
 
{
 
	return this->height * (1 << (ZOOM_LVL_OUT_4X - _font_zoom));
 
	return ScaleFontTrad(this->height);
 
}
 

	
 
bool SpriteFontCache::GetDrawGlyphShadow()
 
@@ -282,21 +282,19 @@ void FreeTypeFontCache::SetFontSize(Font
 
{
 
	if (pixels == 0) {
 
		/* Try to determine a good height based on the minimal height recommended by the font. */
 
		int scaled_height = ScaleGUITrad(_default_font_height[this->fs]);
 
		int scaled_height = ScaleFontTrad(_default_font_height[this->fs]);
 
		pixels = scaled_height;
 

	
 
		TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head);
 
		if (head != NULL) {
 
			/* Font height is minimum height plus the difference between the default
 
			 * height for this font size and the small size. */
 
			int diff = scaled_height - ScaleGUITrad(_default_font_height[FS_SMALL]);
 
			int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]);
 
			pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE);
 
		}
 
	} else {
 
		pixels = ScaleFontTrad(pixels);
 
	}
 

	
 
	/* Apply user-specified font zoom. */
 
	pixels *= (1 << (ZOOM_LVL_OUT_4X - _font_zoom));
 

	
 
	this->used_size = pixels;
 

	
 
	FT_Error err = FT_Set_Pixel_Sizes(this->face, 0, pixels);
src/zoom_func.h
Show inline comments
 
@@ -84,4 +84,24 @@ static inline int ScaleGUITrad(int value
 
	return UnScaleGUI(value * ZOOM_LVL_BASE);
 
}
 

	
 
/**
 
 * Short-hand to apply font zoom level.
 
 * @param value Pixel amount at #ZOOM_LVL_BEGIN (full zoom in).
 
 * @return Pixel amount at #ZOOM_LVL_FONT (current interface size).
 
 */
 
static inline int UnScaleFont(int value)
 
{
 
	return UnScaleByZoom(value, ZOOM_LVL_FONT);
 
}
 

	
 
/**
 
 * Scale traditional pixel dimensions to Font zoom level.
 
 * @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size).
 
 * @return Pixel amount at #ZOOM_LVL_FONT (current interface size).
 
 */
 
static inline int ScaleFontTrad(int value)
 
{
 
	return UnScaleFont(value * ZOOM_LVL_BASE);
 
}
 

	
 
#endif /* ZOOM_FUNC_H */
0 comments (0 inline, 0 general)