summary refs log tree commit diff
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-10-01 17:56:46 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-10-01 17:56:46 +0300
commit3a57d1018ef284de7bb6ece2ac8dc799479c369c (patch)
tree099edf49d1e91c8bd91c56cae69f49735cef5aef
parentEnable debug logs (diff)
downloadnheko-3a57d1018ef284de7bb6ece2ac8dc799479c369c.tar.xz
Add option to configure the font size
fixes #161
-rw-r--r--src/UserInfoWidget.cpp21
-rw-r--r--src/UserSettingsPage.cpp65
-rw-r--r--src/UserSettingsPage.h12
-rw-r--r--src/Utils.cpp12
-rw-r--r--src/Utils.h5
-rw-r--r--src/main.cpp9
6 files changed, 68 insertions, 56 deletions
diff --git a/src/UserInfoWidget.cpp b/src/UserInfoWidget.cpp
index d62cea22..0c8a3114 100644
--- a/src/UserInfoWidget.cpp
+++ b/src/UserInfoWidget.cpp
@@ -17,6 +17,8 @@
 
 #include <QTimer>
 
+#include <iostream>
+
 #include "Config.h"
 #include "MainWindow.h"
 #include "UserInfoWidget.h"
@@ -28,26 +30,31 @@ UserInfoWidget::UserInfoWidget(QWidget *parent)
   : QWidget(parent)
   , display_name_("User")
   , user_id_("@user:homeserver.org")
-  , logoutButtonSize_{20}
 {
-        setFixedHeight(56);
+        const int fontHeight    = QFontMetrics(font()).height();
+        const int widgetMargin  = fontHeight / 3;
+        const int contentHeight = fontHeight * 3;
+
+        logoutButtonSize_ = fontHeight + (fontHeight / 4);
+
+        setFixedHeight(contentHeight + widgetMargin * 2);
 
         topLayout_ = new QHBoxLayout(this);
         topLayout_->setSpacing(0);
-        topLayout_->setMargin(5);
+        topLayout_->setMargin(widgetMargin);
 
         avatarLayout_ = new QHBoxLayout();
         textLayout_   = new QVBoxLayout();
-        textLayout_->setSpacing(2);
-        textLayout_->setContentsMargins(10, 5, 10, 5);
+        textLayout_->setSpacing(0);
+        textLayout_->setContentsMargins(
+          widgetMargin * 2, widgetMargin, widgetMargin * 2, widgetMargin);
 
         userAvatar_ = new Avatar(this);
         userAvatar_->setObjectName("userAvatar");
         userAvatar_->setLetter(QChar('?'));
-        userAvatar_->setSize(45);
+        userAvatar_->setSize(fontHeight * 2.5);
 
         QFont nameFont;
-        nameFont.setPointSizeF(nameFont.pointSizeF() * 1.2);
         nameFont.setWeight(QFont::Medium);
 
         displayNameLabel_ = new QLabel(this);
diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp
index 9245702e..2481260e 100644
--- a/src/UserSettingsPage.cpp
+++ b/src/UserSettingsPage.cpp
@@ -51,6 +51,8 @@ UserSettings::load()
         isReadReceiptsEnabled_        = settings.value("user/read_receipts", true).toBool();
         theme_                        = settings.value("user/theme", "light").toString();
 
+        baseFontSize_ = settings.value("user/font_size", QFont().pointSizeF()).toDouble();
+
         applyTheme();
 }
 
@@ -92,6 +94,7 @@ UserSettings::save()
         settings.setValue("start_in_tray", isStartInTrayEnabled_);
         settings.endGroup();
 
+        settings.setValue("font_size", baseFontSize_);
         settings.setValue("room_ordering", isOrderingEnabled_);
         settings.setValue("typing_notifications", isTypingNotificationsEnabled_);
         settings.setValue("read_receipts", isReadReceiptsEnabled_);
@@ -214,8 +217,16 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
         scaleFactorCombo_->addItem("2.75");
         scaleFactorCombo_->addItem("3");
 
-        scaleFactorOptionLayout->addWidget(scaleFactorLabel);
-        scaleFactorOptionLayout->addWidget(scaleFactorCombo_, 0, Qt::AlignRight);
+        auto fontSizeOptionLayout = new QHBoxLayout;
+        fontSizeOptionLayout->setContentsMargins(0, OptionMargin, 0, OptionMargin);
+        auto fontSizeLabel = new QLabel(tr("Font size"), this);
+        fontSizeLabel->setFont(font);
+        fontSizeCombo_ = new QComboBox(this);
+        for (double option = 10; option < 17; option += 0.5)
+                fontSizeCombo_->addItem(QString("%1 ").arg(QString::number(option)));
+
+        fontSizeOptionLayout->addWidget(fontSizeLabel);
+        fontSizeOptionLayout->addWidget(fontSizeCombo_, 0, Qt::AlignRight);
 
         auto themeOptionLayout_ = new QHBoxLayout;
         themeOptionLayout_->setContentsMargins(0, OptionMargin, 0, OptionMargin);
@@ -316,9 +327,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
         scaleFactorCombo_->hide();
 #else
         mainLayout_->addLayout(scaleFactorOptionLayout);
-        mainLayout_->addWidget(new HorizontalLine(this));
 #endif
 
+        mainLayout_->addLayout(fontSizeOptionLayout);
+        mainLayout_->addWidget(new HorizontalLine(this));
         mainLayout_->addLayout(themeOptionLayout_);
         mainLayout_->addWidget(new HorizontalLine(this));
 
@@ -351,6 +363,9 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
         connect(scaleFactorCombo_,
                 static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated),
                 [](const QString &factor) { utils::setScaleFactor(factor.toFloat()); });
+        connect(fontSizeCombo_,
+                static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated),
+                [this](const QString &size) { settings_->setFontSize(size.trimmed().toDouble()); });
 
         connect(trayToggle_, &Toggle::toggled, this, [this](bool isDisabled) {
                 settings_->setTray(!isDisabled);
@@ -395,8 +410,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
 void
 UserSettingsPage::showEvent(QShowEvent *)
 {
-        restoreThemeCombo();
-        restoreScaleFactor();
+        // FIXME macOS doesn't show the full option unless a space is added.
+        utils::restoreCombobox(fontSizeCombo_, QString::number(settings_->fontSize()) + " ");
+        utils::restoreCombobox(scaleFactorCombo_, QString::number(utils::scaleFactor()));
+        utils::restoreCombobox(themeCombo_, settings_->theme());
 
         // FIXME: Toggle treats true as "off"
         trayToggle_->setState(!settings_->isTrayEnabled());
@@ -432,44 +449,6 @@ UserSettingsPage::paintEvent(QPaintEvent *)
 }
 
 void
-UserSettingsPage::restoreScaleFactor() const
-{
-        auto factor = utils::scaleFactor();
-
-        if (factor == 1)
-                scaleFactorCombo_->setCurrentIndex(0);
-        else if (factor == 1.25)
-                scaleFactorCombo_->setCurrentIndex(1);
-        else if (factor == 1.5)
-                scaleFactorCombo_->setCurrentIndex(2);
-        else if (factor == 1.75)
-                scaleFactorCombo_->setCurrentIndex(3);
-        else if (factor == 2)
-                scaleFactorCombo_->setCurrentIndex(4);
-        else if (factor == 2.25)
-                scaleFactorCombo_->setCurrentIndex(5);
-        else if (factor == 2.5)
-                scaleFactorCombo_->setCurrentIndex(6);
-        else if (factor == 2.75)
-                scaleFactorCombo_->setCurrentIndex(7);
-        else if (factor == 3)
-                scaleFactorCombo_->setCurrentIndex(7);
-        else
-                scaleFactorCombo_->setCurrentIndex(0);
-}
-
-void
-UserSettingsPage::restoreThemeCombo() const
-{
-        if (settings_->theme() == "light")
-                themeCombo_->setCurrentIndex(0);
-        else if (settings_->theme() == "dark")
-                themeCombo_->setCurrentIndex(1);
-        else
-                themeCombo_->setCurrentIndex(2);
-}
-
-void
 UserSettingsPage::importSessionKeys()
 {
         auto fileName = QFileDialog::getOpenFileName(this, tr("Open Sessions File"), "", "");
diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h
index 501e76d9..59a6518c 100644
--- a/src/UserSettingsPage.h
+++ b/src/UserSettingsPage.h
@@ -53,6 +53,12 @@ public:
                 save();
         }
 
+        void setFontSize(double size)
+        {
+                baseFontSize_ = size;
+                save();
+        }
+
         void setRoomOrdering(bool state)
         {
                 isOrderingEnabled_ = state;
@@ -94,6 +100,7 @@ public:
         bool isTypingNotificationsEnabled() const { return isTypingNotificationsEnabled_; }
         bool isReadReceiptsEnabled() const { return isReadReceiptsEnabled_; }
         bool hasDesktopNotifications() const { return hasDesktopNotifications_; }
+        double fontSize() const { return baseFontSize_; }
 
 signals:
         void groupViewStateChanged(bool state);
@@ -107,6 +114,7 @@ private:
         bool isTypingNotificationsEnabled_;
         bool isReadReceiptsEnabled_;
         bool hasDesktopNotifications_;
+        double baseFontSize_;
 };
 
 class HorizontalLine : public QFrame
@@ -138,9 +146,6 @@ private slots:
         void exportSessionKeys();
 
 private:
-        void restoreThemeCombo() const;
-        void restoreScaleFactor() const;
-
         // Layouts
         QVBoxLayout *topLayout_;
         QVBoxLayout *mainLayout_;
@@ -161,6 +166,7 @@ private:
 
         QComboBox *themeCombo_;
         QComboBox *scaleFactorCombo_;
+        QComboBox *fontSizeCombo_;
 
         int sideMargin_ = 0;
 };
diff --git a/src/Utils.cpp b/src/Utils.cpp
index 8ee6d5ae..567e7651 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -1,6 +1,7 @@
 #include "Utils.h"
 
 #include <QApplication>
+#include <QComboBox>
 #include <QDesktopWidget>
 #include <QSettings>
 #include <QTextDocument>
@@ -400,3 +401,14 @@ utils::centerWidget(QWidget *widget, QWidget *parent)
 
         widget->move(findCenter(QApplication::desktop()->screenGeometry()));
 }
+
+void
+utils::restoreCombobox(QComboBox *combo, const QString &value)
+{
+        for (auto i = 0; i < combo->count(); ++i) {
+                if (value == combo->itemText(i)) {
+                        combo->setCurrentIndex(i);
+                        break;
+                }
+        }
+}
diff --git a/src/Utils.h b/src/Utils.h
index bb032a1c..47754604 100644
--- a/src/Utils.h
+++ b/src/Utils.h
@@ -14,6 +14,8 @@
 #include <mtx/events/collections.hpp>
 #include <mtx/events/common.hpp>
 
+class QComboBox;
+
 namespace utils {
 
 using TimelineEvent = mtx::events::collections::TimelineEvents;
@@ -228,4 +230,7 @@ linkColor();
 //! Center a widget in relation to another widget.
 void
 centerWidget(QWidget *widget, QWidget *parent);
+
+void
+restoreCombobox(QComboBox *combo, const QString &value);
 }
diff --git a/src/main.cpp b/src/main.cpp
index 3e33c198..8556f8cb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -150,7 +150,12 @@ main(int argc, char *argv[])
                 std::exit(1);
         }
 
-        app.setFont(QFont("Open Sans"));
+        QSettings settings;
+
+        QFont font("Open Sans");
+        font.setPointSizeF(settings.value("user/font_size", font.pointSizeF()).toDouble());
+
+        app.setFont(font);
 
         QString lang = QLocale::system().name();
 
@@ -167,8 +172,6 @@ main(int argc, char *argv[])
         // Move the MainWindow to the center
         w.move(screenCenter(w.width(), w.height()));
 
-        QSettings settings;
-
         if (!settings.value("user/window/start_in_tray", false).toBool() ||
             !settings.value("user/window/tray", true).toBool())
                 w.show();