implement system fonts search for Linux

This commit is contained in:
ohyzha
2025-01-17 14:01:24 +02:00
parent 169d6c4129
commit dbc52eff42
4 changed files with 70 additions and 1 deletions

View File

@@ -16,6 +16,9 @@
#include <sys/utsname.h>
#include <unistd.h>
#include <thread>
#include <filesystem>
#include <functional>
#include <map>
namespace OpenVulkano
{
@@ -397,6 +400,34 @@ namespace OpenVulkano
std::string SystemInfo::GetSystemFontPath(const std::string& fontName)
{
// fontName -> fontPath
static std::map<std::string, std::string> fontFilesMapping;
if (fontFilesMapping.empty())
{
const std::filesystem::path fontsDir = "/usr/share/fonts/truetype";
std::function<void(const std::filesystem::path)> GetFontFiles;
GetFontFiles = [&](const std::filesystem::path& dir)
{
for (const auto& file : std::filesystem::directory_iterator(dir))
{
if (file.is_directory())
{
GetFontFiles(dir / file);
}
else if (file.path().extension() == ".ttf")
{
// store font name without extension
fontFilesMapping[file.path().stem()] = file.path();
}
}
};
GetFontFiles(fontsDir);
}
if (fontFilesMapping.contains(fontName))
{
return fontFilesMapping.at(fontName);
}
return "";
}