From d2f1fef81038b9d18d5370b4ece290f48323ad13 Mon Sep 17 00:00:00 2001 From: reionwong Date: Thu, 14 Oct 2021 23:52:46 +0800 Subject: [PATCH] Follow system font size --- src/AboutDialog.qml | 0 src/controls/AboutDialog.qml | 39 ++++++++++++++++++++++++++++++++---- src/controls/Theme.qml | 2 ++ src/controls/Window.qml | 2 +- src/controls/qmldir | 3 ++- src/fish-style/Button.qml | 3 +-- src/fish-style/Label.qml | 2 +- src/fish-style/style.qrc | 1 + src/fishui.cpp | 1 + src/fishui.qrc | 1 + src/thememanager.cpp | 17 ++++++++++++++++ src/thememanager.h | 6 ++++++ 12 files changed, 68 insertions(+), 9 deletions(-) delete mode 100644 src/AboutDialog.qml diff --git a/src/AboutDialog.qml b/src/AboutDialog.qml deleted file mode 100644 index e69de29..0000000 diff --git a/src/controls/AboutDialog.qml b/src/controls/AboutDialog.qml index 1d8cbdd..c52af33 100644 --- a/src/controls/AboutDialog.qml +++ b/src/controls/AboutDialog.qml @@ -4,17 +4,48 @@ import QtQuick.Layouts 1.12 import QtGraphicalEffects 1.0 import FishUI 1.0 as FishUI -Dialog { +FishUI.Window { id: control - width: 500 - height: 430 + width: 300 + height: 300 + + modality: Qt.WindowModal + + visible: false + + property var iconSource + property string name + property string description ColumnLayout { anchors.fill: parent + anchors.topMargin: FishUI.Units.largeSpacing * 2 + + Image { + width: 64 + height: 64 + source: control.iconSource + sourceSize: Qt.size(64, 64) + Layout.alignment: Qt.AlignHCenter + } + + Item { + height: FishUI.Units.largeSpacing * 2 + } + + Label { + text: control.name + Layout.alignment: Qt.AlignHCenter + } Label { - text: "hello" + text: control.description + Layout.alignment: Qt.AlignHCenter + } + + Item { + Layout.fillHeight: true } } } diff --git a/src/controls/Theme.qml b/src/controls/Theme.qml index d42d75a..75b5458 100644 --- a/src/controls/Theme.qml +++ b/src/controls/Theme.qml @@ -55,6 +55,8 @@ QtObject { property color visitedLinkColor: "#2196F3" property color visitedLinkBackgroundColor: "#2196F3" + property real fontSize: FishUICore.ThemeManager.fontSize + property real smallRadius: 8.0 property real mediumRadius: 10.0 property real bigRadius: 12.0 diff --git a/src/controls/Window.qml b/src/controls/Window.qml index 3930dfa..b683685 100644 --- a/src/controls/Window.qml +++ b/src/controls/Window.qml @@ -48,7 +48,7 @@ Window { // Other property bool isMaximized: control.visibility === Window.Maximized property bool isFullScreen: control.visibility === Window.FullScreen - property var edgeSize: windowRadius / 2 + property var edgeSize: windowRadius <= 0 ? 8 : windowRadius / 2 onHeaderItemChanged: { if (headerItem) { diff --git a/src/controls/qmldir b/src/controls/qmldir index ac5d1b1..5329761 100644 --- a/src/controls/qmldir +++ b/src/controls/qmldir @@ -12,7 +12,8 @@ typeinfo plugins.qmltypes singleton Theme 1.0 Theme.qml singleton Units 1.0 Units.qml -ActionTextField 1.0 ActionTextField +AboutDialog 1.0 AboutDialog.qml +ActionTextField 1.0 ActionTextField.qml BusyIndicator 1.0 BusyIndicator.qml DesktopMenu 1.0 DesktopMenu.qml Dialog 1.0 Dialog.qml diff --git a/src/fish-style/Button.qml b/src/fish-style/Button.qml index eaac97e..67d14d8 100644 --- a/src/fish-style/Button.qml +++ b/src/fish-style/Button.qml @@ -3,8 +3,7 @@ import QtQuick.Templates 2.4 as T import FishUI 1.0 as FishUI import QtQuick.Controls.impl 2.4 -T.Button -{ +T.Button { id: control implicitWidth: Math.max(background.implicitWidth, contentItem.implicitWidth + FishUI.Units.largeSpacing) implicitHeight: background.implicitHeight diff --git a/src/fish-style/Label.qml b/src/fish-style/Label.qml index 84b381d..b9ebb2d 100644 --- a/src/fish-style/Label.qml +++ b/src/fish-style/Label.qml @@ -16,7 +16,7 @@ T.Label { font.family: FishUI.Theme.defaultFont.family font.italic: FishUI.Theme.defaultFont.italic font.letterSpacing: FishUI.Theme.defaultFont.letterSpacing - font.pointSize: FishUI.Theme.defaultFont.pointSize + font.pointSize: FishUI.Theme.fontSize font.strikeout: FishUI.Theme.defaultFont.strikeout font.underline: FishUI.Theme.defaultFont.underline font.weight: FishUI.Theme.defaultFont.weight diff --git a/src/fish-style/style.qrc b/src/fish-style/style.qrc index e46849a..7144c38 100644 --- a/src/fish-style/style.qrc +++ b/src/fish-style/style.qrc @@ -6,6 +6,7 @@ CheckIndicator.qml ComboBox.qml Control.qml + Label.qml Menu.qml MenuItem.qml Page.qml diff --git a/src/fishui.cpp b/src/fishui.cpp index 9117046..ed7d6d4 100644 --- a/src/fishui.cpp +++ b/src/fishui.cpp @@ -63,6 +63,7 @@ void FishUI::registerTypes(const char *uri) qmlRegisterSingletonType(componentUrl(QStringLiteral("Theme.qml")), uri, 1, 0, "Theme"); qmlRegisterSingletonType(componentUrl(QStringLiteral("Units.qml")), uri, 1, 0, "Units"); + qmlRegisterType(componentUrl(QStringLiteral("AboutDialog.qml")), uri, 1, 0, "AboutDialog"); qmlRegisterType(componentUrl(QStringLiteral("ActionTextField.qml")), uri, 1, 0, "ActionTextField"); qmlRegisterType(componentUrl(QStringLiteral("BusyIndicator.qml")), uri, 1, 0, "BusyIndicator"); qmlRegisterType(componentUrl(QStringLiteral("Icon.qml")), uri, 1, 0, "Icon"); diff --git a/src/fishui.qrc b/src/fishui.qrc index d51fbb0..b07aaa5 100644 --- a/src/fishui.qrc +++ b/src/fishui.qrc @@ -1,5 +1,6 @@ + controls/AboutDialog.qml controls/BusyIndicator.qml controls/Icon.qml controls/PopupTips.qml diff --git a/src/thememanager.cpp b/src/thememanager.cpp index 6537959..514aa4b 100644 --- a/src/thememanager.cpp +++ b/src/thememanager.cpp @@ -35,6 +35,7 @@ ThemeManager::ThemeManager(QObject *parent) , m_darkMode(false) , m_accentColorIndex(-1) , m_accentColor(m_blueColor) // The default is blue + , m_fontSize(9.0) { QDBusServiceWatcher *serviceWatcher = new QDBusServiceWatcher(Service, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForRegistration); @@ -61,6 +62,9 @@ void ThemeManager::initData() int accentColorID = iface.property("accentColor").toInt(); setAccentColor(accentColorID); + m_fontSize = iface.property("systemFontPointSize").toReal(); + emit fontSizeChanged(); + emit darkModeChanged(); } } @@ -74,6 +78,8 @@ void ThemeManager::initDBusSignals() this, SLOT(onDBusDarkModeChanged(bool))); QDBusConnection::sessionBus().connect(Service, ObjectPath, Interface, "accentColorChanged", this, SLOT(onDBusAccentColorChanged(int))); + QDBusConnection::sessionBus().connect(Service, ObjectPath, Interface, "systemFontPointSizeChanged", + this, SLOT(onDBusFontSizeChanged())); } } @@ -90,6 +96,17 @@ void ThemeManager::onDBusAccentColorChanged(int accentColorID) setAccentColor(accentColorID); } +void ThemeManager::onDBusFontSizeChanged() +{ + QDBusInterface iface(Service, ObjectPath, Interface, QDBusConnection::sessionBus(), this); + + qreal size = iface.property("systemFontPointSize").toReal(); + if (size != m_fontSize) { + m_fontSize = size; + emit fontSizeChanged(); + } +} + void ThemeManager::setAccentColor(int accentColorID) { if (m_accentColorIndex == accentColorID) diff --git a/src/thememanager.h b/src/thememanager.h index 131ef1e..46c019d 100644 --- a/src/thememanager.h +++ b/src/thememanager.h @@ -45,6 +45,7 @@ class ThemeManager : public QObject Q_PROPERTY(QColor orangeColor READ orangeColor CONSTANT) Q_PROPERTY(QColor greyColor READ greyColor CONSTANT) Q_PROPERTY(qreal devicePixelRatio READ devicePixelRatio CONSTANT) + Q_PROPERTY(qreal fontSize READ fontSize NOTIFY fontSizeChanged) public: explicit ThemeManager(QObject *parent = nullptr); @@ -54,6 +55,8 @@ public: bool darkMode() { return m_darkMode; } QColor accentColor() { return m_accentColor; } + qreal fontSize() { return m_fontSize; } + QColor blueColor() { return m_blueColor; } QColor redColor() { return m_redColor; } QColor greenColor() { return m_greenColor; } @@ -65,12 +68,14 @@ public: signals: void darkModeChanged(); void accentColorChanged(); + void fontSizeChanged(); private slots: void initData(); void initDBusSignals(); void onDBusDarkModeChanged(bool darkMode); void onDBusAccentColorChanged(int accentColorID); + void onDBusFontSizeChanged(); private: void setAccentColor(int accentColorID); @@ -88,6 +93,7 @@ private: QColor m_greyColor = QColor(79, 89, 107); // #4F596B QColor m_accentColor; + qreal m_fontSize; }; #endif // THEMEMANAGER_H