mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 19:10:06 +00:00
Initialize Qt application fonts from cached versions on filesystem
This commit is contained in:
parent
7af2edd3ec
commit
fe1acb32cf
6 changed files with 28 additions and 26 deletions
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
#include <QFontDatabase>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <boost/container_hash/hash.hpp>
|
#include <boost/container_hash/hash.hpp>
|
||||||
#include <boost/unordered/unordered_flat_map.hpp>
|
#include <boost/unordered/unordered_flat_map.hpp>
|
||||||
|
|
@ -92,6 +93,8 @@ public:
|
||||||
|
|
||||||
boost::unordered_flat_set<types::FontCategory> dirtyFonts_ {};
|
boost::unordered_flat_set<types::FontCategory> dirtyFonts_ {};
|
||||||
std::mutex dirtyFontsMutex_ {};
|
std::mutex dirtyFontsMutex_ {};
|
||||||
|
|
||||||
|
boost::unordered_flat_map<types::Font, int> fontIds_ {};
|
||||||
};
|
};
|
||||||
|
|
||||||
FontManager::FontManager() : p(std::make_unique<Impl>(this)) {}
|
FontManager::FontManager() : p(std::make_unique<Impl>(this)) {}
|
||||||
|
|
@ -175,6 +178,16 @@ std::uint64_t FontManager::imgui_fonts_build_count() const
|
||||||
return p->imguiFontsBuildCount_;
|
return p->imguiFontsBuildCount_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int FontManager::GetFontId(types::Font font) const
|
||||||
|
{
|
||||||
|
auto it = p->fontIds_.find(font);
|
||||||
|
if (it != p->fontIds_.cend())
|
||||||
|
{
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<types::ImGuiFont>
|
std::shared_ptr<types::ImGuiFont>
|
||||||
FontManager::GetImGuiFont(types::FontCategory fontCategory)
|
FontManager::GetImGuiFont(types::FontCategory fontCategory)
|
||||||
{
|
{
|
||||||
|
|
@ -322,7 +335,8 @@ FontManager::Impl::GetRawFontData(const std::string& filename)
|
||||||
return result.first->second;
|
return result.first->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FontManager::LoadApplicationFont(const std::string& filename)
|
void FontManager::LoadApplicationFont(types::Font font,
|
||||||
|
const std::string& filename)
|
||||||
{
|
{
|
||||||
// If the font cache failed to create, don't attempt to cache any fonts
|
// If the font cache failed to create, don't attempt to cache any fonts
|
||||||
if (p->fontCachePath_.empty())
|
if (p->fontCachePath_.empty())
|
||||||
|
|
@ -358,6 +372,11 @@ void FontManager::LoadApplicationFont(const std::string& filename)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load the file into the Qt Font Database
|
||||||
|
int fontId =
|
||||||
|
QFontDatabase::addApplicationFont(QString::fromStdString(cacheFilename));
|
||||||
|
p->fontIds_.emplace(font, fontId);
|
||||||
|
|
||||||
// Load the file into fontconfig
|
// Load the file into fontconfig
|
||||||
FcBool result = FcConfigAppFontAddFile(
|
FcBool result = FcConfigAppFontAddFile(
|
||||||
nullptr, reinterpret_cast<const FcChar8*>(cacheFilename.c_str()));
|
nullptr, reinterpret_cast<const FcChar8*>(cacheFilename.c_str()));
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <scwx/qt/types/imgui_font.hpp>
|
#include <scwx/qt/types/imgui_font.hpp>
|
||||||
|
#include <scwx/qt/types/font_types.hpp>
|
||||||
#include <scwx/qt/types/text_types.hpp>
|
#include <scwx/qt/types/text_types.hpp>
|
||||||
|
|
||||||
#include <shared_mutex>
|
#include <shared_mutex>
|
||||||
|
|
@ -27,6 +28,7 @@ public:
|
||||||
std::shared_mutex& imgui_font_atlas_mutex();
|
std::shared_mutex& imgui_font_atlas_mutex();
|
||||||
std::uint64_t imgui_fonts_build_count() const;
|
std::uint64_t imgui_fonts_build_count() const;
|
||||||
|
|
||||||
|
int GetFontId(types::Font font) const;
|
||||||
std::shared_ptr<types::ImGuiFont>
|
std::shared_ptr<types::ImGuiFont>
|
||||||
GetImGuiFont(types::FontCategory fontCategory);
|
GetImGuiFont(types::FontCategory fontCategory);
|
||||||
std::shared_ptr<types::ImGuiFont>
|
std::shared_ptr<types::ImGuiFont>
|
||||||
|
|
@ -35,7 +37,7 @@ public:
|
||||||
units::font_size::points<double> size,
|
units::font_size::points<double> size,
|
||||||
bool loadIfNotFound = true);
|
bool loadIfNotFound = true);
|
||||||
|
|
||||||
void LoadApplicationFont(const std::string& filename);
|
void LoadApplicationFont(types::Font font, const std::string& filename);
|
||||||
void InitializeFonts();
|
void InitializeFonts();
|
||||||
|
|
||||||
static QFont GetQFont(types::FontCategory fontCategory);
|
static QFont GetQFont(types::FontCategory fontCategory);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
||||||
#include <execution>
|
#include <execution>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
|
||||||
#include <QFontDatabase>
|
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
|
|
||||||
namespace scwx
|
namespace scwx
|
||||||
|
|
@ -31,8 +30,6 @@ static const std::vector<std::pair<types::Font, std::string>> fontNames_ {
|
||||||
{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"}};
|
{types::Font::Inconsolata_Regular, ":/res/fonts/Inconsolata-Regular.ttf"}};
|
||||||
|
|
||||||
static std::unordered_map<types::Font, int> fontIds_ {};
|
|
||||||
|
|
||||||
void Initialize()
|
void Initialize()
|
||||||
{
|
{
|
||||||
config::CountyDatabase::Initialize();
|
config::CountyDatabase::Initialize();
|
||||||
|
|
@ -43,16 +40,6 @@ void Initialize()
|
||||||
|
|
||||||
void Shutdown() {}
|
void Shutdown() {}
|
||||||
|
|
||||||
int FontId(types::Font font)
|
|
||||||
{
|
|
||||||
auto it = fontIds_.find(font);
|
|
||||||
if (it != fontIds_.cend())
|
|
||||||
{
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<boost::gil::rgba8_image_t>
|
std::shared_ptr<boost::gil::rgba8_image_t>
|
||||||
LoadImageResource(const std::string& urlString)
|
LoadImageResource(const std::string& urlString)
|
||||||
{
|
{
|
||||||
|
|
@ -95,11 +82,7 @@ static void LoadFonts()
|
||||||
|
|
||||||
for (auto& fontName : fontNames_)
|
for (auto& fontName : fontNames_)
|
||||||
{
|
{
|
||||||
int fontId = QFontDatabase::addApplicationFont(
|
fontManager.LoadApplicationFont(fontName.first, fontName.second);
|
||||||
QString::fromStdString(fontName.second));
|
|
||||||
fontIds_.emplace(fontName.first, fontId);
|
|
||||||
|
|
||||||
fontManager.LoadApplicationFont(fontName.second);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fontManager.InitializeFonts();
|
fontManager.InitializeFonts();
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,6 @@ namespace ResourceManager
|
||||||
void Initialize();
|
void Initialize();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
|
||||||
int FontId(types::Font font);
|
|
||||||
|
|
||||||
std::shared_ptr<boost::gil::rgba8_image_t>
|
std::shared_ptr<boost::gil::rgba8_image_t>
|
||||||
LoadImageResource(const std::string& urlString);
|
LoadImageResource(const std::string& urlString);
|
||||||
std::vector<std::shared_ptr<boost::gil::rgba8_image_t>>
|
std::vector<std::shared_ptr<boost::gil::rgba8_image_t>>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#include "about_dialog.hpp"
|
#include "about_dialog.hpp"
|
||||||
#include "ui_about_dialog.h"
|
#include "ui_about_dialog.h"
|
||||||
#include <scwx/qt/main/versions.hpp>
|
#include <scwx/qt/main/versions.hpp>
|
||||||
#include <scwx/qt/manager/resource_manager.hpp>
|
#include <scwx/qt/manager/font_manager.hpp>
|
||||||
|
|
||||||
#include <QFontDatabase>
|
#include <QFontDatabase>
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ AboutDialog::AboutDialog(QWidget* parent) :
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
int titleFontId =
|
int titleFontId =
|
||||||
manager::ResourceManager::FontId(types::Font::din1451alt_g);
|
manager::FontManager::Instance().GetFontId(types::Font::din1451alt_g);
|
||||||
QString titleFontFamily =
|
QString titleFontFamily =
|
||||||
QFontDatabase::applicationFontFamilies(titleFontId).at(0);
|
QFontDatabase::applicationFontFamilies(titleFontId).at(0);
|
||||||
QFont titleFont(titleFontFamily, 14);
|
QFont titleFont(titleFontFamily, 14);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
#include "update_dialog.hpp"
|
#include "update_dialog.hpp"
|
||||||
#include "ui_update_dialog.h"
|
#include "ui_update_dialog.h"
|
||||||
#include <scwx/qt/main/versions.hpp>
|
#include <scwx/qt/main/versions.hpp>
|
||||||
#include <scwx/qt/manager/resource_manager.hpp>
|
#include <scwx/qt/manager/font_manager.hpp>
|
||||||
|
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
#include <QFontDatabase>
|
#include <QFontDatabase>
|
||||||
|
|
@ -30,7 +30,7 @@ UpdateDialog::UpdateDialog(QWidget* parent) :
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
int titleFontId =
|
int titleFontId =
|
||||||
manager::ResourceManager::FontId(types::Font::din1451alt_g);
|
manager::FontManager::Instance().GetFontId(types::Font::din1451alt_g);
|
||||||
QString titleFontFamily =
|
QString titleFontFamily =
|
||||||
QFontDatabase::applicationFontFamilies(titleFontId).at(0);
|
QFontDatabase::applicationFontFamilies(titleFontId).at(0);
|
||||||
QFont titleFont(titleFontFamily, 12);
|
QFont titleFont(titleFontFamily, 12);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue