windows font family loader
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
#include "app/core/platform/font_loader.h"
|
||||
|
||||
#include <imgui/imgui.h>
|
||||
|
||||
#include <string>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
#include "imgui/imgui.h"
|
||||
#include "absl/strings/str_format.h"
|
||||
#include "app/gui/icons.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
@@ -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<char*>(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<std::string> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user