diff --git a/external/imgui b/external/imgui index 993fa347..45acd5e0 160000 --- a/external/imgui +++ b/external/imgui @@ -1 +1 @@ -Subproject commit 993fa347495860ed44b83574254ef2a317d0c14f +Subproject commit 45acd5e0e82f4c954432533ae9985ff0e1aad6d5 diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp index 93aa4461..0ce6ab47 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -62,8 +61,12 @@ public: std::vector> textList_ {}; std::vector> newList_ {}; - std::vector> fonts_ {}; - std::vector> newFonts_ {}; + std::vector, + units::font_size::pixels>> + fonts_ {}; + std::vector, + units::font_size::pixels>> + newFonts_ {}; }; PlacefileText::PlacefileText(const std::string& placefileName) : @@ -159,7 +162,8 @@ void PlacefileText::Impl::RenderTextDrawItem( std::size_t fontNumber = std::clamp(di->fontNumber_, 0, 8); // Set the font for the drop shadow and text - ImGui::PushFont(fonts_[fontNumber]->font()); + ImGui::PushFont(fonts_[fontNumber].first->font(), + fonts_[fontNumber].second.value()); if (settings::TextSettings::Instance() .placefile_text_drop_shadow_enabled() @@ -261,9 +265,7 @@ void PlacefileText::StartText() p->newList_.clear(); } -void PlacefileText::SetFonts( - const boost::unordered_flat_map>& fonts) +void PlacefileText::SetFonts(const manager::PlacefileManager::FontMap& fonts) { auto defaultFont = manager::FontManager::Instance().GetImGuiFont( types::FontCategory::Default); diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp index e36be5a6..e4e46755 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -54,10 +55,7 @@ public: * * @param [in] fonts A map of ImGui fonts */ - void - SetFonts(const boost::unordered_flat_map>& - fonts); + void SetFonts(const manager::PlacefileManager::FontMap& fonts); /** * Adds placefile text to the internal draw list. diff --git a/scwx-qt/source/scwx/qt/manager/font_manager.cpp b/scwx-qt/source/scwx/qt/manager/font_manager.cpp index 28c7b515..fc645388 100644 --- a/scwx-qt/source/scwx/qt/manager/font_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/font_manager.cpp @@ -18,11 +18,7 @@ #include #include -namespace scwx -{ -namespace qt -{ -namespace manager +namespace scwx::qt::manager { static const std::string logPrefix_ = "scwx::qt::manager::font_manager"; @@ -38,15 +34,13 @@ struct FontRecord std::string filename_ {}; }; -typedef std::pair> FontRecordPair; - template struct FontRecordHash; template<> -struct FontRecordHash +struct FontRecordHash { - size_t operator()(const FontRecordPair& x) const; + size_t operator()(const FontRecord& x) const; }; class FontManager::Impl @@ -81,20 +75,20 @@ public: std::shared_mutex imguiFontAtlasMutex_ {}; - std::uint64_t imguiFontsBuildCount_ {}; - - boost::unordered_flat_map, - FontRecordHash> + FontRecordHash> imguiFonts_ {}; std::shared_mutex imguiFontsMutex_ {}; boost::unordered_flat_map> rawFontData_ {}; std::mutex rawFontDataMutex_ {}; - std::shared_ptr defaultFont_ {}; + std::pair, units::font_size::pixels> + defaultFont_ {}; boost::unordered_flat_map> + std::pair, + units::font_size::pixels>> fontCategoryImguiFontMap_ {}; boost::unordered_flat_map fontCategoryQFontMap_ {}; @@ -166,6 +160,22 @@ void FontManager::InitializeFonts() } } +units::font_size::pixels +FontManager::ImFontSize(units::font_size::pixels size) +{ + static constexpr units::font_size::pixels kMinFontSize_ {8}; + static constexpr units::font_size::pixels kMaxFontSize_ {96}; + + // Only allow whole pixels, and clamp to 6-72 pt + const units::font_size::pixels pixels {size}; + const units::font_size::pixels imFontSize { + std::clamp(static_cast(pixels.value()), + kMinFontSize_.value(), + kMaxFontSize_.value())}; + + return imFontSize; +} + void FontManager::Impl::UpdateImGuiFont(types::FontCategory fontCategory) { auto& textSettings = settings::TextSettings::Instance(); @@ -176,7 +186,8 @@ void FontManager::Impl::UpdateImGuiFont(types::FontCategory fontCategory) textSettings.font_point_size(fontCategory).GetValue()}; fontCategoryImguiFontMap_.insert_or_assign( - fontCategory, self_->LoadImGuiFont(family, {styles}, size)); + fontCategory, + std::make_pair(self_->LoadImGuiFont(family, {styles}), ImFontSize(size))); } void FontManager::Impl::UpdateQFont(types::FontCategory fontCategory) @@ -207,11 +218,6 @@ std::shared_mutex& FontManager::imgui_font_atlas_mutex() return p->imguiFontAtlasMutex_; } -std::uint64_t FontManager::imgui_fonts_build_count() const -{ - return p->imguiFontsBuildCount_; -} - int FontManager::GetFontId(types::Font font) const { auto it = p->fontIds_.find(font); @@ -222,7 +228,7 @@ int FontManager::GetFontId(types::Font font) const return -1; } -std::shared_ptr +std::pair, units::font_size::pixels> FontManager::GetImGuiFont(types::FontCategory fontCategory) { std::unique_lock lock {p->fontCategoryMutex_}; @@ -250,31 +256,23 @@ QFont FontManager::GetQFont(types::FontCategory fontCategory) } std::shared_ptr -FontManager::LoadImGuiFont(const std::string& family, - const std::vector& styles, - units::font_size::points size, - bool loadIfNotFound) +FontManager::LoadImGuiFont(const std::string& family, + const std::vector& styles, + bool loadIfNotFound) { const std::string styleString = fmt::format("{}", fmt::join(styles, " ")); - const std::string fontString = - fmt::format("{}-{}:{}", family, size.value(), styleString); + const std::string fontString = fmt::format("{}:{}", family, styleString); logger_->debug("LoadFontResource: {}", fontString); FontRecord fontRecord = Impl::MatchFontFile(family, styles); - // Only allow whole pixels, and clamp to 6-72 pt - units::font_size::pixels pixels {size}; - units::font_size::pixels imFontSize { - std::clamp(static_cast(pixels.value()), 8, 96)}; - auto imguiFontKey = std::make_pair(fontRecord, imFontSize); - // Search for a loaded ImGui font { std::shared_lock imguiFontLock {p->imguiFontsMutex_}; // Search for the associated ImGui font - auto it = p->imguiFonts_.find(imguiFontKey); + auto it = p->imguiFonts_.find(fontRecord); if (it != p->imguiFonts_.end()) { return it->second; @@ -299,7 +297,7 @@ FontManager::LoadImGuiFont(const std::string& family, // Search for the associated ImGui font again, to prevent loading the same // font twice - auto it = p->imguiFonts_.find(imguiFontKey); + auto it = p->imguiFonts_.find(fontRecord); if (it != p->imguiFonts_.end()) { return it->second; @@ -310,25 +308,20 @@ FontManager::LoadImGuiFont(const std::string& family, try { fontName = fmt::format( - "{}:{}", - std::filesystem::path(fontRecord.filename_).filename().string(), - imFontSize.value()); + "{}", std::filesystem::path(fontRecord.filename_).filename().string()); } catch (const std::exception& ex) { logger_->warn(ex.what()); - fontName = fmt::format("{}:{}", fontRecord.filename_, imFontSize.value()); + fontName = fmt::format("{}", fontRecord.filename_); } // Create an ImGui font std::shared_ptr imguiFont = - std::make_shared(fontName, rawFontData, imFontSize); + std::make_shared(fontName, rawFontData); // Store the ImGui font - p->imguiFonts_.insert_or_assign(imguiFontKey, imguiFont); - - // Increment ImGui font build count - ++p->imguiFontsBuildCount_; + p->imguiFonts_.insert_or_assign(fontRecord, imguiFont); // Return the ImGui font return imguiFont; @@ -568,13 +561,12 @@ FontManager& FontManager::Instance() return instance_; } -size_t FontRecordHash::operator()(const FontRecordPair& x) const +size_t FontRecordHash::operator()(const FontRecord& x) const { size_t seed = 0; - boost::hash_combine(seed, x.first.family_); - boost::hash_combine(seed, x.first.style_); - boost::hash_combine(seed, x.first.filename_); - boost::hash_combine(seed, x.second.value()); + boost::hash_combine(seed, x.family_); + boost::hash_combine(seed, x.style_); + boost::hash_combine(seed, x.filename_); return seed; } @@ -585,6 +577,4 @@ bool operator==(const FontRecord& lhs, const FontRecord& rhs) lhs.filename_ == rhs.filename_; } -} // namespace manager -} // namespace qt -} // namespace scwx +} // namespace scwx::qt::manager diff --git a/scwx-qt/source/scwx/qt/manager/font_manager.hpp b/scwx-qt/source/scwx/qt/manager/font_manager.hpp index e52d0d16..50e05d9d 100644 --- a/scwx-qt/source/scwx/qt/manager/font_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/font_manager.hpp @@ -26,21 +26,22 @@ public: ~FontManager(); std::shared_mutex& imgui_font_atlas_mutex(); - std::uint64_t imgui_fonts_build_count() const; int GetFontId(types::Font font) const; - std::shared_ptr + std::pair, units::font_size::pixels> GetImGuiFont(types::FontCategory fontCategory); QFont GetQFont(types::FontCategory fontCategory); std::shared_ptr - LoadImGuiFont(const std::string& family, - const std::vector& styles, - units::font_size::points size, - bool loadIfNotFound = true); + LoadImGuiFont(const std::string& family, + const std::vector& styles, + bool loadIfNotFound = true); void LoadApplicationFont(types::Font font, const std::string& filename); void InitializeFonts(); + static units::font_size::pixels + ImFontSize(units::font_size::pixels size); + static FontManager& Instance(); private: diff --git a/scwx-qt/source/scwx/qt/manager/placefile_manager.cpp b/scwx-qt/source/scwx/qt/manager/placefile_manager.cpp index d85f9e40..9685f33f 100644 --- a/scwx-qt/source/scwx/qt/manager/placefile_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/placefile_manager.cpp @@ -52,8 +52,7 @@ public: void ReadPlacefileSettings(); void WritePlacefileSettings(); - static boost::unordered_flat_map> + static FontMap LoadFontResources(const std::shared_ptr& placefile); static std::vector> LoadImageResources(const std::shared_ptr& placefile); @@ -147,8 +146,7 @@ public: std::mutex refreshMutex_ {}; std::mutex timerMutex_ {}; - boost::unordered_flat_map> - fonts_ {}; + FontMap fonts_ {}; std::mutex fontsMutex_ {}; std::vector> images_ {}; @@ -235,7 +233,7 @@ PlacefileManager::placefile(const std::string& name) return nullptr; } -boost::unordered_flat_map> +PlacefileManager::FontMap PlacefileManager::placefile_fonts(const std::string& name) { std::shared_lock lock(p->placefileRecordLock_); @@ -775,13 +773,11 @@ std::shared_ptr PlacefileManager::Instance() return placefileManager; } -boost::unordered_flat_map> -PlacefileManager::Impl::LoadFontResources( +PlacefileManager::FontMap PlacefileManager::Impl::LoadFontResources( const std::shared_ptr& placefile) { - boost::unordered_flat_map> - imGuiFonts {}; - auto fonts = placefile->fonts(); + FontMap imGuiFonts {}; + auto fonts = placefile->fonts(); for (auto& font : fonts) { @@ -797,9 +793,11 @@ PlacefileManager::Impl::LoadFontResources( styles.push_back("italic"); } - auto imGuiFont = FontManager::Instance().LoadImGuiFont( - font.second->face_, styles, size); - imGuiFonts.emplace(font.first, std::move(imGuiFont)); + auto imGuiFont = + FontManager::Instance().LoadImGuiFont(font.second->face_, styles); + imGuiFonts.emplace( + font.first, + std::make_pair(std::move(imGuiFont), FontManager::ImFontSize(size))); } return imGuiFonts; diff --git a/scwx-qt/source/scwx/qt/manager/placefile_manager.hpp b/scwx-qt/source/scwx/qt/manager/placefile_manager.hpp index 17b39b2f..4408fb2f 100644 --- a/scwx-qt/source/scwx/qt/manager/placefile_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/placefile_manager.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -22,12 +23,16 @@ public: explicit PlacefileManager(); ~PlacefileManager(); + using FontMap = + boost::unordered_flat_map, + units::font_size::pixels>>; + bool placefile_enabled(const std::string& name); bool placefile_thresholded(const std::string& name); std::string placefile_title(const std::string& name); std::shared_ptr placefile(const std::string& name); - boost::unordered_flat_map> - placefile_fonts(const std::string& name); + FontMap placefile_fonts(const std::string& name); void set_placefile_enabled(const std::string& name, bool enabled); void set_placefile_thresholded(const std::string& name, bool thresholded); diff --git a/scwx-qt/source/scwx/qt/map/draw_layer.cpp b/scwx-qt/source/scwx/qt/map/draw_layer.cpp index 755b9925..f07cb2ac 100644 --- a/scwx-qt/source/scwx/qt/map/draw_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/draw_layer.cpp @@ -98,10 +98,11 @@ void DrawLayer::ImGuiFrameStart(const std::shared_ptr& mapContext) ImGui::SetCurrentContext(p->imGuiContext_); // Start ImGui Frame + model::ImGuiContextModel::Instance().NewFrame(); ImGui_ImplQt_NewFrame(mapContext->widget()); ImGui_ImplOpenGL3_NewFrame(); ImGui::NewFrame(); - ImGui::PushFont(defaultFont->font()); + ImGui::PushFont(defaultFont.first->font(), defaultFont.second.value()); } void DrawLayer::ImGuiFrameEnd() diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index d619de79..537318f0 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -172,7 +172,6 @@ public: void HandleHotkeyReleased(types::Hotkey hotkey); void HandleHotkeyUpdates(); void HandlePinchGesture(QPinchGesture* gesture); - void ImGuiCheckFonts(); void InitializeCustomStyles(); void InitializeNewRadarProductView(const std::string& colorPalette); void RadarProductManagerConnect(); @@ -222,8 +221,7 @@ public: ImGuiContext* imGuiContext_; std::string imGuiContextName_; - bool imGuiRendererInitialized_; - std::uint64_t imGuiFontsBuildCount_ {}; + bool imGuiRendererInitialized_ {false}; std::shared_ptr layerModel_ { model::LayerModel::Instance()}; @@ -1575,8 +1573,6 @@ void MapWidget::initializeGL() ImGui::SetCurrentContext(p->imGuiContext_); ImGui_ImplQt_RegisterWidget(this); ImGui_ImplOpenGL3_Init(); - p->imGuiFontsBuildCount_ = - manager::FontManager::Instance().imgui_fonts_build_count(); p->imGuiRendererInitialized_ = true; p->map_.reset( @@ -1628,10 +1624,6 @@ void MapWidget::paintGL() std::shared_lock imguiFontAtlasLock { manager::FontManager::Instance().imgui_font_atlas_mutex()}; - // Check ImGui fonts - ImGui::SetCurrentContext(p->imGuiContext_); - p->ImGuiCheckFonts(); - // Update pixel ratio p->context_->set_pixel_ratio(pixelRatio()); @@ -1646,12 +1638,13 @@ void MapWidget::paintGL() ImGui::SetCurrentContext(p->imGuiContext_); // Start ImGui Frame + model::ImGuiContextModel::Instance().NewFrame(); ImGui_ImplQt_NewFrame(this); ImGui_ImplOpenGL3_NewFrame(); ImGui::NewFrame(); // Set default font - ImGui::PushFont(defaultFont->font()); + ImGui::PushFont(defaultFont.first->font(), defaultFont.second.value()); // Perform mouse picking if (p->hasMouse_) @@ -1682,30 +1675,6 @@ void MapWidget::paintGL() p->isPainting_ = false; } -void MapWidgetImpl::ImGuiCheckFonts() -{ - // Update ImGui Fonts if required - std::uint64_t currentImGuiFontsBuildCount = - manager::FontManager::Instance().imgui_fonts_build_count(); - - if (imGuiFontsBuildCount_ != currentImGuiFontsBuildCount || - !model::ImGuiContextModel::Instance().font_atlas()->IsBuilt()) - { - ImGui_ImplOpenGL3_DestroyFontsTexture(); - ImGui_ImplOpenGL3_CreateFontsTexture(); - } - - static bool haveLogged = false; - if (!model::ImGuiContextModel::Instance().font_atlas()->IsBuilt() && - !haveLogged) - { - logger_->error("ImGui font atlas could not be built."); - haveLogged = true; - } - - imGuiFontsBuildCount_ = currentImGuiFontsBuildCount; -} - void MapWidgetImpl::RunMousePicking() { const QMapLibre::CustomLayerRenderParameters params = { diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index 50311b83..04b0890e 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -539,7 +539,8 @@ void OverlayLayer::Render(const std::shared_ptr& mapContext, ImVec2 {1.0f, 1.0f}); ImGui::SetNextWindowBgAlpha(0.5f); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2 {3.0f, 2.0f}); - ImGui::PushFont(attributionFont->font()); + ImGui::PushFont(attributionFont.first->font(), + attributionFont.second.value()); ImGui::Begin("Attribution", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | diff --git a/scwx-qt/source/scwx/qt/model/imgui_context_model.cpp b/scwx-qt/source/scwx/qt/model/imgui_context_model.cpp index 37ca523f..33cbfe79 100644 --- a/scwx-qt/source/scwx/qt/model/imgui_context_model.cpp +++ b/scwx-qt/source/scwx/qt/model/imgui_context_model.cpp @@ -4,11 +4,12 @@ #include -namespace scwx -{ -namespace qt -{ -namespace model +// Expose required functions from internal API +void ImFontAtlasUpdateNewFrame(ImFontAtlas* atlas, + int frame_count, + bool renderer_has_textures); + +namespace scwx::qt::model { static const std::string logPrefix_ = "scwx::qt::model::imgui_context_model"; @@ -23,6 +24,8 @@ public: std::vector contexts_ {}; ImFontAtlas fontAtlas_ {}; + + int frameCount_ {0}; }; ImGuiContextModel::ImGuiContextModel() : @@ -135,6 +138,14 @@ void ImGuiContextModel::DestroyContext(const std::string& name) } } +void ImGuiContextModel::NewFrame() +{ + static constexpr bool kRendererHasTextures_ = true; + + ImFontAtlasUpdateNewFrame( + &p->fontAtlas_, ++p->frameCount_, kRendererHasTextures_); +} + std::vector ImGuiContextModel::contexts() const { return p->contexts_; @@ -153,6 +164,4 @@ ImGuiContextModel& ImGuiContextModel::Instance() bool ImGuiContextInfo::operator==(const ImGuiContextInfo& o) const = default; -} // namespace model -} // namespace qt -} // namespace scwx +} // namespace scwx::qt::model diff --git a/scwx-qt/source/scwx/qt/model/imgui_context_model.hpp b/scwx-qt/source/scwx/qt/model/imgui_context_model.hpp index 894931c5..926501fc 100644 --- a/scwx-qt/source/scwx/qt/model/imgui_context_model.hpp +++ b/scwx-qt/source/scwx/qt/model/imgui_context_model.hpp @@ -8,11 +8,7 @@ struct ImFontAtlas; struct ImGuiContext; -namespace scwx -{ -namespace qt -{ -namespace model +namespace scwx::qt::model { class ImGuiContextModelImpl; @@ -46,6 +42,8 @@ public: ImGuiContext* CreateContext(const std::string& name); void DestroyContext(const std::string& name); + void NewFrame(); + std::vector contexts() const; ImFontAtlas* font_atlas(); @@ -59,6 +57,4 @@ private: std::unique_ptr p; }; -} // namespace model -} // namespace qt -} // namespace scwx +} // namespace scwx::qt::model diff --git a/scwx-qt/source/scwx/qt/types/imgui_font.cpp b/scwx-qt/source/scwx/qt/types/imgui_font.cpp index e6f22ad1..f2cab082 100644 --- a/scwx-qt/source/scwx/qt/types/imgui_font.cpp +++ b/scwx-qt/source/scwx/qt/types/imgui_font.cpp @@ -23,10 +23,8 @@ static const auto logger_ = scwx::util::Logger::Create(logPrefix_); class ImGuiFont::Impl { public: - explicit Impl(const std::string& fontName, - const std::vector& fontData, - units::font_size::pixels size) : - fontName_ {fontName}, size_ {size} + explicit Impl(std::string fontName, const std::vector& fontData) : + fontName_ {std::move(fontName)} { CreateImGuiFont(fontData); } @@ -35,16 +33,14 @@ public: void CreateImGuiFont(const std::vector& fontData); - const std::string fontName_; - const units::font_size::pixels size_; + std::string fontName_; ImFont* imFont_ {nullptr}; }; -ImGuiFont::ImGuiFont(const std::string& fontName, - const std::vector& fontData, - units::font_size::pixels size) : - p(std::make_unique(fontName, fontData, size)) +ImGuiFont::ImGuiFont(const std::string& fontName, + const std::vector& fontData) : + p(std::make_unique(fontName, fontData)) { } ImGuiFont::~ImGuiFont() = default; @@ -53,11 +49,12 @@ void ImGuiFont::Impl::CreateImGuiFont(const std::vector& fontData) { logger_->debug("Creating Font: {}", fontName_); + // Default render size, used in debug widget + static constexpr float kSizePixels_ = 16.0f; + ImFontAtlas* fontAtlas = model::ImGuiContextModel::Instance().font_atlas(); ImFontConfig fontConfig {}; - const float sizePixels = static_cast(size_.value()); - // Do not transfer ownership of font data to ImGui, makes const_cast safe fontConfig.FontDataOwnedByAtlas = false; @@ -69,7 +66,7 @@ void ImGuiFont::Impl::CreateImGuiFont(const std::vector& fontData) const_cast(static_cast(fontData.data())), static_cast(std::clamp( fontData.size(), 0, std::numeric_limits::max())), - sizePixels, + kSizePixels_, &fontConfig); } diff --git a/scwx-qt/source/scwx/qt/types/imgui_font.hpp b/scwx-qt/source/scwx/qt/types/imgui_font.hpp index ace8ba09..d1c28a0c 100644 --- a/scwx-qt/source/scwx/qt/types/imgui_font.hpp +++ b/scwx-qt/source/scwx/qt/types/imgui_font.hpp @@ -4,8 +4,6 @@ #include #include -#include - struct ImFont; namespace scwx @@ -18,9 +16,8 @@ namespace types class ImGuiFont { public: - explicit ImGuiFont(const std::string& fontName, - const std::vector& fontData, - units::font_size::pixels size); + explicit ImGuiFont(const std::string& fontName, + const std::vector& fontData); ~ImGuiFont(); ImGuiFont(const ImGuiFont&) = delete; diff --git a/scwx-qt/source/scwx/qt/ui/imgui_debug_widget.cpp b/scwx-qt/source/scwx/qt/ui/imgui_debug_widget.cpp index 860f5612..541c8e3e 100644 --- a/scwx-qt/source/scwx/qt/ui/imgui_debug_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/imgui_debug_widget.cpp @@ -9,11 +9,7 @@ #include #include -namespace scwx -{ -namespace qt -{ -namespace ui +namespace scwx::qt::ui { static const std::string logPrefix_ = "scwx::qt::ui::imgui_debug_widget"; @@ -51,8 +47,6 @@ public: model::ImGuiContextModel::Instance().DestroyContext(contextName_); } - void ImGuiCheckFonts(); - ImGuiDebugWidget* self_; ImGuiContext* context_; std::string contextName_; @@ -61,7 +55,6 @@ public: std::set renderedSet_ {}; bool imGuiRendererInitialized_ {false}; - std::uint64_t imGuiFontsBuildCount_ {}; }; ImGuiDebugWidget::ImGuiDebugWidget(QWidget* parent) : @@ -106,8 +99,6 @@ void ImGuiDebugWidget::initializeGL() // Initialize ImGui OpenGL3 backend ImGui::SetCurrentContext(p->context_); ImGui_ImplOpenGL3_Init(); - p->imGuiFontsBuildCount_ = - manager::FontManager::Instance().imgui_fonts_build_count(); p->imGuiRendererInitialized_ = true; } @@ -122,9 +113,9 @@ void ImGuiDebugWidget::paintGL() std::shared_lock imguiFontAtlasLock { manager::FontManager::Instance().imgui_font_atlas_mutex()}; + model::ImGuiContextModel::Instance().NewFrame(); ImGui_ImplQt_NewFrame(this); ImGui_ImplOpenGL3_NewFrame(); - p->ImGuiCheckFonts(); ImGui::NewFrame(); if (!p->renderedSet_.contains(p->currentContext_)) @@ -149,26 +140,4 @@ void ImGuiDebugWidget::paintGL() imguiFontAtlasLock.unlock(); } -void ImGuiDebugWidgetImpl::ImGuiCheckFonts() -{ - // Update ImGui Fonts if required - std::uint64_t currentImGuiFontsBuildCount = - manager::FontManager::Instance().imgui_fonts_build_count(); - - if ((context_ == currentContext_ && - imGuiFontsBuildCount_ != currentImGuiFontsBuildCount) || - !model::ImGuiContextModel::Instance().font_atlas()->IsBuilt()) - { - ImGui_ImplOpenGL3_DestroyFontsTexture(); - ImGui_ImplOpenGL3_CreateFontsTexture(); - } - - if (context_ == currentContext_) - { - imGuiFontsBuildCount_ = currentImGuiFontsBuildCount; - } -} - -} // namespace ui -} // namespace qt -} // namespace scwx +} // namespace scwx::qt::ui diff --git a/scwx-qt/source/scwx/qt/util/imgui.cpp b/scwx-qt/source/scwx/qt/util/imgui.cpp index 64076dab..1bb8af3c 100644 --- a/scwx-qt/source/scwx/qt/util/imgui.cpp +++ b/scwx-qt/source/scwx/qt/util/imgui.cpp @@ -34,7 +34,7 @@ void ImGui::DrawTooltip(const std::string& hoverText) if (::ImGui::BeginTooltip()) { - ::ImGui::PushFont(tooltipFont->font()); + ::ImGui::PushFont(tooltipFont.first->font(), tooltipFont.second.value()); ::ImGui::TextUnformatted(hoverText.c_str()); ::ImGui::PopFont(); ::ImGui::EndTooltip();