# HG changeset patch # User Michael Lutz # Date 2023-12-16 17:28:49 # Node ID 29a6b80a530c26b8aae6803f7fffb3b49ee61726 # Parent 68a15f36b2524f5b2f8b219b4afbeced5a82e6dd Add: GUI options to select sprite font and AA mode for all fonts. diff --git a/src/fontcache.cpp b/src/fontcache.cpp --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -96,7 +96,7 @@ bool GetFontAAState(FontSize size, bool /* AA is only supported for 32 bpp */ if (check_blitter && BlitterFactory::GetCurrentBlitter()->GetScreenDepth() != 32) return false; - return GetFontCacheSubSetting(size)->aa; + return _fcsettings.global_aa || GetFontCacheSubSetting(size)->aa; } void SetFont(FontSize fontsize, const std::string &font, uint size, bool aa) @@ -204,7 +204,7 @@ void InitFontCache(bool monospace) FontCache *fc = FontCache::Get(fs); if (fc->HasParent()) delete fc; - if (GetFontCacheSubSetting(fs)->font.empty()) { + if (!_fcsettings.prefer_sprite && GetFontCacheSubSetting(fs)->font.empty()) { TryLoadDefaultTrueTypeFont(fs); } else { #ifdef WITH_FREETYPE diff --git a/src/fontcache.h b/src/fontcache.h --- a/src/fontcache.h +++ b/src/fontcache.h @@ -218,6 +218,8 @@ struct FontCacheSettings { FontCacheSubSetting medium; ///< The normal font size. FontCacheSubSetting large; ///< The largest font; mostly used for newspapers. FontCacheSubSetting mono; ///< The mono space font used for license/readme viewers. + bool prefer_sprite; ///< Whether to prefer the built-in sprite font over resizable fonts. + bool global_aa; ///< Whether to anti alias all font sizes. }; extern FontCacheSettings _fcsettings; diff --git a/src/lang/english.txt b/src/lang/english.txt --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1044,6 +1044,11 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Scale bevels STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Check this box to scale bevels by interface size +STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Use traditional sprite font +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Check this box if you prefer to use the tradition fixed-size sprite font. +STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Anti-alias fonts +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Check this box to anti-alias resizable fonts. + STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x STR_GAME_OPTIONS_GUI_SCALE_3X :3x diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -50,6 +50,10 @@ #include "safeguards.h" +#if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA) +# define HAS_TRUETYPE_FONT +#endif + static const StringID _autosave_dropdown[] = { STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF, STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES, @@ -559,6 +563,30 @@ struct GameOptionsWindow : Window { break; } +#ifdef HAS_TRUETYPE_FONT + case WID_GO_GUI_FONT_SPRITE: + _fcsettings.prefer_sprite = !_fcsettings.prefer_sprite; + + this->SetWidgetLoweredState(WID_GO_GUI_FONT_SPRITE, _fcsettings.prefer_sprite); + this->SetWidgetDisabledState(WID_GO_GUI_FONT_AA, _fcsettings.prefer_sprite); + this->SetDirty(); + + InitFontCache(false); + InitFontCache(true); + SetupWidgetDimensions(); + ReInitAllWindows(true); + break; + + case WID_GO_GUI_FONT_AA: + _fcsettings.global_aa = !_fcsettings.global_aa; + + this->SetWidgetLoweredState(WID_GO_GUI_FONT_AA, _fcsettings.global_aa); + this->SetDirty(); + + ClearFontCache(); + break; +#endif /* HAS_TRUETYPE_FONT */ + case WID_GO_GUI_SCALE: if (ClickSliderWidget(this->GetWidget(widget)->GetCurrentRect(), pt, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE, this->gui_scale)) { if (!_ctrl_pressed) this->gui_scale = ((this->gui_scale + 12) / 25) * 25; @@ -750,6 +778,11 @@ struct GameOptionsWindow : Window { this->SetWidgetLoweredState(WID_GO_GUI_SCALE_AUTO, _gui_scale_cfg == -1); this->SetWidgetLoweredState(WID_GO_GUI_SCALE_BEVEL_BUTTON, _settings_client.gui.scale_bevels); +#ifdef HAS_TRUETYPE_FONT + this->SetWidgetLoweredState(WID_GO_GUI_FONT_SPRITE, _fcsettings.prefer_sprite); + this->SetWidgetLoweredState(WID_GO_GUI_FONT_AA, _fcsettings.global_aa); + this->SetWidgetDisabledState(WID_GO_GUI_FONT_AA, _fcsettings.prefer_sprite); +#endif /* HAS_TRUETYPE_FONT */ this->SetWidgetDisabledState(WID_GO_BASE_GRF_DROPDOWN, _game_mode != GM_MENU); this->SetWidgetDisabledState(WID_GO_BASE_SFX_DROPDOWN, _game_mode != GM_MENU); @@ -823,6 +856,16 @@ static const NWidgetPart _nested_game_op NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_SCALE_BEVELS, STR_NULL), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_SCALE_BEVEL_BUTTON), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP), EndContainer(), +#ifdef HAS_TRUETYPE_FONT + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_FONT_SPRITE, STR_NULL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_SPRITE), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_GUI_FONT_AA, STR_NULL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_GO_GUI_FONT_AA), SetMinimalSize(21, 9), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP), + EndContainer(), +#endif /* HAS_TRUETYPE_FONT */ EndContainer(), EndContainer(), diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -258,6 +258,18 @@ name = ""mono_aa"" var = _fcsettings.mono.aa def = false +[SDTG_BOOL] +ifdef = HAS_TRUETYPE_FONT +name = ""global_aa"" +var = _fcsettings.global_aa +def = true + +[SDTG_BOOL] +ifdef = HAS_TRUETYPE_FONT +name = ""prefer_sprite_font"" +var = _fcsettings.prefer_sprite +def = false + [SDTG_VAR] name = ""sprite_cache_size_px"" type = SLE_UINT diff --git a/src/widgets/settings_widget.h b/src/widgets/settings_widget.h --- a/src/widgets/settings_widget.h +++ b/src/widgets/settings_widget.h @@ -25,6 +25,8 @@ enum GameOptionsWidgets : WidgetID { WID_GO_GUI_SCALE, ///< GUI Scale slider. WID_GO_GUI_SCALE_AUTO, ///< Autodetect GUI scale button. WID_GO_GUI_SCALE_BEVEL_BUTTON, ///< Toggle for chunky bevels. + WID_GO_GUI_FONT_SPRITE, ///< Toggle whether to prefer the sprite font over TTF fonts. + WID_GO_GUI_FONT_AA, ///< Toggle whether to anti-alias fonts. WID_GO_BASE_GRF_DROPDOWN, ///< Use to select a base GRF. WID_GO_BASE_GRF_PARAMETERS, ///< Base GRF parameters. WID_GO_BASE_GRF_OPEN_URL, ///< Open base GRF URL.