diff --git a/lib/libimhex/include/hex/api/imhex_api.hpp b/lib/libimhex/include/hex/api/imhex_api.hpp index 632fc7122..eb64481af 100644 --- a/lib/libimhex/include/hex/api/imhex_api.hpp +++ b/lib/libimhex/include/hex/api/imhex_api.hpp @@ -776,7 +776,7 @@ EXPORT_MODULE namespace hex { struct MergeFont { std::string name; - std::vector fontData; + std::span fontData; Offset offset; std::optional fontSizeMultiplier; }; @@ -814,7 +814,6 @@ EXPORT_MODULE namespace hex { } - void registerMergeFont(const std::fs::path &path, Offset offset = {}, std::optional fontSizeMultiplier = std::nullopt); void registerMergeFont(const std::string &name, const std::span &data, Offset offset = {}, std::optional fontSizeMultiplier = std::nullopt); void registerFont(const Font& font); diff --git a/lib/libimhex/source/api/imhex_api.cpp b/lib/libimhex/source/api/imhex_api.cpp index 8c882f673..3909d70a7 100644 --- a/lib/libimhex/source/api/imhex_api.cpp +++ b/lib/libimhex/source/api/imhex_api.cpp @@ -1176,25 +1176,10 @@ namespace hex { return getFont(m_fontName).regular; } - void registerMergeFont(const std::fs::path &path, Offset offset, std::optional fontSizeMultiplier) { - wolv::io::File fontFile(path, wolv::io::File::Mode::Read); - if (!fontFile.isValid()) { - log::error("Failed to load font from file '{}'", wolv::util::toUTF8String(path)); - return; - } - - impl::s_fonts->emplace_back( - wolv::util::toUTF8String(path.filename()), - fontFile.readVector(), - offset, - fontSizeMultiplier - ); - } - void registerMergeFont(const std::string &name, const std::span &data, Offset offset, std::optional fontSizeMultiplier) { impl::s_fonts->emplace_back( name, - std::vector { data.begin(), data.end() }, + data, offset, fontSizeMultiplier ); diff --git a/lib/libimhex/source/helpers/logger.cpp b/lib/libimhex/source/helpers/logger.cpp index 48a299715..770f96ac1 100644 --- a/lib/libimhex/source/helpers/logger.cpp +++ b/lib/libimhex/source/helpers/logger.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -109,13 +110,13 @@ namespace hex::log { #endif } - static std::vector s_logEntries; + static AutoReset> s_logEntries; const std::vector& getLogEntries() { return s_logEntries; } void addLogEntry(std::string_view project, std::string_view level, std::string message) { - s_logEntries.emplace_back( + s_logEntries->emplace_back( std::move(project), std::move(level), std::move(message) diff --git a/lib/libimhex/source/helpers/utils.cpp b/lib/libimhex/source/helpers/utils.cpp index 77886a92b..5fec4e561 100644 --- a/lib/libimhex/source/helpers/utils.cpp +++ b/lib/libimhex/source/helpers/utils.cpp @@ -17,6 +17,7 @@ #include #include +#include #if defined(OS_WINDOWS) #include @@ -660,9 +661,9 @@ namespace hex { return s_fileToOpen; } - static std::map s_fonts; + static AutoReset> s_fonts; extern "C" void registerFont(const char *fontName, const char *fontPath) { - s_fonts.emplace(fontPath, fontName); + s_fonts->emplace(fontPath, fontName); } const std::map& getFonts() { diff --git a/plugins/fonts/source/font_loader.cpp b/plugins/fonts/source/font_loader.cpp index 512418963..c7f994682 100644 --- a/plugins/fonts/source/font_loader.cpp +++ b/plugins/fonts/source/font_loader.cpp @@ -56,18 +56,17 @@ namespace hex::fonts::loader { } { + config.FontDataOwnedByAtlas = true; if (const auto fontPath = settings.getFontPath(); !fontPath.empty()) { - config.FontDataOwnedByAtlas = true; *imguiFont = atlas->AddFontFromFileTTF(fontPath.string().c_str(), 0.0F, &config); } - config.FontDataOwnedByAtlas = false; - if (*imguiFont == nullptr) { if (settings.isPixelPerfectFont()) { auto defaultConfig = config; defaultConfig.SizePixels = 0; *imguiFont = atlas->AddFontDefault(&defaultConfig); + atlas->Sources.back().FontDataOwnedByAtlas = false; } else { static auto jetbrainsFont = romfs::get("fonts/JetBrainsMono.ttf"); *imguiFont = atlas->AddFontFromMemoryTTF(const_cast(jetbrainsFont.data()), jetbrainsFont.size(), 0.0F, &config); @@ -75,6 +74,8 @@ namespace hex::fonts::loader { if (*imguiFont == nullptr) { log::error("Failed to load font '{}', using default font instead", name.get()); *imguiFont = atlas->AddFontDefault(); + } else { + atlas->Sources.back().FontDataOwnedByAtlas = false; } } } @@ -86,6 +87,7 @@ namespace hex::fonts::loader { config.GlyphOffset *= ImHexApi::System::getGlobalScale(); config.SizePixels = settings.getFontSize() * extraFont.fontSizeMultiplier.value_or(1); atlas->AddFontFromMemoryTTF(const_cast(extraFont.fontData.data()), extraFont.fontData.size(), 0.0F, &config); + atlas->Sources.back().FontDataOwnedByAtlas = false; } }