diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e448e5582..37f833ed28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2786,7 +2786,7 @@ set(NativeAssets assets/shaders assets/themes assets/vfpu - assets/Roboto-Condensed.ttf + assets/Roboto_Condensed-Regular.ttf assets/7z.png assets/compat.ini assets/infra-dns.json diff --git a/Common/Render/Text/Font.h b/Common/Render/Text/Font.h index bcaf126eb9..a53ed84b96 100644 --- a/Common/Render/Text/Font.h +++ b/Common/Render/Text/Font.h @@ -4,31 +4,36 @@ #include #include "Common/Common.h" +#include "Common/CommonTypes.h" #include "Common/Render/TextureAtlas.h" #include "Common/Data/Hash/Hash.h" -enum class FontStyleFlags { +enum class FontStyleFlags : u8 { Default = 0, Bold = 1, + Light = 2, Italic = 16, }; ENUM_CLASS_BITOPS(FontStyleFlags); +enum class FontFamily : u8 { + SansSerif = 1, + Fixed = 2, +}; + struct FontStyle { FontStyle() {} - FontStyle(FontID atlasFnt, std::string_view name, int size, FontStyleFlags _flags = FontStyleFlags::Default) : atlasFont(atlasFnt), fontName(name), sizePts(size), flags(_flags) {} + constexpr FontStyle(FontFamily _family, int size, FontStyleFlags _flags) : family(_family), sizePts(size), flags(_flags) {} - u32 Hash() const { - u32 hash = fontName.empty() ? 0 : hash::Adler32(fontName); - hash ^= sizePts; - hash ^= (int)flags << 10; - return hash; - } - - FontID atlasFont{nullptr}; - - // For native fonts: - std::string fontName; - int sizePts = 0; + u16 sizePts = 0; + FontFamily family = FontFamily::SansSerif; FontStyleFlags flags = FontStyleFlags::Default; }; + +inline constexpr bool operator<(const FontStyle &a, const FontStyle &b) { + if (a.family != b.family) + return a.family < b.family; + if (a.sizePts != b.sizePts) + return a.sizePts < b.sizePts; + return a.flags < b.flags; +} diff --git a/Common/Render/Text/draw_text.cpp b/Common/Render/Text/draw_text.cpp index 55657e04b9..4e41069d17 100644 --- a/Common/Render/Text/draw_text.cpp +++ b/Common/Render/Text/draw_text.cpp @@ -1,5 +1,6 @@ #include "ppsspp_config.h" +#include #include "Common/System/Display.h" #include "Common/GPU/thin3d.h" #include "Common/Data/Hash/Hash.h" @@ -13,6 +14,7 @@ #include "Common/Render/Text/draw_text_qt.h" #include "Common/Render/Text/draw_text_android.h" #include "Common/Render/Text/draw_text_sdl.h" +#include "Common/StringUtils.h" TextDrawer::TextDrawer(Draw::DrawContext *draw) : draw_(draw) { // These probably shouldn't be state. @@ -47,7 +49,7 @@ void TextDrawer::DrawString(DrawBuffer &target, std::string_view str, float x, f return; } - CacheKey key{ std::string(str), fontHash_ }; + const CacheKeyType key{ std::string(str), fontStyle_ }; target.Flush(true); TextStringEntry *entry; @@ -124,7 +126,7 @@ void TextDrawer::MeasureString(std::string_view str, float *w, float *h) { return; } - CacheKey key{ std::string(str), fontHash_ }; + const CacheKeyType key{std::string(str), fontStyle_}; TextMeasureEntry *entry; auto iter = sizeCache_.find(key); @@ -204,7 +206,7 @@ void TextDrawer::ClearCache() { } cache_.clear(); sizeCache_.clear(); - fontHash_ = 0; + fontStyle_ = {}; } void TextDrawer::OncePerFrame() { @@ -271,3 +273,81 @@ TextDrawer *TextDrawer::Create(Draw::DrawContext *draw) { } return drawer; } + +struct FontDesc { + FontFamily family; + FontStyleFlags flags; + std::string_view fontName; + std::string_view filename; +}; + +// Append ".ttf" to get the actual filenames. +static const FontDesc g_fontDescs[] = { + {FontFamily::SansSerif, FontStyleFlags::Default, "Roboto Condensed", "Roboto_Condensed-Regular"}, + {FontFamily::SansSerif, FontStyleFlags::Bold, "Roboto Condensed", "Roboto_Condensed-Bold"}, + {FontFamily::SansSerif, FontStyleFlags::Italic, "Roboto Condensed", "Roboto_Condensed-Italic"}, + {FontFamily::SansSerif, FontStyleFlags::Light, "Roboto Condensed", "Roboto_Condensed-Light"}, + {FontFamily::Fixed, FontStyleFlags::Default, "Inconsolata", "Inconsolata-Regular"}, +}; + +std::map g_fontOverrides; + +void SetFontNameOverride(FontFamily family, std::string_view overrideFont) { + g_fontOverrides[family] = std::string(overrideFont); +} + +void GetFilenamesForFontStyle(const FontStyle &font, std::vector *out, bool all) { + for (const auto &desc : g_fontDescs) { + bool match = all; + if (desc.flags == font.flags && desc.family == font.family) { + match = true; + } + if (match) { + out->push_back(join(desc.filename, ".ttf")); + } + } + + if (all) { + // uniquify idiom + std::sort(out->begin(), out->end()); + out->erase(std::unique(out->begin(), out->end()), out->end()); + return; + } + + if (!out->empty()) { + return; + } + + // If nothing matched, just return the first font of the requested family. + for (const auto &desc : g_fontDescs) { + if (desc.family == font.family) { + out->push_back(join(desc.filename, ".ttf")); + } + } +} + +std::string GetFontNameForFontStyle(const FontStyle &font, FontStyleFlags *outFlags) { + auto override = g_fontOverrides.find(font.family); + if (override != g_fontOverrides.end()) { + *outFlags = font.flags; + return override->second; + } + + for (const auto &desc : g_fontDescs) { + if (desc.flags == font.flags && desc.family == font.family) { + *outFlags = font.flags; + return std::string(desc.fontName); + } + } + // If nothing matched, just return the first font of the requested family. + for (const auto &desc : g_fontDescs) { + if (desc.family == font.family) { + // Return the flags of the font we found. + // TODO: Some platforms can actually synthesize traits (bold, italic) if missing. + *outFlags = desc.flags; + return std::string(desc.fontName); + } + } + + return ""; +} diff --git a/Common/Render/Text/draw_text.h b/Common/Render/Text/draw_text.h index 4d8e5b3607..51982832da 100644 --- a/Common/Render/Text/draw_text.h +++ b/Common/Render/Text/draw_text.h @@ -46,8 +46,7 @@ public: virtual ~TextDrawer() = default; virtual bool IsReady() const { return true; } - virtual uint32_t SetOrCreateFont(const FontStyle &style) = 0; - virtual void SetFont(uint32_t fontHandle) = 0; // Shortcut once you've set the font once. + virtual void SetOrCreateFont(const FontStyle &style) = 0; void SetFontScale(float xscale, float yscale); void MeasureString(std::string_view str, float *w, float *h); @@ -114,17 +113,7 @@ protected: return (a << 24) | (r << 16) | (g << 8) | b; } - struct CacheKey { - bool operator < (const CacheKey &other) const { - if (fontHash < other.fontHash) - return true; - if (fontHash > other.fontHash) - return false; - return text < other.text; - } - std::string text; - uint32_t fontHash; - }; + typedef std::pair CacheKeyType; Draw::DrawContext *draw_; @@ -133,11 +122,10 @@ protected: float fontScaleY_ = 1.0f; float dpiScale_ = 1.0f; bool ignoreGlobalDpi_ = false; + FontStyle fontStyle_{}; - uint32_t fontHash_ = 0; - - std::map> cache_; - std::map> sizeCache_; + std::map> cache_; + std::map> sizeCache_; }; class TextDrawerWordWrapper : public WordWrapper { @@ -150,3 +138,12 @@ protected: TextDrawer *drawer_; }; + +// The backends can use this to query the filenames of the fonts. +// Some backends want to just load all the fonts, just pass all. +// Note that the ttf file extension is included in the output. +void GetFilenamesForFontStyle(const FontStyle &font, std::vector *out, bool all); +std::string GetFontNameForFontStyle(const FontStyle &font, FontStyleFlags *outFlags); + +// Some languages use an override font, set via ini file. +void SetFontNameOverride(FontFamily family, std::string_view overrideFont); diff --git a/Common/Render/Text/draw_text_win.cpp b/Common/Render/Text/draw_text_win.cpp index 81d7edd4f5..78d8bae080 100644 --- a/Common/Render/Text/draw_text_win.cpp +++ b/Common/Render/Text/draw_text_win.cpp @@ -22,11 +22,25 @@ enum { class TextDrawerFontContext { public: - ~TextDrawerFontContext() { - Destroy(); - } + explicit TextDrawerFontContext(const FontStyle &_style, float _dpiScale) : hFont(0), style(_style), dpiScale(_dpiScale) { + FontStyleFlags styleFlags{}; + std::string fontName = GetFontNameForFontStyle(style, &styleFlags); + if (fontName.empty()) { + // Shouldn't happen. + fontName = "Tahoma"; + } + + int weight = FW_NORMAL; + if (styleFlags & FontStyleFlags::Bold) { + weight = FW_BOLD; + } + if (styleFlags & FontStyleFlags::Light) { + weight = FW_LIGHT; + } + + bool italic = (styleFlags & FontStyleFlags::Italic); + int height = style.sizePts; - void Create() { if (hFont) { Destroy(); } @@ -35,18 +49,20 @@ public: hFont = CreateFont(nHeight, 0, 0, 0, weight, italic, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, - VARIABLE_PITCH, fname.c_str()); + VARIABLE_PITCH, ConvertUTF8ToWString(fontName).c_str()); } + + ~TextDrawerFontContext() { + Destroy(); + } + void Destroy() { DeleteObject(hFont); hFont = 0; } - HFONT hFont; - std::wstring fname; - int height; - int weight; - bool italic = false; + HFONT hFont = 0; + FontStyle style; float dpiScale; }; @@ -60,8 +76,18 @@ TextDrawerWin32::TextDrawerWin32(Draw::DrawContext *draw) : TextDrawer(draw), ct ctx_ = new TextDrawerContext(); ctx_->hDC = CreateCompatibleDC(NULL); - BITMAPINFO bmi; - ZeroMemory(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER)); + // Load the font files (pass the all flags so we get all filenames); + std::vector fonts; + GetFilenamesForFontStyle(FontStyle(FontFamily::SansSerif, 16, FontStyleFlags::Default), &fonts, true); + for (const auto &iter : fonts) { + std::string fn = "assets/" + iter; + int numFontsAdded = AddFontResourceEx(ConvertUTF8ToWString(fn).c_str(), FR_PRIVATE, NULL); + if (numFontsAdded == 0) { + ERROR_LOG(Log::G3D, "Failed to add font resource from %s", fn.c_str()); + } + } + + BITMAPINFO bmi{}; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = MAX_TEXT_WIDTH; bmi.bmiHeader.biHeight = -MAX_TEXT_HEIGHT; @@ -80,53 +106,37 @@ TextDrawerWin32::~TextDrawerWin32() { ClearCache(); ClearFonts(); + // Unload the fonts. + std::vector fonts; + GetFilenamesForFontStyle(FontStyle(FontFamily::SansSerif, 16, FontStyleFlags::Default), &fonts, true); + for (const auto &iter : fonts) { + std::string fn = "assets/" + iter + ".ttf"; + RemoveFontResourceEx(ConvertUTF8ToWString(fn).c_str(), FR_PRIVATE, NULL); + } + DeleteObject(ctx_->hbmBitmap); DeleteDC(ctx_->hDC); delete ctx_; } -uint32_t TextDrawerWin32::SetOrCreateFont(const FontStyle &style) { - const uint32_t fontHash = style.Hash(); - - auto iter = fontMap_.find(fontHash); +void TextDrawerWin32::SetOrCreateFont(const FontStyle &style) { + auto iter = fontMap_.find(style); if (iter != fontMap_.end()) { - fontHash_ = fontHash; - return fontHash; + fontStyle_ = style; + return; } - std::wstring fname; - if (!style.fontName.empty()) - fname = ConvertUTF8ToWString(style.fontName); - else - fname = L"Tahoma"; - - TextDrawerFontContext *font = new TextDrawerFontContext(); - font->weight = FW_LIGHT; - if (style.flags & FontStyleFlags::Bold) { - font->weight = FW_BOLD; - } - font->italic = (style.flags & FontStyleFlags::Italic); - font->height = style.sizePts; - font->fname = fname; - font->dpiScale = dpiScale_; - font->Create(); - - fontMap_[fontHash] = std::unique_ptr(font); - fontHash_ = fontHash; - return fontHash; -} - -void TextDrawerWin32::SetFont(uint32_t fontHandle) { - auto iter = fontMap_.find(fontHandle); - if (iter != fontMap_.end()) { - fontHash_ = fontHandle; - } + fontMap_[style] = std::make_unique(style, dpiScale_); + fontStyle_ = style; } void TextDrawerWin32::MeasureStringInternal(std::string_view str, float *w, float *h) { - auto iter = fontMap_.find(fontHash_); + auto iter = fontMap_.find(fontStyle_); if (iter != fontMap_.end()) { SelectObject(ctx_->hDC, iter->second->hFont); + } else { + ERROR_LOG(Log::G3D, "Failed to measure string"); + return; } #if 0 && defined(_DEBUG) @@ -165,10 +175,11 @@ bool TextDrawerWin32::DrawStringBitmap(std::vector &bitmapData, TextStr } std::wstring wstr = ConvertUTF8ToWString(ReplaceAll(str, "\n", "\r\n")); - auto iter = fontMap_.find(fontHash_); + auto iter = fontMap_.find(fontStyle_); if (iter != fontMap_.end()) { SelectObject(ctx_->hDC, iter->second->hFont); } + // Set text properties SetTextColor(ctx_->hDC, 0xFFFFFF); SetBkColor(ctx_->hDC, 0); diff --git a/Common/Render/Text/draw_text_win.h b/Common/Render/Text/draw_text_win.h index d5c6d78927..3517aca572 100644 --- a/Common/Render/Text/draw_text_win.h +++ b/Common/Render/Text/draw_text_win.h @@ -16,8 +16,7 @@ public: TextDrawerWin32(Draw::DrawContext *draw); ~TextDrawerWin32(); - uint32_t SetOrCreateFont(const FontStyle &style) override; - void SetFont(uint32_t fontHandle) override; // Shortcut once you've set the font once. + void SetOrCreateFont(const FontStyle &style) override; bool DrawStringBitmap(std::vector &bitmapData, TextStringEntry &entry, Draw::DataFormat texFormat, std::string_view str, int align, bool fullColor) override; protected: @@ -26,7 +25,7 @@ protected: void ClearFonts() override; TextDrawerContext *ctx_; - std::map> fontMap_; + std::map> fontMap_; }; #endif diff --git a/Common/UI/Context.cpp b/Common/UI/Context.cpp index cb7f7957a5..5e310d7ab7 100644 --- a/Common/UI/Context.cpp +++ b/Common/UI/Context.cpp @@ -206,12 +206,17 @@ void UIContext::SetFontStyle(const FontStyle &fontStyle) { } } +static FontID AtlasFontFromStyle(const FontStyle &style) { + // For now, we only have one font in the atlas. + return FontID("UBUNTU24"); +} + void UIContext::MeasureText(const FontStyle &style, float scaleX, float scaleY, std::string_view str, float *x, float *y, int align) const { _dbg_assert_(str.data() != nullptr); if (!textDrawer_ || (align & FLAG_DYNAMIC_ASCII)) { float sizeFactor = (float)style.sizePts / 24.0f; Draw()->SetFontScale(scaleX * sizeFactor, scaleY * sizeFactor); - Draw()->MeasureText(style.atlasFont, str, x, y); + Draw()->MeasureText(AtlasFontFromStyle(style), str, x, y); } else { textDrawer_->SetOrCreateFont(style); textDrawer_->SetFontScale(scaleX, scaleY); @@ -225,7 +230,7 @@ void UIContext::MeasureTextRect(const FontStyle &style, float scaleX, float scal if (!textDrawer_ || (align & FLAG_DYNAMIC_ASCII)) { float sizeFactor = (float)style.sizePts / 24.0f; Draw()->SetFontScale(scaleX * sizeFactor, scaleY * sizeFactor); - Draw()->MeasureTextRect(style.atlasFont, str, bounds, x, y, align); + Draw()->MeasureTextRect(AtlasFontFromStyle(style), str, bounds, x, y, align); } else { textDrawer_->SetOrCreateFont(style); textDrawer_->SetFontScale(scaleX, scaleY); @@ -238,14 +243,14 @@ void UIContext::DrawText(std::string_view str, float x, float y, uint32_t color, _dbg_assert_(str.data() != nullptr); if (!textDrawer_ || (align & FLAG_DYNAMIC_ASCII)) { // Use the font texture if this font is in that texture instead. - bool useFontTexture = Draw()->GetFontAtlas()->getFont(fontStyle_->atlasFont) != nullptr; + bool useFontTexture = Draw()->GetFontAtlas()->getFont(AtlasFontFromStyle(*fontStyle_)) != nullptr; if (useFontTexture) { Flush(); BindFontTexture(); } float sizeFactor = (float)fontStyle_->sizePts / 24.0f; Draw()->SetFontScale(fontScaleX_ * sizeFactor, fontScaleY_ * sizeFactor); - Draw()->DrawText(fontStyle_->atlasFont, str, x, y, color, align); + Draw()->DrawText(AtlasFontFromStyle(*fontStyle_), str, x, y, color, align); if (useFontTexture) Flush(); } else { @@ -264,14 +269,14 @@ void UIContext::DrawTextShadow(std::string_view str, float x, float y, uint32_t void UIContext::DrawTextRect(std::string_view str, const Bounds &bounds, uint32_t color, int align) { if (!textDrawer_ || (align & FLAG_DYNAMIC_ASCII)) { // Use the font texture if this font is in that texture instead. - bool useFontTexture = Draw()->GetFontAtlas()->getFont(fontStyle_->atlasFont) != nullptr; + bool useFontTexture = Draw()->GetFontAtlas()->getFont(AtlasFontFromStyle(*fontStyle_)) != nullptr; if (useFontTexture) { Flush(); BindFontTexture(); } float sizeFactor = (float)fontStyle_->sizePts / 24.0f; Draw()->SetFontScale(fontScaleX_ * sizeFactor, fontScaleY_ * sizeFactor); - Draw()->DrawTextRect(fontStyle_->atlasFont, str, bounds.x, bounds.y, bounds.w, bounds.h, color, align); + Draw()->DrawTextRect(AtlasFontFromStyle(*fontStyle_), str, bounds.x, bounds.y, bounds.w, bounds.h, color, align); if (useFontTexture) Flush(); } else { diff --git a/Common/UI/View.h b/Common/UI/View.h index 69673dc343..d196a347d7 100644 --- a/Common/UI/View.h +++ b/Common/UI/View.h @@ -79,9 +79,11 @@ struct Style { // To use with an UI atlas. struct Theme { - FontStyle uiFont; + FontStyle uiFontTiny; FontStyle uiFontSmall; + FontStyle uiFont; FontStyle uiFontBig; + FontStyle uiFontCode; ImageID checkOn; ImageID checkOff; diff --git a/Core/Config.h b/Core/Config.h index 79474c59ec..3b14eef0c1 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -171,8 +171,6 @@ public: bool bIgnoreWindowsKey; bool bRestartRequired; - std::string sFont; - bool bPauseWhenMinimized; bool bPauseExitsEmulator; diff --git a/Core/Util/PPGeDraw.cpp b/Core/Util/PPGeDraw.cpp index 820b3719c7..5524f6503f 100644 --- a/Core/Util/PPGeDraw.cpp +++ b/Core/Util/PPGeDraw.cpp @@ -769,7 +769,7 @@ static bool HasTextDrawer() { if (textDrawer) { textDrawer->SetFontScale(1.0f, 1.0f); textDrawer->SetForcedDPIScale(1.0f); - textDrawer->SetOrCreateFont(FontStyle(FontID::invalid(), g_Config.sFont, 18, FontStyleFlags::Default)); + textDrawer->SetOrCreateFont(FontStyle(FontFamily::SansSerif, 18, FontStyleFlags::Default)); } textDrawerInited = true; return textDrawer != nullptr; diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index c713277031..3ccda5c85d 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -697,22 +697,10 @@ void NativeInit(int argc, const char *argv[], const char *savegame_dir, const ch } auto des = GetI18NCategory(I18NCat::DESKTOPUI); - // Note to translators: do not translate this/add this to PPSSPP-lang's files. - // It's intended to be custom for every user. - // Only add it to your own personal copies of PPSSPP. + #if PPSSPP_PLATFORM(UWP) // Roboto font is loaded in TextDrawerUWP. g_Config.sFont = des->T("Font", "Roboto"); -#elif defined(USING_WIN_UI) && !PPSSPP_PLATFORM(UWP) - // TODO: Could allow a setting to specify a font file to load? - // TODO: Make this a constant if we can sanely load the font on other systems? - AddFontResourceEx(L"assets/Roboto-Condensed.ttf", FR_PRIVATE, NULL); - // The font goes by two names, let's allow either one. - if (CheckFontIsUsable(L"Roboto Condensed")) { - g_Config.sFont = des->T("Font", "Roboto Condensed"); - } else { - g_Config.sFont = des->T("Font", "Roboto"); - } #elif defined(USING_QT_UI) size_t fontSize = 0; uint8_t *fontData = g_VFS.ReadFile("Roboto-Condensed.ttf", &fontSize); @@ -852,7 +840,8 @@ bool NativeInitGraphics(GraphicsContext *graphicsContext) { uiContext->Init(g_draw, texColorPipeline, colorPipeline, &ui_draw2d); if (uiContext->Text()) { - uiContext->Text()->SetOrCreateFont(FontStyle(FontID::invalid(), "Tahoma", 20, FontStyleFlags::Default)); + // This seems unnecessary. + // uiContext->Text()->SetOrCreateFont(FontStyle(FontID::invalid(), FontFamily::SansSerif, 20, FontStyleFlags::Default)); } g_screenManager->setUIContext(uiContext); diff --git a/UI/Theme.cpp b/UI/Theme.cpp index 1cfbecac1a..340e84ec2c 100644 --- a/UI/Theme.cpp +++ b/UI/Theme.cpp @@ -25,7 +25,8 @@ #include "Common/File/DirListing.h" #include "Common/Log/LogManager.h" #include "Common/File/VFS/VFS.h" - +#include "Common/Data/Text/I18n.h" +#include "Common/Render/Text/draw_text.h" #include "Core/Config.h" #include "Common/UI/View.h" @@ -198,15 +199,21 @@ void UpdateTheme() { } } -#if defined(USING_WIN_UI) || PPSSPP_PLATFORM(UWP) || defined(USING_QT_UI) - ui_theme.uiFont = FontStyle(FontID("UBUNTU24"), g_Config.sFont.c_str(), 22); - ui_theme.uiFontSmall = FontStyle(FontID("UBUNTU24"), g_Config.sFont.c_str(), 17); - ui_theme.uiFontBig = FontStyle(FontID("UBUNTU24"), g_Config.sFont.c_str(), 28, FontStyleFlags::Bold); -#else - ui_theme.uiFont = FontStyle(FontID("UBUNTU24"), "", 20); - ui_theme.uiFontSmall = FontStyle(FontID("UBUNTU24"), "", 15); - ui_theme.uiFontBig = FontStyle(FontID("UBUNTU24"), "", 26, FontStyleFlags::Bold); -#endif + // Desktop font override support + auto des = GetI18NCategory(I18NCat::DESKTOPUI); + std::string_view fontOverride = des->T("Font", ""); + if (fontOverride == "Font") { + fontOverride = ""; + } + if (!fontOverride.empty()) { + SetFontNameOverride(FontFamily::SansSerif, fontOverride); + } + + ui_theme.uiFontTiny = FontStyle(FontFamily::SansSerif, 12, FontStyleFlags::Default); + ui_theme.uiFontSmall = FontStyle(FontFamily::SansSerif, 17, FontStyleFlags::Default); + ui_theme.uiFont = FontStyle(FontFamily::SansSerif, 22, FontStyleFlags::Default); + ui_theme.uiFontBig = FontStyle(FontFamily::SansSerif, 28, FontStyleFlags::Bold); + ui_theme.uiFontCode = FontStyle(FontFamily::Fixed, 14, FontStyleFlags::Default); ui_theme.checkOn = ImageID("I_CHECKEDBOX"); ui_theme.checkOff = ImageID("I_UNCHECKEDBOX"); diff --git a/assets/Inconsolata-Medium.ttf b/assets/Inconsolata-Medium.ttf deleted file mode 100644 index 258e6db68d..0000000000 Binary files a/assets/Inconsolata-Medium.ttf and /dev/null differ diff --git a/assets/Inconsolata-Regular.ttf b/assets/Inconsolata-Regular.ttf new file mode 100644 index 0000000000..ff1e6bbc60 Binary files /dev/null and b/assets/Inconsolata-Regular.ttf differ diff --git a/assets/Roboto_Condensed-Bold.ttf b/assets/Roboto_Condensed-Bold.ttf new file mode 100644 index 0000000000..c3ccd49158 Binary files /dev/null and b/assets/Roboto_Condensed-Bold.ttf differ diff --git a/assets/Roboto_Condensed-Italic.ttf b/assets/Roboto_Condensed-Italic.ttf new file mode 100644 index 0000000000..3b387eb859 Binary files /dev/null and b/assets/Roboto_Condensed-Italic.ttf differ diff --git a/assets/Roboto_Condensed-Light.ttf b/assets/Roboto_Condensed-Light.ttf new file mode 100644 index 0000000000..e70c357377 Binary files /dev/null and b/assets/Roboto_Condensed-Light.ttf differ diff --git a/assets/Roboto-Condensed.ttf b/assets/Roboto_Condensed-Regular.ttf similarity index 100% rename from assets/Roboto-Condensed.ttf rename to assets/Roboto_Condensed-Regular.ttf