diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md index b5a5b93a..87476473 100644 --- a/ACKNOWLEDGEMENTS.md +++ b/ACKNOWLEDGEMENTS.md @@ -55,7 +55,9 @@ Supercell Wx uses assets from the following sources: | Source | License | Notes | | ------ | ------- | ----- | +| Alte DIN 1451 Mittelschrift | SIL Open Font License | | [Font Awesome Free](https://fontawesome.com/) | CC BY 4.0 License | +| [Inconsolata](https://fonts.google.com/specimen/Inconsolata) | SIL Open Font License | | [NOAA's Weather and Climate Toolkit](https://www.ncdc.noaa.gov/wct/) | Public Domain | Default Color Tables | | [Supercell thunderstorm with dramatic clouds](https://www.shutterstock.com/image-photo/supercell-thunderstorm-dramatic-clouds-1354353521) | Shutterstock Standard License | Photo by John Sirlin diff --git a/scwx-qt/res/fonts/Inconsolata-Regular.ttf b/scwx-qt/res/fonts/Inconsolata-Regular.ttf new file mode 100644 index 00000000..0d879bf3 Binary files /dev/null and b/scwx-qt/res/fonts/Inconsolata-Regular.ttf differ diff --git a/scwx-qt/scwx-qt.qrc b/scwx-qt/scwx-qt.qrc index 3939ddf4..8f29eed1 100644 --- a/scwx-qt/scwx-qt.qrc +++ b/scwx-qt/scwx-qt.qrc @@ -13,6 +13,7 @@ res/config/radar_sites.json res/fonts/din1451alt.ttf res/fonts/din1451alt_g.ttf + res/fonts/Inconsolata-Regular.ttf res/icons/scwx-256.ico res/icons/scwx-256.png res/icons/font-awesome-6/angle-left-solid.svg diff --git a/scwx-qt/source/scwx/qt/manager/resource_manager.cpp b/scwx-qt/source/scwx/qt/manager/resource_manager.cpp index c6f8106e..bbe06e88 100644 --- a/scwx-qt/source/scwx/qt/manager/resource_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/resource_manager.cpp @@ -26,9 +26,11 @@ static void LoadTextures(); static const std::unordered_map fontNames_ { {types::Font::din1451alt, ":/res/fonts/din1451alt.ttf"}, - {types::Font::din1451alt_g, ":/res/fonts/din1451alt_g.ttf"}}; + {types::Font::din1451alt_g, ":/res/fonts/din1451alt_g.ttf"}, + {types::Font::Inconsolata_Regular, ":/res/fonts/Inconsolata-Regular.ttf"}}; -static std::unordered_map fontIds_ {}; +static std::unordered_map fontIds_ {}; +static std::unordered_map> fonts_ {}; void Initialize() { @@ -50,6 +52,16 @@ int FontId(types::Font font) return -1; } +std::shared_ptr Font(types::Font font) +{ + auto it = fonts_.find(font); + if (it != fonts_.cend()) + { + return it->second; + } + return nullptr; +} + static void LoadFonts() { for (auto& fontName : fontNames_) @@ -58,7 +70,8 @@ static void LoadFonts() QString::fromStdString(fontName.second)); fontIds_.emplace(fontName.first, fontId); - util::Font::Create(fontName.second); + auto font = util::Font::Create(fontName.second); + fonts_.emplace(fontName.first, font); } ImFontAtlas* fontAtlas = model::ImGuiContextModel::Instance().font_atlas(); diff --git a/scwx-qt/source/scwx/qt/manager/resource_manager.hpp b/scwx-qt/source/scwx/qt/manager/resource_manager.hpp index a6ff13e1..909373db 100644 --- a/scwx-qt/source/scwx/qt/manager/resource_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/resource_manager.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include namespace scwx { @@ -14,7 +15,8 @@ namespace ResourceManager void Initialize(); void Shutdown(); -int FontId(types::Font font); +int FontId(types::Font font); +std::shared_ptr Font(types::Font font); } // namespace ResourceManager } // namespace manager diff --git a/scwx-qt/source/scwx/qt/map/placefile_layer.cpp b/scwx-qt/source/scwx/qt/map/placefile_layer.cpp index 09dbd2af..55b275e3 100644 --- a/scwx-qt/source/scwx/qt/map/placefile_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/placefile_layer.cpp @@ -1,5 +1,7 @@ #include #include +#include +#include #include #include #include @@ -40,6 +42,7 @@ public: float mapScale_ {1.0f}; float halfWidth_ {}; float halfHeight_ {}; + ImFont* monospaceFont_ {}; }; PlacefileLayer::PlacefileLayer(std::shared_ptr context) : @@ -110,7 +113,9 @@ void PlacefileLayer::Impl::RenderText( if (!hoverText.empty() && ImGui::IsItemHovered()) { ImGui::BeginTooltip(); + ImGui::PushFont(monospaceFont_); ImGui::TextUnformatted(hoverText.c_str()); + ImGui::PopFont(); ImGui::EndTooltip(); } @@ -136,6 +141,18 @@ void PlacefileLayer::Render( p->halfWidth_ = params.width * 0.5f; p->halfHeight_ = params.height * 0.5f; + // Get monospace font pointer + std::size_t fontSize = 16; + auto fontSizes = + manager::SettingsManager::general_settings().font_sizes().GetValue(); + if (fontSizes.size() > 0) + { + fontSize = fontSizes[0]; + } + auto monospace = + manager::ResourceManager::Font(types::Font::Inconsolata_Regular); + p->monospaceFont_ = monospace->ImGuiFont(fontSize); + std::shared_ptr placefileManager = manager::PlacefileManager::Instance(); diff --git a/scwx-qt/source/scwx/qt/types/font_types.hpp b/scwx-qt/source/scwx/qt/types/font_types.hpp index 95a62469..c6f42506 100644 --- a/scwx-qt/source/scwx/qt/types/font_types.hpp +++ b/scwx-qt/source/scwx/qt/types/font_types.hpp @@ -10,7 +10,8 @@ namespace types enum class Font { din1451alt, - din1451alt_g + din1451alt_g, + Inconsolata_Regular }; } // namespace types diff --git a/scwx-qt/source/scwx/qt/util/font.cpp b/scwx-qt/source/scwx/qt/util/font.cpp index ce87714c..49fdee3a 100644 --- a/scwx-qt/source/scwx/qt/util/font.cpp +++ b/scwx-qt/source/scwx/qt/util/font.cpp @@ -299,6 +299,16 @@ void FontImpl::CreateImGuiFont(QFile& fontFile, } } +ImFont* Font::ImGuiFont(std::size_t fontPixelSize) +{ + auto it = p->imGuiFonts_.find(fontPixelSize); + if (it != p->imGuiFonts_.cend()) + { + return it->second; + } + return nullptr; +} + std::shared_ptr Font::Create(const std::string& resource) { logger_->debug("Loading font file: {}", resource); diff --git a/scwx-qt/source/scwx/qt/util/font.hpp b/scwx-qt/source/scwx/qt/util/font.hpp index dc87570a..f545a93b 100644 --- a/scwx-qt/source/scwx/qt/util/font.hpp +++ b/scwx-qt/source/scwx/qt/util/font.hpp @@ -6,7 +6,9 @@ #include #include -#include +#include + +struct ImFont; namespace scwx { @@ -23,10 +25,10 @@ public: explicit Font(const std::string& resource); ~Font(); - Font(const Font&) = delete; + Font(const Font&) = delete; Font& operator=(const Font&) = delete; - Font(Font&&) = delete; + Font(Font&&) = delete; Font& operator=(Font&&) = delete; float BufferText(std::shared_ptr buffer, @@ -38,6 +40,8 @@ public: float Kerning(char c1, char c2) const; float TextLength(const std::string& text, float pointSize) const; + ImFont* ImGuiFont(std::size_t fontPixelSize); + GLuint GenerateTexture(gl::OpenGLFunctions& gl); static std::shared_ptr Create(const std::string& resource);