diff --git a/scwx-qt/source/scwx/qt/manager/font_manager.cpp b/scwx-qt/source/scwx/qt/manager/font_manager.cpp index e7266a84..20f5f9a6 100644 --- a/scwx-qt/source/scwx/qt/manager/font_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/font_manager.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -64,6 +65,7 @@ public: void InitializeFontCache(); void InitializeFontconfig(); void UpdateImGuiFont(types::FontCategory fontCategory); + void UpdateQFont(types::FontCategory fontCategory); const std::vector& GetRawFontData(const std::string& filename); @@ -90,7 +92,9 @@ public: std::shared_ptr defaultFont_ {}; boost::unordered_flat_map> - fontCategoryMap_ {}; + fontCategoryImguiFontMap_ {}; + boost::unordered_flat_map + fontCategoryQFontMap_ {}; std::mutex fontCategoryMutex_ {}; boost::unordered_flat_set dirtyFonts_ {}; @@ -143,6 +147,7 @@ void FontManager::Impl::ConnectSignals() for (auto fontCategory : dirtyFonts_) { UpdateImGuiFont(fontCategory); + UpdateQFont(fontCategory); } dirtyFonts_.clear(); @@ -154,6 +159,7 @@ void FontManager::InitializeFonts() for (auto fontCategory : types::FontCategoryIterator()) { p->UpdateImGuiFont(fontCategory); + p->UpdateQFont(fontCategory); } } @@ -166,10 +172,27 @@ void FontManager::Impl::UpdateImGuiFont(types::FontCategory fontCategory) units::font_size::points size { textSettings.font_point_size(fontCategory).GetValue()}; - fontCategoryMap_.insert_or_assign( + fontCategoryImguiFontMap_.insert_or_assign( fontCategory, self_->LoadImGuiFont(family, {styles}, size)); } +void FontManager::Impl::UpdateQFont(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 = QFontDatabase::font(QString::fromStdString(family), + QString::fromStdString(styles), + static_cast(size.value())); + font.setPointSizeF(size.value()); + + fontCategoryQFontMap_.insert_or_assign(fontCategory, font); +} + std::shared_mutex& FontManager::imgui_font_atlas_mutex() { return p->imguiFontAtlasMutex_; @@ -195,8 +218,8 @@ FontManager::GetImGuiFont(types::FontCategory fontCategory) { std::unique_lock lock {p->fontCategoryMutex_}; - auto it = p->fontCategoryMap_.find(fontCategory); - if (it != p->fontCategoryMap_.cend()) + auto it = p->fontCategoryImguiFontMap_.find(fontCategory); + if (it != p->fontCategoryImguiFontMap_.cend()) { return it->second; } @@ -206,18 +229,15 @@ FontManager::GetImGuiFont(types::FontCategory fontCategory) QFont FontManager::GetQFont(types::FontCategory fontCategory) { - auto& textSettings = settings::TextSettings::Instance(); + std::unique_lock lock {p->fontCategoryMutex_}; - 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()}; + auto it = p->fontCategoryQFontMap_.find(fontCategory); + if (it != p->fontCategoryQFontMap_.cend()) + { + return it->second; + } - QFont font(QString::fromStdString(family)); - font.setStyleName(QString::fromStdString(styles)); - font.setPointSizeF(size.value()); - - return font; + return QGuiApplication::font(); } std::shared_ptr diff --git a/scwx-qt/source/scwx/qt/manager/font_manager.hpp b/scwx-qt/source/scwx/qt/manager/font_manager.hpp index 4cc21083..e52d0d16 100644 --- a/scwx-qt/source/scwx/qt/manager/font_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/font_manager.hpp @@ -30,7 +30,8 @@ public: int GetFontId(types::Font font) const; std::shared_ptr - GetImGuiFont(types::FontCategory fontCategory); + GetImGuiFont(types::FontCategory fontCategory); + QFont GetQFont(types::FontCategory fontCategory); std::shared_ptr LoadImGuiFont(const std::string& family, const std::vector& styles, @@ -40,8 +41,6 @@ public: void LoadApplicationFont(types::Font font, const std::string& filename); void InitializeFonts(); - static QFont GetQFont(types::FontCategory fontCategory); - static FontManager& Instance(); private: diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index d1ef35ff..ae32d450 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -949,8 +950,9 @@ QFont SettingsDialogImpl::GetSelectedFont() .GetSettingsVariable() ->GetStagedOrValue()}; - QFont font(QString::fromStdString(fontFamily)); - font.setStyleName(QString::fromStdString(fontStyle)); + QFont font = QFontDatabase::font(QString::fromStdString(fontFamily), + QString::fromStdString(fontStyle), + static_cast(fontSize.value())); font.setPointSizeF(fontSize.value()); return font;