aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/src/moapplication.cpp19
-rw-r--r--src/src/moapplication.h1
-rw-r--r--src/src/settings.cpp10
-rw-r--r--src/src/settings.h5
-rw-r--r--src/src/settingsdialog.ui28
-rw-r--r--src/src/settingsdialogtheme.cpp78
-rw-r--r--src/src/settingsdialogtheme.h12
7 files changed, 119 insertions, 34 deletions
diff --git a/src/src/moapplication.cpp b/src/src/moapplication.cpp
index 9fea4ef..d7262b7 100644
--- a/src/src/moapplication.cpp
+++ b/src/src/moapplication.cpp
@@ -137,7 +137,7 @@ void addLinuxLibrariesToPath()
env::prependToPath(libsPath);
}
-void configureApplicationFont()
+QString configureApplicationFont()
{
const QDir fontDir(QCoreApplication::applicationDirPath() + "/fonts");
const QStringList bundledFonts{
@@ -165,6 +165,8 @@ void configureApplicationFont()
font.setFamily(uiFamily);
QApplication::setFont(font);
}
+
+ return uiFamily;
}
#ifdef MO2_WEBENGINE
@@ -237,7 +239,7 @@ void configureQtWebEngineProcessPath()
MOApplication::MOApplication(int& argc, char** argv) : QApplication(argc, argv)
{
TimeThis const tt("MOApplication()");
- configureApplicationFont();
+ m_defaultFontFamily = configureApplicationFont();
// Ensure the app name is always "ModOrganizer" regardless of the binary
// filename (settings/profile lookups key off this).
@@ -759,6 +761,12 @@ bool MOApplication::setStyleFile(const QString& styleName)
} else {
setStyle(new ProxyStyle(QStyleFactory::create(m_defaultStyle)));
setStyleSheet("");
+
+ const QString fontFamily =
+ m_settings != nullptr ? m_settings->interface().fontFamily() : QString();
+ QFont appFont = QApplication::font();
+ appFont.setFamily(!fontFamily.isEmpty() ? fontFamily : m_defaultFontFamily);
+ QApplication::setFont(appFont);
}
return true;
}
@@ -1049,6 +1057,13 @@ void MOApplication::updateStyle(const QString& fileName)
log::warn("invalid stylesheet: {}", fileName);
}
}
+
+ // Apply user's font family override (or fall back to bundled DejaVu Sans)
+ const QString fontFamily =
+ m_settings != nullptr ? m_settings->interface().fontFamily() : QString();
+ QFont appFont = QApplication::font();
+ appFont.setFamily(!fontFamily.isEmpty() ? fontFamily : m_defaultFontFamily);
+ QApplication::setFont(appFont);
}
MOSplash::MOSplash(const Settings& settings, const QString& dataPath,
diff --git a/src/src/moapplication.h b/src/src/moapplication.h
index 8487a80..85e7fbc 100644
--- a/src/src/moapplication.h
+++ b/src/src/moapplication.h
@@ -79,6 +79,7 @@ private slots:
private:
QFileSystemWatcher m_styleWatcher;
QString m_defaultStyle;
+ QString m_defaultFontFamily;
std::unique_ptr<env::ModuleNotification> m_modules;
std::unique_ptr<Instance> m_instance;
diff --git a/src/src/settings.cpp b/src/src/settings.cpp
index df4275d..d9a7417 100644
--- a/src/src/settings.cpp
+++ b/src/src/settings.cpp
@@ -2142,6 +2142,16 @@ void InterfaceSettings::setQssFontSize(int size)
set(m_Settings, "Settings", "qss_font_size", size);
}
+QString InterfaceSettings::fontFamily() const
+{
+ return get<QString>(m_Settings, "Settings", "font_family", "");
+}
+
+void InterfaceSettings::setFontFamily(const QString& family)
+{
+ set(m_Settings, "Settings", "font_family", family);
+}
+
bool InterfaceSettings::collapsibleSeparators(Qt::SortOrder order) const
{
return get<bool>(m_Settings, "Settings",
diff --git a/src/src/settings.h b/src/src/settings.h
index 68a668e..4a1ff71 100644
--- a/src/src/settings.h
+++ b/src/src/settings.h
@@ -595,6 +595,11 @@ public:
int qssFontSize() const;
void setQssFontSize(int size);
+ // UI font family override; empty means use the bundled DejaVu Sans
+ //
+ QString fontFamily() const;
+ void setFontFamily(const QString& family);
+
// whether to use collapsible separators when possible
//
bool collapsibleSeparators(Qt::SortOrder order) const;
diff --git a/src/src/settingsdialog.ui b/src/src/settingsdialog.ui
index 833a23e..a461c8e 100644
--- a/src/src/settingsdialog.ui
+++ b/src/src/settingsdialog.ui
@@ -464,10 +464,30 @@
<property name="maximum">
<number>48</number>
</property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_5">
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="fontFamilyLabel">
+ <property name="text">
+ <string>Font</string>
+ </property>
+ <property name="buddy">
+ <cstring>fontFamilyCombo</cstring>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="fontFamilyCombo">
+ <property name="minimumContentsLength">
+ <number>20</number>
+ </property>
+ <property name="toolTip">
+ <string>UI font family. Default uses the bundled DejaVu Sans font.</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
diff --git a/src/src/settingsdialogtheme.cpp b/src/src/settingsdialogtheme.cpp
index 205789a..2665298 100644
--- a/src/src/settingsdialogtheme.cpp
+++ b/src/src/settingsdialogtheme.cpp
@@ -7,6 +7,8 @@
#include "ui_settingsdialog.h"
#include "fluorinepaths.h"
+#include <QFontDatabase>
+
#include <questionboxmemory.h>
#include <utility.h>
@@ -14,12 +16,14 @@ using namespace MOBase;
ThemeSettingsTab::ThemeSettingsTab(Settings& s, SettingsDialog& d) : SettingsTab(s, d)
{
- // style
- addStyles();
- selectStyle();
- selectQssFontSize();
+ // style
+ addStyles();
+ selectStyle();
+ selectQssFontSize();
+ populateFontFamilies();
+ selectFontFamily();
- // colors
+ // colors
ui->colorTable->load(s);
QObject::connect(ui->resetColorsBtn, &QPushButton::clicked, [&] {
@@ -37,19 +41,27 @@ void ThemeSettingsTab::update()
const QString oldStyle = settings().interface().styleName().value_or("");
const QString newStyle =
ui->styleBox->itemData(ui->styleBox->currentIndex()).toString();
- const int oldQssFontSize = settings().interface().qssFontSize();
- const int newQssFontSize = ui->qssFontSizeSpinBox->value();
-
- if (oldStyle != newStyle) {
- settings().interface().setStyleName(newStyle);
- }
-
- if (oldQssFontSize != newQssFontSize) {
- settings().interface().setQssFontSize(newQssFontSize);
- }
-
- if (oldStyle != newStyle || oldQssFontSize != newQssFontSize) {
- emit settings().styleChanged(newStyle);
+ const int oldQssFontSize = settings().interface().qssFontSize();
+ const int newQssFontSize = ui->qssFontSizeSpinBox->value();
+ const QString oldFontFamily = settings().interface().fontFamily();
+ const QString newFontFamily =
+ ui->fontFamilyCombo->itemData(ui->fontFamilyCombo->currentIndex()).toString();
+
+ if (oldStyle != newStyle) {
+ settings().interface().setStyleName(newStyle);
+ }
+
+ if (oldQssFontSize != newQssFontSize) {
+ settings().interface().setQssFontSize(newQssFontSize);
+ }
+
+ if (oldFontFamily != newFontFamily) {
+ settings().interface().setFontFamily(newFontFamily);
+ }
+
+ if (oldStyle != newStyle || oldQssFontSize != newQssFontSize ||
+ oldFontFamily != newFontFamily) {
+ emit settings().styleChanged(newStyle);
}
// colors
@@ -105,11 +117,31 @@ void ThemeSettingsTab::selectStyle()
}
}
-void ThemeSettingsTab::selectQssFontSize()
-{
- ui->qssFontSizeSpinBox->setValue(settings().interface().qssFontSize());
-}
-
+void ThemeSettingsTab::selectQssFontSize()
+{
+ ui->qssFontSizeSpinBox->setValue(settings().interface().qssFontSize());
+}
+
+void ThemeSettingsTab::populateFontFamilies()
+{
+ ui->fontFamilyCombo->addItem("Default (DejaVu Sans)", QString());
+
+ QStringList families = QFontDatabase::families();
+ families.sort();
+ for (const QString& family : families) {
+ ui->fontFamilyCombo->addItem(family, family);
+ }
+}
+
+void ThemeSettingsTab::selectFontFamily()
+{
+ const QString family = settings().interface().fontFamily();
+ const int idx = ui->fontFamilyCombo->findData(family);
+ if (idx != -1) {
+ ui->fontFamilyCombo->setCurrentIndex(idx);
+ }
+}
+
void ThemeSettingsTab::onExploreStyles()
{
// Open the instance's stylesheets directory (where custom themes from
diff --git a/src/src/settingsdialogtheme.h b/src/src/settingsdialogtheme.h
index 2e22b0b..538ea36 100644
--- a/src/src/settingsdialogtheme.h
+++ b/src/src/settingsdialogtheme.h
@@ -13,11 +13,13 @@ public:
void update() override;
-private:
- void addStyles();
- void selectStyle();
- void selectQssFontSize();
- static void onExploreStyles();
+private:
+ void addStyles();
+ void selectStyle();
+ void selectQssFontSize();
+ void populateFontFamilies();
+ void selectFontFamily();
+ static void onExploreStyles();
};
#endif // SETTINGSDIALOGGENERAL_H