diff options
-rw-r--r-- | mobile-widgets/CMakeLists.txt | 1 | ||||
-rw-r--r-- | mobile-widgets/themeinterface.cpp | 73 | ||||
-rw-r--r-- | mobile-widgets/themeinterface.h | 153 | ||||
-rw-r--r-- | packaging/ios/Subsurface-mobile.pro | 2 |
4 files changed, 229 insertions, 0 deletions
diff --git a/mobile-widgets/CMakeLists.txt b/mobile-widgets/CMakeLists.txt index 6c1747dbc..9f5ddaf47 100644 --- a/mobile-widgets/CMakeLists.txt +++ b/mobile-widgets/CMakeLists.txt @@ -3,6 +3,7 @@ set(SUBSURFACE_MOBILE_SRCS qmlinterface.cpp qmlmanager.cpp + themeinterface.cpp qml/kirigami/src/columnview.cpp qml/kirigami/src/delegaterecycler.cpp qml/kirigami/src/enums.cpp diff --git a/mobile-widgets/themeinterface.cpp b/mobile-widgets/themeinterface.cpp new file mode 100644 index 000000000..9f2e842ee --- /dev/null +++ b/mobile-widgets/themeinterface.cpp @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "themeinterface.h" +#include "core/settings/qPrefDisplay.h" + +themeInterface *themeInterface::instance() +{ + static themeInterface *self = new themeInterface; + return self; +} + +void themeInterface::setup() +{ + // get current theme + m_currentTheme = qPrefDisplay::theme(); + update_theme(); +} + +void themeInterface::set_currentTheme(const QString &theme) +{ + m_currentTheme = theme; + qPrefDisplay::set_theme(m_currentTheme); + update_theme(); + emit currentThemeChanged(theme); +} + +void themeInterface::update_theme() +{ + if (m_currentTheme == "Blue") { + m_backgroundColor = m_blueBackgroundColor; + m_contrastAccentColor = m_blueContrastAccentColor; + m_darkerPrimaryColor = m_blueDarkerPrimaryColor; + m_darkerPrimaryTextColor = m_blueDarkerPrimaryTextColor; + m_drawerColor = m_blueDrawerColor; + m_lightDrawerColor = m_blueDrawerColor; + m_lightPrimaryColor = m_blueLightPrimaryColor; + m_lightPrimaryTextColor = m_blueLightPrimaryTextColor; + m_primaryColor = m_bluePrimaryColor; + m_primaryTextColor = m_bluePrimaryTextColor; + m_secondaryTextColor = m_blueSecondaryTextColor; + m_textColor = m_blueTextColor; + m_iconStyle = ":/icons"; + } else if (m_currentTheme == "Pink") { + m_backgroundColor = m_pinkBackgroundColor; + m_contrastAccentColor = m_pinkContrastAccentColor; + m_darkerPrimaryColor = m_pinkDarkerPrimaryColor; + m_darkerPrimaryTextColor = m_pinkDarkerPrimaryTextColor; + m_drawerColor = m_pinkDrawerColor; + m_lightDrawerColor = m_pinkDrawerColor; + m_lightPrimaryColor = m_pinkLightPrimaryColor; + m_lightPrimaryTextColor = m_pinkLightPrimaryTextColor; + m_primaryColor = m_pinkPrimaryColor; + m_primaryTextColor = m_pinkPrimaryTextColor; + m_secondaryTextColor = m_pinkSecondaryTextColor; + m_textColor = m_pinkTextColor; + m_iconStyle = ":/icons"; + } else { + m_backgroundColor = m_darkBackgroundColor; + m_contrastAccentColor = m_darkContrastAccentColor; + m_darkerPrimaryColor = m_darkDarkerPrimaryColor; + m_darkerPrimaryTextColor = m_darkDarkerPrimaryTextColor; + m_drawerColor = m_darkDrawerColor; + m_lightDrawerColor = m_darkDrawerColor; + m_lightPrimaryColor = m_darkLightPrimaryColor; + m_lightPrimaryTextColor = m_darkLightPrimaryTextColor; + m_primaryColor = m_darkPrimaryColor; + m_primaryTextColor = m_darkPrimaryTextColor; + m_secondaryTextColor = m_darkSecondaryTextColor; + m_textColor = m_darkTextColor; + m_iconStyle = ":/icons-dark"; + } +} + + diff --git a/mobile-widgets/themeinterface.h b/mobile-widgets/themeinterface.h new file mode 100644 index 000000000..9e135538c --- /dev/null +++ b/mobile-widgets/themeinterface.h @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: GPL-2.0 +#ifndef THEMEINTERFACE_H +#define THEMEINTERFACE_H +#include <QObject> +#include <QColor> +#include <QSettings> + +class themeInterface : public QObject { + Q_OBJECT + + // Color themes + Q_PROPERTY(QColor backgroundColor MEMBER m_backgroundColor NOTIFY backgroundColorChanged) + Q_PROPERTY(QColor contrastAccentColor MEMBER m_contrastAccentColor NOTIFY contrastAccentColorChanged) + Q_PROPERTY(QColor darkerPrimaryColor MEMBER m_darkerPrimaryColor NOTIFY darkerPrimaryColorChanged) + Q_PROPERTY(QColor darkerPrimaryTextColor MEMBER m_darkerPrimaryTextColor NOTIFY darkerPrimaryTextColorChanged) + Q_PROPERTY(QColor drawerColor MEMBER m_drawerColor NOTIFY drawerColorChanged) + Q_PROPERTY(QColor lightDrawerColor MEMBER m_lightDrawerColor NOTIFY lightDrawerColorChanged) + Q_PROPERTY(QColor lightPrimaryColor MEMBER m_lightPrimaryColor NOTIFY lightPrimaryColorChanged) + Q_PROPERTY(QColor lightPrimaryTextColor MEMBER m_lightPrimaryTextColor NOTIFY lightPrimaryTextColorChanged) + Q_PROPERTY(QColor primaryColor MEMBER m_primaryColor NOTIFY primaryColorChanged) + Q_PROPERTY(QColor primaryTextColor MEMBER m_primaryTextColor NOTIFY primaryTextColorChanged) + Q_PROPERTY(QColor secondaryTextColor MEMBER m_secondaryTextColor NOTIFY secondaryTextColorChanged) + Q_PROPERTY(QColor textColor MEMBER m_textColor NOTIFY textColorChanged) + + // Support + Q_PROPERTY(QString currentTheme MEMBER m_currentTheme WRITE set_currentTheme NOTIFY currentThemeChanged) + Q_PROPERTY(QString iconStyle MEMBER m_iconStyle CONSTANT) + + // Compatibility existing code + Q_PROPERTY(QColor blueBackgroundColor MEMBER m_blueBackgroundColor CONSTANT) + Q_PROPERTY(QColor blueContrastAccentColor MEMBER m_blueTextColor CONSTANT) + Q_PROPERTY(QColor blueDarkerPrimaryColor MEMBER m_blueDarkerPrimaryColor CONSTANT) + Q_PROPERTY(QColor blueDarkerPrimaryTextColor MEMBER m_blueDarkerPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor blueDrawerColor MEMBER m_blueDrawerColor CONSTANT) + Q_PROPERTY(QColor blueLightDrawerColor MEMBER m_blueLightDrawerColor CONSTANT) + Q_PROPERTY(QColor blueLightPrimaryColor MEMBER m_blueLightPrimaryColor CONSTANT) + Q_PROPERTY(QColor blueLightPrimaryTextColor MEMBER m_blueLightPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor bluePrimaryColor MEMBER m_bluePrimaryColor CONSTANT) + Q_PROPERTY(QColor bluePrimaryTextColor MEMBER m_bluePrimaryTextColor CONSTANT) + Q_PROPERTY(QColor blueSecondaryTextColor MEMBER m_blueSecondaryTextColor CONSTANT) + Q_PROPERTY(QColor blueTextColor MEMBER m_blueTextColor CONSTANT) + + Q_PROPERTY(QColor pinkBackgroundColor MEMBER m_pinkBackgroundColor CONSTANT) + Q_PROPERTY(QColor pinkContrastAccentColor MEMBER m_pinkContrastAccentColor CONSTANT) + Q_PROPERTY(QColor pinkDarkerPrimaryColor MEMBER m_blueDarkerPrimaryColor CONSTANT) + Q_PROPERTY(QColor pinkDarkerPrimaryTextColor MEMBER m_blueDarkerPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor pinkDrawerColor MEMBER m_pinkDrawerColor CONSTANT) + Q_PROPERTY(QColor pinkLightDrawerColor MEMBER m_pinkLightDrawerColor CONSTANT) + Q_PROPERTY(QColor pinkLightPrimaryColor MEMBER m_blueLightPrimaryColor CONSTANT) + Q_PROPERTY(QColor pinkLightPrimaryTextColor MEMBER m_blueLightPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor pinkPrimaryColor MEMBER m_pinkPrimaryColor CONSTANT) + Q_PROPERTY(QColor pinkPrimaryTextColor MEMBER m_pinkPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor pinkSecondaryTextColor MEMBER m_blueSecondaryTextColor CONSTANT) + Q_PROPERTY(QColor pinkTextColor MEMBER m_pinkTextColor CONSTANT) + + Q_PROPERTY(QColor darkBackgroundColor MEMBER m_darkBackgroundColor CONSTANT) + Q_PROPERTY(QColor darkContrastAccentColor MEMBER m_darkContrastAccentColor CONSTANT) + Q_PROPERTY(QColor darkDarkerPrimaryColor MEMBER m_blueDarkerPrimaryColor CONSTANT) + Q_PROPERTY(QColor darkDarkerPrimaryTextColor MEMBER m_blueDarkerPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor darkDrawerColor MEMBER m_drawerColor CONSTANT) + Q_PROPERTY(QColor darkLightDrawerColor MEMBER m_darkLightDrawerColor CONSTANT) + Q_PROPERTY(QColor darkLightPrimaryColor MEMBER m_blueLightPrimaryColor CONSTANT) + Q_PROPERTY(QColor darkLightPrimaryTextColor MEMBER m_blueLightPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor darkPrimaryColor MEMBER m_darkPrimaryColor CONSTANT) + Q_PROPERTY(QColor darkPrimaryTextColor MEMBER m_darkPrimaryTextColor CONSTANT) + Q_PROPERTY(QColor darkSecondaryTextColor MEMBER m_blueSecondaryTextColor CONSTANT) + Q_PROPERTY(QColor darkTextColor MEMBER m_darkTextColor CONSTANT) + +public: + static themeInterface *instance(); + + void setup(); + +public slots: + void set_currentTheme(const QString &theme); + +signals: + void backgroundColorChanged(QColor); + void contrastAccentColorChanged(QColor); + void darkerPrimaryColorChanged(QColor); + void darkerPrimaryTextColorChanged(QColor); + void drawerColorChanged(QColor); + void lightDrawerColorChanged(QColor); + void lightPrimaryColorChanged(QColor); + void lightPrimaryTextColorChanged(QColor); + void primaryColorChanged(QColor); + void primaryTextColorChanged(QColor); + void secondaryTextColorChanged(QColor); + void textColorChanged(QColor); + + void currentThemeChanged(const QString &); + +private: + themeInterface() {} + void update_theme(); + + QColor m_backgroundColor; + QColor m_contrastAccentColor; + QColor m_darkerPrimaryColor; + QColor m_darkerPrimaryTextColor; + QColor m_drawerColor; + QColor m_lightDrawerColor; + QColor m_lightPrimaryColor; + QColor m_lightPrimaryTextColor; + QColor m_primaryColor; + QColor m_primaryTextColor; + QColor m_secondaryTextColor; + QColor m_textColor; + + QString m_currentTheme; + QString m_iconStyle; + + // Compatibility existing code + const QColor m_blueBackgroundColor = "#eff0f1"; + const QColor m_blueContrastAccentColor = "#FF5722"; + const QColor m_blueDarkerPrimaryColor = "#303F9f"; + const QColor m_blueDarkerPrimaryTextColor = "#ECECEC"; + const QColor m_blueDrawerColor = "#FFFFFF"; + const QColor m_blueLightDrawerColor = "#FFFFFF"; + const QColor m_blueLightPrimaryColor = "#C5CAE9"; + const QColor m_blueLightPrimaryTextColor = "#212121"; + const QColor m_bluePrimaryColor = "#3F51B5"; + const QColor m_bluePrimaryTextColor = "#FFFFFF"; + const QColor m_blueSecondaryTextColor = "#757575"; + const QColor m_blueTextColor = "#212121"; + + const QColor m_pinkBackgroundColor = "#eff0f1"; + const QColor m_pinkContrastAccentColor = "#FF5722"; + const QColor m_pinkDarkerPrimaryColor = "#C2185B"; + const QColor m_pinkDarkerPrimaryTextColor = "#ECECEC"; + const QColor m_pinkDrawerColor = "#FFFFFF"; + const QColor m_pinkLightDrawerColor = "#FFFFFF"; + const QColor m_pinkLightPrimaryColor = "#FFDDF4"; + const QColor m_pinkLightPrimaryTextColor = "#212121"; + const QColor m_pinkPrimaryColor = "#FF69B4"; + const QColor m_pinkPrimaryTextColor = "#212121"; + const QColor m_pinkSecondaryTextColor = "#757575"; + const QColor m_pinkTextColor = "#212121"; + + const QColor m_darkBackgroundColor = "#303030"; + const QColor m_darkContrastAccentColor = "#FF5722"; + const QColor m_darkDarkerPrimaryColor = "#303F9f"; + const QColor m_darkDarkerPrimaryTextColor = "#ECECEC"; + const QColor m_darkDrawerColor = "#424242"; + const QColor m_darkLightDrawerColor = "#FFFFFF"; + const QColor m_darkLightPrimaryColor = "#C5CAE9"; + const QColor m_darkLightPrimaryTextColor = "#ECECEC"; + const QColor m_darkPrimaryColor = "#3F51B5"; + const QColor m_darkPrimaryTextColor = "#ECECEC"; + const QColor m_darkSecondaryTextColor = "#757575"; + const QColor m_darkTextColor = "#ECECEC"; +}; +#endif diff --git a/packaging/ios/Subsurface-mobile.pro b/packaging/ios/Subsurface-mobile.pro index afe2e10c5..aafb52549 100644 --- a/packaging/ios/Subsurface-mobile.pro +++ b/packaging/ios/Subsurface-mobile.pro @@ -112,6 +112,7 @@ SOURCES += ../../subsurface-mobile-main.cpp \ ../../backend-shared/plannershared.cpp \ ../../mobile-widgets/qmlinterface.cpp \ ../../mobile-widgets/qmlmanager.cpp \ + ../../mobile-widgets/themeinterface.cpp \ ../../qt-models/divelistmodel.cpp \ ../../qt-models/diveplotdatamodel.cpp \ ../../qt-models/gpslistmodel.cpp \ @@ -245,6 +246,7 @@ HEADERS += \ ../../backend-shared/plannershared.h \ ../../mobile-widgets/qmlinterface.h \ ../../mobile-widgets/qmlmanager.h \ + ../../mobile-widgets/themeinterface.h \ ../../map-widget/qmlmapwidgethelper.h \ ../../qt-models/divelistmodel.h \ ../../qt-models/diveplotdatamodel.h \ |