Fix #12735: Default fonts should use default font size as-is. (#12814)

Minimum readable font size should only apply to fallback and configured fonts.

(cherry picked from commit 209b0320d5)
pull/741/head
Peter Nelson 3 months ago committed by Jonathan G Rennison
parent f7de298042
commit d2d8da8d5e

@ -128,6 +128,26 @@ extern void LoadWin32Font(FontSize fs);
extern void LoadCoreTextFont(FontSize fs); extern void LoadCoreTextFont(FontSize fs);
#endif #endif
/**
* Test if a font setting uses the default font.
* @return true iff the font is not configured and no fallback font data is present.
*/
static bool IsDefaultFont(const FontCacheSubSetting &setting)
{
return setting.font.empty() && setting.os_handle == nullptr;
}
/**
* Get the scalable font size to use for a FontSize.
* @param fs FontSize to get the scalable font size for.
* @return Scalable font size to use.
*/
uint GetFontCacheFontSize(FontSize fs)
{
const FontCacheSubSetting &setting = *GetFontCacheSubSetting(fs);
return IsDefaultFont(setting) ? FontCache::GetDefaultFontHeight(fs) : setting.size;
}
#if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) #if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA)
/** /**
* Get name of default font file for a given font size. * Get name of default font file for a given font size.

@ -228,6 +228,7 @@ inline FontCacheSubSetting *GetFontCacheSubSetting(FontSize fs)
} }
} }
uint GetFontCacheFontSize(FontSize fs);
std::string GetFontCacheFontName(FontSize fs); std::string GetFontCacheFontName(FontSize fs);
void InitFontCache(bool monospace); void InitFontCache(bool monospace);
void UninitFontCache(); void UninitFontCache();

@ -195,7 +195,7 @@ void LoadFreeTypeFont(FontSize fs)
if (error != FT_Err_Ok) error = GetFontByFaceName(font_name, &face); if (error != FT_Err_Ok) error = GetFontByFaceName(font_name, &face);
if (error == FT_Err_Ok) { if (error == FT_Err_Ok) {
error = LoadFont(fs, face, font_name, settings->size); error = LoadFont(fs, face, font_name, GetFontCacheFontSize(fs));
if (error != FT_Err_Ok) { if (error != FT_Err_Ok) {
ShowInfo("Unable to use '{}' for {} font, FreeType reported error 0x{:X}, using sprite font instead", font_name, FontSizeToName(fs), error); ShowInfo("Unable to use '{}' for {} font, FreeType reported error 0x{:X}, using sprite font instead", font_name, FontSizeToName(fs), error);
} }

@ -372,5 +372,5 @@ void LoadCoreTextFont(FontSize fs)
return; return;
} }
new CoreTextFontCache(fs, std::move(font_ref), settings->size); new CoreTextFontCache(fs, std::move(font_ref), GetFontCacheFontSize(fs));
} }

@ -379,5 +379,5 @@ void LoadWin32Font(FontSize fs)
convert_to_fs(font_name, logfont.lfFaceName, lengthof(logfont.lfFaceName)); convert_to_fs(font_name, logfont.lfFaceName, lengthof(logfont.lfFaceName));
} }
LoadWin32Font(fs, logfont, settings->size, font_name); LoadWin32Font(fs, logfont, GetFontCacheFontSize(fs), font_name);
} }

Loading…
Cancel
Save