From 11ea4676cf335b600bbe1961025e8d218f3b4289 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 8 Oct 2023 09:02:28 -0500 Subject: [PATCH] Use fonts defined by text settings for rendering --- .../source/scwx/qt/manager/font_manager.cpp | 16 +++++ .../source/scwx/qt/manager/font_manager.hpp | 3 + scwx-qt/source/scwx/qt/map/map_widget.cpp | 9 +++ scwx-qt/source/scwx/qt/util/imgui.cpp | 63 ++----------------- scwx-qt/source/scwx/qt/util/tooltip.cpp | 35 +++++------ 5 files changed, 47 insertions(+), 79 deletions(-) diff --git a/scwx-qt/source/scwx/qt/manager/font_manager.cpp b/scwx-qt/source/scwx/qt/manager/font_manager.cpp index db35ec68..05d9e79e 100644 --- a/scwx-qt/source/scwx/qt/manager/font_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/font_manager.cpp @@ -189,6 +189,22 @@ FontManager::GetImGuiFont(types::FontCategory fontCategory) return p->defaultFont_; } +QFont FontManager::GetQFont(types::FontCategory fontCategory) +{ + auto& textSettings = settings::TextSettings::Instance(); + + auto family = textSettings.font_family(fontCategory).GetValue(); + auto styles = textSettings.font_style(fontCategory).GetValue(); + units::font_size::points size { + textSettings.font_point_size(fontCategory).GetValue()}; + + QFont font(QString::fromStdString(family)); + font.setStyleName(QString::fromStdString(styles)); + font.setPointSizeF(size.value()); + + return font; +} + std::shared_ptr FontManager::LoadImGuiFont(const std::string& family, const std::vector& styles, diff --git a/scwx-qt/source/scwx/qt/manager/font_manager.hpp b/scwx-qt/source/scwx/qt/manager/font_manager.hpp index 184cea18..7b824861 100644 --- a/scwx-qt/source/scwx/qt/manager/font_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/font_manager.hpp @@ -5,6 +5,7 @@ #include +#include #include namespace scwx @@ -37,6 +38,8 @@ public: void LoadApplicationFont(const std::string& filename); void InitializeFonts(); + static QFont GetQFont(types::FontCategory fontCategory); + static FontManager& Instance(); private: diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index 1e5397e6..a54c1a5e 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -1032,6 +1032,9 @@ void MapWidget::initializeGL() void MapWidget::paintGL() { + auto defaultFont = manager::FontManager::Instance().GetImGuiFont( + types::FontCategory::Default); + p->frameDraws_++; // Setup ImGui Frame @@ -1047,6 +1050,9 @@ void MapWidget::paintGL() p->ImGuiCheckFonts(); ImGui::NewFrame(); + // Set default font + ImGui::PushFont(defaultFont->font()); + // Update pixel ratio p->context_->set_pixel_ratio(pixelRatio()); @@ -1069,6 +1075,9 @@ void MapWidget::paintGL() p->lastItemPicked_ = false; } + // Pop default font + ImGui::PopFont(); + // Render ImGui Frame ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); diff --git a/scwx-qt/source/scwx/qt/util/imgui.cpp b/scwx-qt/source/scwx/qt/util/imgui.cpp index 0afddf43..46bc859e 100644 --- a/scwx-qt/source/scwx/qt/util/imgui.cpp +++ b/scwx-qt/source/scwx/qt/util/imgui.cpp @@ -1,10 +1,7 @@ #include -#include -#include +#include #include -#include - #include namespace scwx @@ -22,13 +19,6 @@ class ImGui::Impl public: explicit Impl() {} ~Impl() {} - - void Initialize(); - void UpdateMonospaceFont(); - - bool initialized_ {false}; - - ImFont* monospaceFont_ {nullptr}; }; ImGui::ImGui() : p(std::make_unique()) {} @@ -37,58 +27,13 @@ ImGui::~ImGui() = default; ImGui::ImGui(ImGui&&) noexcept = default; ImGui& ImGui::operator=(ImGui&&) noexcept = default; -void ImGui::Impl::Initialize() -{ - if (initialized_) - { - return; - } - - logger_->debug("Initialize"); - - // Configure monospace font - UpdateMonospaceFont(); - settings::GeneralSettings::Instance() - .font_sizes() - .RegisterValueChangedCallback([this](const std::vector&) - { UpdateMonospaceFont(); }); - - initialized_ = true; -} - -void ImGui::Impl::UpdateMonospaceFont() -{ - // Get monospace font size - std::size_t fontSize = 16; - auto fontSizes = - settings::GeneralSettings::Instance().font_sizes().GetValue(); - if (fontSizes.size() > 1) - { - fontSize = fontSizes[1]; - } - else if (fontSizes.size() > 0) - { - fontSize = fontSizes[0]; - } - - // Get monospace font pointer - auto monospace = - manager::ResourceManager::Font(types::Font::Inconsolata_Regular); - auto monospaceFont = monospace->ImGuiFont(fontSize); - - // Store monospace font pointer if not null - if (monospaceFont != nullptr) - { - monospaceFont_ = monospace->ImGuiFont(fontSize); - } -} - void ImGui::DrawTooltip(const std::string& hoverText) { - p->Initialize(); + auto tooltipFont = manager::FontManager::Instance().GetImGuiFont( + types::FontCategory::Tooltip); ::ImGui::BeginTooltip(); - ::ImGui::PushFont(p->monospaceFont_); + ::ImGui::PushFont(tooltipFont->font()); ::ImGui::TextUnformatted(hoverText.c_str()); ::ImGui::PopFont(); ::ImGui::EndTooltip(); diff --git a/scwx-qt/source/scwx/qt/util/tooltip.cpp b/scwx-qt/source/scwx/qt/util/tooltip.cpp index 3e9432df..509a0495 100644 --- a/scwx-qt/source/scwx/qt/util/tooltip.cpp +++ b/scwx-qt/source/scwx/qt/util/tooltip.cpp @@ -1,8 +1,6 @@ #include -#include +#include #include -#include -#include #include #include @@ -84,12 +82,22 @@ void Show(const std::string& text, const QPointF& mouseGlobalPos) } else if (tooltipMethod == types::TooltipMethod::QToolTip) { + QString fontFamily = QString::fromStdString( + textSettings.font_family(types::FontCategory::Tooltip).GetValue()); + QString fontStyle = QString::fromStdString( + textSettings.font_style(types::FontCategory::Tooltip).GetValue()); + double fontPointSize = + textSettings.font_point_size(types::FontCategory::Tooltip).GetValue(); + static std::size_t id = 0; QToolTip::showText( mouseGlobalPos.toPoint(), - QString("%3") + QString("%5") .arg(++id) - .arg("Inconsolata") + .arg(fontFamily) + .arg(fontStyle) + .arg(fontPointSize) .arg(QString::fromStdString(displayText).replace("\n", "
")), tooltipParent_.get(), {}, @@ -97,22 +105,9 @@ void Show(const std::string& text, const QPointF& mouseGlobalPos) } else if (tooltipMethod == types::TooltipMethod::QLabel) { - // Get monospace font size - units::font_size::pixels fontSize {16}; - auto fontSizes = - settings::GeneralSettings::Instance().font_sizes().GetValue(); - if (fontSizes.size() > 1) - { - fontSize = units::font_size::pixels {fontSizes[1]}; - } - else if (fontSizes.size() > 0) - { - fontSize = units::font_size::pixels {fontSizes[0]}; - } - // Configure the label - QFont font("Inconsolata"); - font.setPointSizeF(units::font_size::points(fontSize).value()); + QFont font = manager::FontManager::Instance().GetQFont( + types::FontCategory::Tooltip); tooltipLabel_->setFont(font); tooltipLabel_->setText(QString::fromStdString(displayText));