windows font family loader
This commit is contained in:
@@ -1,9 +1,13 @@
|
|||||||
#include "app/core/platform/font_loader.h"
|
#include "app/core/platform/font_loader.h"
|
||||||
|
|
||||||
|
#include <imgui/imgui.h>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <unordered_set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "imgui/imgui.h"
|
#include "absl/strings/str_format.h"
|
||||||
|
#include "app/gui/icons.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
@@ -52,7 +56,9 @@ void LoadSystemFonts() {
|
|||||||
valueData, &valueDataSize) == ERROR_SUCCESS) {
|
valueData, &valueDataSize) == ERROR_SUCCESS) {
|
||||||
if (valueType == REG_SZ) {
|
if (valueType == REG_SZ) {
|
||||||
// Add the font file path to the vector
|
// 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);
|
fontPaths.push_back(fontPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,8 +72,55 @@ void LoadSystemFonts() {
|
|||||||
|
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
for (const auto& fontPath : fontPaths) {
|
// List of common font face names
|
||||||
io.Fonts->AddFontFromFileTTF(fontPath.c_str(), 16.0f);
|
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