Update SystemFontResolver to std::filesystem::path

This commit is contained in:
Georg Hagen
2025-11-21 20:26:11 +01:00
parent 2e36bd2ca1
commit 79b5bbf165
5 changed files with 42 additions and 26 deletions

View File

@@ -12,20 +12,24 @@
namespace OpenVulkano
{
const std::string& SystemFontResolver::GetSystemFontPath(const std::string& fontName)
namespace
{
const std::filesystem::path FALLBACK_PATH;
}
const std::filesystem::path& SystemFontResolver::GetSystemFontPath(const std::string& fontName)
{
// fontName -> fontPath
static std::map<std::string, std::string> fontFilesMapping = ReadSystemFonts();
static std::string fallbackString;
static std::map<std::string, std::filesystem::path> fontFilesMapping = ReadSystemFonts();
std::string fontNameLower = Utils::ToLower(fontName);
auto it = fontFilesMapping.find(fontNameLower);
if (it != fontFilesMapping.end()) return it->second;
it = fontFilesMapping.find(fontNameLower + " regular");
if (it != fontFilesMapping.end()) return it->second;
return fallbackString;
return FALLBACK_PATH;
}
std::map<std::string, std::string> SystemFontResolver::ReadSystemFonts()
std::map<std::string, std::filesystem::path> SystemFontResolver::ReadSystemFonts()
{
std::unique_ptr<FcConfig, decltype(&FcConfigDestroy)> config(FcInitLoadConfigAndFonts(), &FcConfigDestroy);
std::unique_ptr<FcPattern, decltype(&FcPatternDestroy)> pat(FcPatternCreate(), &FcPatternDestroy);
@@ -38,7 +42,7 @@ namespace OpenVulkano
return {};
}
std::map<std::string, std::string> fontFilesMapping;
std::map<std::string, std::filesystem::path> fontFilesMapping;
for (int i = 0; i < fs->nfont; ++i)
{
FcPattern* font = fs->fonts[i];
@@ -52,7 +56,7 @@ namespace OpenVulkano
std::string fontFull = std::string(reinterpret_cast<char*>(family)) + " " +
std::string(reinterpret_cast<char*>(style));
Utils::ToLower(fontFull);
fontFilesMapping[std::move(fontFull)] = std::string(reinterpret_cast<char*>(file));
fontFilesMapping[std::move(fontFull)] = std::filesystem::path(reinterpret_cast<char*>(file));
}
}
return fontFilesMapping;