From c135af22dde93327bc4e0c4c5b8c649cc847207e Mon Sep 17 00:00:00 2001 From: TryTwo Date: Thu, 2 Oct 2025 23:22:14 -0700 Subject: [PATCH] Imgui: Add a new default font (VeraMono - 49kb) that scales better than the old default. Allow loading a custom font by naming it OSD_Font.ttf and placing the file in the User/Load folder, to load that font instead. Useful for future testing. --- Data/Sys/Resources/OSD_Font.ttf | Bin 0 -> 49224 bytes .../Resources/OSD_Font_VeraMono_Copyright.txt | 124 ++++++++++++++++++ .../Settings/OnScreenDisplayPane.cpp | 8 +- Source/Core/VideoCommon/OnScreenUI.cpp | 26 +++- 4 files changed, 151 insertions(+), 7 deletions(-) create mode 100644 Data/Sys/Resources/OSD_Font.ttf create mode 100644 Data/Sys/Resources/OSD_Font_VeraMono_Copyright.txt diff --git a/Data/Sys/Resources/OSD_Font.ttf b/Data/Sys/Resources/OSD_Font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..139f0b4311ad2e0369a347b3be6c46e6c2b730d5 GIT binary patch literal 49224 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

v4sd<1qP7K2z4-hpqK=? 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 U?Vl{mP4-*{1_ln$*eysL096b#rvLx| literal 0 HcmV?d00001 diff --git a/Data/Sys/Resources/OSD_Font_VeraMono_Copyright.txt b/Data/Sys/Resources/OSD_Font_VeraMono_Copyright.txt new file mode 100644 index 0000000000..e651be1c4f --- /dev/null +++ b/Data/Sys/Resources/OSD_Font_VeraMono_Copyright.txt @@ -0,0 +1,124 @@ +Bitstream Vera Fonts Copyright + +The fonts have a generous copyright, allowing derivative works (as +long as "Bitstream" or "Vera" are not in the names), and full +redistribution (so long as they are not *sold* by themselves). They +can be be bundled, redistributed and sold with any software. + +The fonts are distributed under the following copyright: + +Copyright +========= + +Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream +Vera is a trademark of Bitstream, Inc. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the fonts accompanying this license ("Fonts") and associated +documentation files (the "Font Software"), to reproduce and distribute +the Font Software, including without limitation the rights to use, +copy, merge, publish, distribute, and/or sell copies of the Font +Software, and to permit persons to whom the Font Software is furnished +to do so, subject to the following conditions: + +The above copyright and trademark notices and this permission notice +shall be included in all copies of one or more of the Font Software +typefaces. + +The Font Software may be modified, altered, or added to, and in +particular the designs of glyphs or characters in the Fonts may be +modified and additional glyphs or characters may be added to the +Fonts, only if the fonts are renamed to names not containing either +the words "Bitstream" or the word "Vera". + +This License becomes null and void to the extent applicable to Fonts +or Font Software that has been modified and is distributed under the +"Bitstream Vera" names. + +The Font Software may be sold as part of a larger software package but +no copy of one or more of the Font Software typefaces may be sold by +itself. + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL +BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, +OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT +SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + +Except as contained in this notice, the names of Gnome, the Gnome +Foundation, and Bitstream Inc., shall not be used in advertising or +otherwise to promote the sale, use or other dealings in this Font +Software without prior written authorization from the Gnome Foundation +or Bitstream Inc., respectively. For further information, contact: +fonts at gnome dot org. + +Copyright FAQ +============= + + 1. I don't understand the resale restriction... What gives? + + Bitstream is giving away these fonts, but wishes to ensure its + competitors can't just drop the fonts as is into a font sale system + and sell them as is. It seems fair that if Bitstream can't make money + from the Bitstream Vera fonts, their competitors should not be able to + do so either. You can sell the fonts as part of any software package, + however. + + 2. I want to package these fonts separately for distribution and + sale as part of a larger software package or system. Can I do so? + + Yes. A RPM or Debian package is a "larger software package" to begin + with, and you aren't selling them independently by themselves. + See 1. above. + + 3. Are derivative works allowed? + Yes! + + 4. Can I change or add to the font(s)? + Yes, but you must change the name(s) of the font(s). + + 5. Under what terms are derivative works allowed? + + You must change the name(s) of the fonts. This is to ensure the + quality of the fonts, both to protect Bitstream and Gnome. We want to + ensure that if an application has opened a font specifically of these + names, it gets what it expects (though of course, using fontconfig, + substitutions could still could have occurred during font + opening). You must include the Bitstream copyright. Additional + copyrights can be added, as per copyright law. Happy Font Hacking! + + 6. If I have improvements for Bitstream Vera, is it possible they might get + adopted in future versions? + + Yes. The contract between the Gnome Foundation and Bitstream has + provisions for working with Bitstream to ensure quality additions to + the Bitstream Vera font family. Please contact us if you have such + additions. Note, that in general, we will want such additions for the + entire family, not just a single font, and that you'll have to keep + both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add + glyphs to the font, they must be stylistically in keeping with Vera's + design. Vera cannot become a "ransom note" font. Jim Lyles will be + providing a document describing the design elements used in Vera, as a + guide and aid for people interested in contributing to Vera. + + 7. I want to sell a software package that uses these fonts: Can I do so? + + Sure. Bundle the fonts with your software and sell your software + with the fonts. That is the intent of the copyright. + + 8. If applications have built the names "Bitstream Vera" into them, + can I override this somehow to use fonts of my choosing? + + This depends on exact details of the software. Most open source + systems and software (e.g., Gnome, KDE, etc.) are now converting to + use fontconfig (see www.fontconfig.org) to handle font configuration, + selection and substitution; it has provisions for overriding font + names and subsituting alternatives. An example is provided by the + supplied local.conf file, which chooses the family Bitstream Vera for + "sans", "serif" and "monospace". Other software (e.g., the XFree86 + core server) has other mechanisms for font substitution. + diff --git a/Source/Core/DolphinQt/Settings/OnScreenDisplayPane.cpp b/Source/Core/DolphinQt/Settings/OnScreenDisplayPane.cpp index 7c279d4437..c1a4f7fad1 100644 --- a/Source/Core/DolphinQt/Settings/OnScreenDisplayPane.cpp +++ b/Source/Core/DolphinQt/Settings/OnScreenDisplayPane.cpp @@ -149,8 +149,10 @@ void OnScreenDisplayPane::AddDescriptions() "

If unsure, leave this checked."); static const char TR_OSD_FONT_SIZE_DESCRIPTION[] = QT_TR_NOOP( "Changes the font size of the On-Screen Display. Affects features such as performance " - "statistics, frame counter, and netplay chat.

If " - "unsure, leave this at 13."); + "statistics, frame counter, and netplay chat." + "

The font can be changed by placing a TTF font file into Dolphin's User/Load " + "folder, and renaming it OSD_Font.ttf." + "

If unsure, leave this at 13."); static const char TR_SHOW_FPS_DESCRIPTION[] = QT_TR_NOOP("Shows the number of distinct frames rendered per second as a measure of " @@ -208,7 +210,7 @@ void OnScreenDisplayPane::AddDescriptions() "savestates.

If unsure, leave " "this unchecked."); static const char TR_LAG_COUNTER_DESCRIPTION[] = QT_TR_NOOP( - "Shows how many frames have occured without controller inputs being checked. Resets to 1 " + "Shows how many frames have occurred without controller inputs being checked. Resets to 1 " "when inputs are processed.

If unsure, leave " "this unchecked."); static const char TR_FRAME_COUNTER_DESCRIPTION[] = diff --git a/Source/Core/VideoCommon/OnScreenUI.cpp b/Source/Core/VideoCommon/OnScreenUI.cpp index bca12bccdd..7b59450ca0 100644 --- a/Source/Core/VideoCommon/OnScreenUI.cpp +++ b/Source/Core/VideoCommon/OnScreenUI.cpp @@ -3,7 +3,9 @@ #include "VideoCommon/OnScreenUI.h" +#include "Common/CommonPaths.h" #include "Common/EnumMap.h" +#include "Common/FileUtil.h" #include "Common/Profiler.h" #include "Common/Timer.h" @@ -74,11 +76,28 @@ bool OnScreenUI::Initialize(u32 width, u32 height, float scale) } // Font defaults + ImGuiIO& io = ImGui::GetIO(); m_imgui_textures.clear(); - // Setup new font management behavior. - ImGui::GetIO().BackendFlags |= - ImGuiBackendFlags_RendererHasTextures | ImGuiBackendFlags_RendererHasVtxOffset; + // User supplied font + std::string file = File::GetUserPath(D_LOAD_IDX) + "OSD_Font.ttf"; + + bool font_exists = File::Exists(file); + if (!font_exists) + { + // Default supplied font + file = File::GetSysDirectory() + DIR_SEP + RESOURCES_DIR + DIR_SEP + "OSD_Font.ttf"; + font_exists = File::Exists(file); + } + + if (font_exists) + { + io.Fonts->Clear(); + io.Fonts->AddFontFromFileTTF(file.c_str()); + } + + // Setup new font management behavior + io.BackendFlags |= ImGuiBackendFlags_RendererHasTextures | ImGuiBackendFlags_RendererHasVtxOffset; if (!RecompileImGuiPipeline()) return false; @@ -443,7 +462,6 @@ void OnScreenUI::UpdateImguiTexture(ImTextureData* tex) tex->SetTexID(static_cast(*font_tex.get())); // Keeps the texture alive. m_imgui_textures.push_back(std::move(font_tex)); - tex->SetStatus(ImTextureStatus_OK); } else if (tex->Status == ImTextureStatus_WantUpdates)