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);