Add: GUI options to select sprite font and AA mode for all fonts.
This commit is contained in:
		| @@ -96,7 +96,7 @@ bool GetFontAAState(FontSize size, bool check_blitter) | ||||
| 	/* 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 | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -1044,6 +1044,11 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP                         :{BLACK}Check th | ||||
| 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 | ||||
|   | ||||
| @@ -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<NWidgetBase>(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_options_widgets[] = { | ||||
| 							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(), | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Michael Lutz
					Michael Lutz