diff --git a/src/app/core/platform/font_loader.cc b/src/app/core/platform/font_loader.cc index 3acf4d41..9c3cd2b7 100644 --- a/src/app/core/platform/font_loader.cc +++ b/src/app/core/platform/font_loader.cc @@ -1,9 +1,13 @@ #include "app/core/platform/font_loader.h" +#include + #include +#include #include -#include "imgui/imgui.h" +#include "absl/strings/str_format.h" +#include "app/gui/icons.h" #ifdef _WIN32 #include @@ -52,7 +56,9 @@ void LoadSystemFonts() { valueData, &valueDataSize) == ERROR_SUCCESS) { if (valueType == REG_SZ) { // Add the font file path to the vector - std::string fontPath((char*)valueData); + std::string fontPath(reinterpret_cast(valueData), + valueDataSize); + fontPaths.push_back(fontPath); } } @@ -66,8 +72,55 @@ void LoadSystemFonts() { ImGuiIO& io = ImGui::GetIO(); - for (const auto& fontPath : fontPaths) { - io.Fonts->AddFontFromFileTTF(fontPath.c_str(), 16.0f); + // List of common font face names + static const std::unordered_set commonFontFaceNames = { + "arial", + "times", + "cour", + "verdana", + "tahoma", + "comic", + "Impact", + "ariblk", + "Trebuchet MS", + "Georgia", + "Palatino Linotype", + "Lucida Sans Unicode", + "Tahoma", + "Lucida Console"}; + + for (auto& fontPath : fontPaths) { + // Check if the font path has a "C:\" prefix + if (fontPath.substr(0, 2) != "C:") { + // Add "C:\Windows\Fonts\" prefix to the font path + fontPath = absl::StrFormat("C:\\Windows\\Fonts\\%s", fontPath.c_str()); + } + + // Check if the font file has a .ttf or .TTF extension + std::string extension = fontPath.substr(fontPath.find_last_of(".") + 1); + if (extension == "ttf" || extension == "TTF") { + // Get the font face name from the font path + std::string fontFaceName = + fontPath.substr(fontPath.find_last_of("\\/") + 1); + fontFaceName = fontFaceName.substr(0, fontFaceName.find_last_of(".")); + + // Check if the font face name is in the common font face names list + if (commonFontFaceNames.find(fontFaceName) != commonFontFaceNames.end()) { + io.Fonts->AddFontFromFileTTF(fontPath.c_str(), 16.0f); + + // Merge icon set + // Icon configuration + static const ImWchar icons_ranges[] = {ICON_MIN_MD, 0xf900, 0}; + ImFontConfig icons_config; + static const float ICON_FONT_SIZE = 18.0f; + icons_config.MergeMode = true; + icons_config.GlyphOffset.y = 5.0f; + icons_config.GlyphMinAdvanceX = 13.0f; + icons_config.PixelSnapH = true; + io.Fonts->AddFontFromFileTTF(FONT_ICON_FILE_NAME_MD, ICON_FONT_SIZE, + &icons_config, icons_ranges); + } + } } }