diff --git a/src/librssguard/miscellaneous/skinfactory.cpp b/src/librssguard/miscellaneous/skinfactory.cpp index 2df85b7a6..4b7ff28fc 100644 --- a/src/librssguard/miscellaneous/skinfactory.cpp +++ b/src/librssguard/miscellaneous/skinfactory.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -57,6 +58,25 @@ void SkinFactory::loadSkinFromData(const Skin& skin) { const QString env_forced_style = env.value(QSL("QT_STYLE_OVERRIDE")); const QString cli_forced_style = qApp->cmdParser()->value(QSL(CLI_STYLE_SHORT)); + // Load fonts. + QDir dr_fonts(skin.m_skinFolder + QDir::separator() + QSL("fonts")); + + if (dr_fonts.exists()) { + QStringList ttf_fonts = + dr_fonts.entryList({QSL("*.ttf"), QSL("*.otf")}, QDir::Filter::Files | QDir::Filter::Readable); + + for (const QString& font_file : ttf_fonts) { + bool added = QFontDatabase::addApplicationFont(dr_fonts.absoluteFilePath(font_file)) >= 0; + + if (added) { + qDebugNN << "Adding font" << QUOTE_W_SPACE(font_file) << "to font database."; + } + else { + qCriticalNN << "Font" << QUOTE_W_SPACE(font_file) << "could not be loaded."; + } + } + } + if (env_forced_style.isEmpty() && cli_forced_style.isEmpty()) { m_styleIsFrozen = false; @@ -222,7 +242,6 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const { const QDomNode skin_node = document.namedItem(QSL("skin")); const QString base_skin_name = skin_node.toElement().attribute(QSL("base")); - ; QString real_base_skin_folder; if (!base_skin_name.isEmpty()) { @@ -294,8 +313,6 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const { QDomElement style_palette_root = skin_node.namedItem(QSL("style-palette")).toElement(); if (!style_palette_root.isNull()) { - const QMetaObject& mop = QPalette::staticMetaObject; - QMetaEnum enumerp = QMetaEnum::fromType(); QMetaEnum enumerx = QMetaEnum::fromType(); QMetaEnum enumery = QMetaEnum::fromType(); @@ -359,6 +376,7 @@ Skin SkinFactory::skinInfo(const QString& skin_name, bool* ok) const { loadSkinFile(skin_folder_no_sep, QSL("html_enclosure_every.html"), real_base_skin_folder); skin.m_rawData = loadSkinFile(skin_folder_no_sep, QSL("qt_style.qss"), real_base_skin_folder); skin.m_adblocked = loadSkinFile(skin_folder_no_sep, QSL("html_adblocked.html"), real_base_skin_folder); + skin.m_skinFolder = skin_folder_no_sep; if (ok != nullptr) { *ok = !skin.m_author.isEmpty() && !skin.m_version.isEmpty() && !skin.m_baseName.isEmpty() && diff --git a/src/librssguard/miscellaneous/skinfactory.h b/src/librssguard/miscellaneous/skinfactory.h index fb32fa834..0bc6392b1 100644 --- a/src/librssguard/miscellaneous/skinfactory.h +++ b/src/librssguard/miscellaneous/skinfactory.h @@ -49,6 +49,7 @@ class SkinEnums : public QObject { }; struct RSSGUARD_DLLSPEC Skin { + QString m_skinFolder; QString m_baseName; QString m_visibleName; QString m_author;