File indexing completed on 2024-05-05 04:46:57

0001 /*
0002  *  SPDX-FileCopyrightText: 2017 by Marco Martin <mart@kde.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef BASICTHEME_H
0008 #define BASICTHEME_H
0009 
0010 #include "platformtheme.h"
0011 
0012 class ImageColors;
0013 
0014 namespace Maui
0015 {
0016     class BasicTheme;
0017 
0018     class BasicThemeDefinition : public QObject
0019     {
0020         Q_OBJECT
0021 
0022         Q_PROPERTY(QColor textColor MEMBER textColor NOTIFY changed)
0023         Q_PROPERTY(QColor disabledTextColor MEMBER disabledTextColor NOTIFY changed)
0024 
0025         Q_PROPERTY(QColor highlightColor MEMBER highlightColor NOTIFY changed)
0026         Q_PROPERTY(QColor highlightedTextColor MEMBER highlightedTextColor NOTIFY changed)
0027         Q_PROPERTY(QColor backgroundColor MEMBER backgroundColor NOTIFY changed)
0028         Q_PROPERTY(QColor alternateBackgroundColor MEMBER alternateBackgroundColor NOTIFY changed)
0029 
0030         Q_PROPERTY(QColor focusColor MEMBER focusColor NOTIFY changed)
0031         Q_PROPERTY(QColor hoverColor MEMBER hoverColor NOTIFY changed)
0032 
0033         Q_PROPERTY(QColor activeTextColor MEMBER activeTextColor NOTIFY changed)
0034         Q_PROPERTY(QColor activeBackgroundColor MEMBER activeBackgroundColor NOTIFY changed)
0035         Q_PROPERTY(QColor linkColor MEMBER linkColor NOTIFY changed)
0036         Q_PROPERTY(QColor linkBackgroundColor MEMBER linkBackgroundColor NOTIFY changed)
0037         Q_PROPERTY(QColor visitedLinkColor MEMBER visitedLinkColor NOTIFY changed)
0038         Q_PROPERTY(QColor visitedLinkBackgroundColor MEMBER visitedLinkBackgroundColor NOTIFY changed)
0039         Q_PROPERTY(QColor negativeTextColor MEMBER negativeTextColor NOTIFY changed)
0040         Q_PROPERTY(QColor negativeBackgroundColor MEMBER negativeBackgroundColor NOTIFY changed)
0041         Q_PROPERTY(QColor neutralTextColor MEMBER neutralTextColor NOTIFY changed)
0042         Q_PROPERTY(QColor neutralBackgroundColor MEMBER neutralBackgroundColor NOTIFY changed)
0043         Q_PROPERTY(QColor positiveTextColor MEMBER positiveTextColor NOTIFY changed)
0044         Q_PROPERTY(QColor positiveBackgroundColor MEMBER positiveBackgroundColor NOTIFY changed)
0045 
0046         Q_PROPERTY(QColor buttonTextColor MEMBER buttonTextColor NOTIFY changed)
0047         Q_PROPERTY(QColor buttonBackgroundColor MEMBER buttonBackgroundColor NOTIFY changed)
0048         Q_PROPERTY(QColor buttonAlternateBackgroundColor MEMBER buttonAlternateBackgroundColor NOTIFY changed)
0049         Q_PROPERTY(QColor buttonHoverColor MEMBER buttonHoverColor NOTIFY changed)
0050         Q_PROPERTY(QColor buttonFocusColor MEMBER buttonFocusColor NOTIFY changed)
0051 
0052         Q_PROPERTY(QColor viewTextColor MEMBER viewTextColor NOTIFY changed)
0053         Q_PROPERTY(QColor viewBackgroundColor MEMBER viewBackgroundColor NOTIFY changed)
0054         Q_PROPERTY(QColor viewAlternateBackgroundColor MEMBER viewAlternateBackgroundColor NOTIFY changed)
0055         Q_PROPERTY(QColor viewHoverColor MEMBER viewHoverColor NOTIFY changed)
0056         Q_PROPERTY(QColor viewFocusColor MEMBER viewFocusColor NOTIFY changed)
0057 
0058         Q_PROPERTY(QColor selectionTextColor MEMBER selectionTextColor NOTIFY changed)
0059         Q_PROPERTY(QColor selectionBackgroundColor MEMBER selectionBackgroundColor NOTIFY changed)
0060         Q_PROPERTY(QColor selectionAlternateBackgroundColor MEMBER selectionAlternateBackgroundColor NOTIFY changed)
0061         Q_PROPERTY(QColor selectionHoverColor MEMBER selectionHoverColor NOTIFY changed)
0062         Q_PROPERTY(QColor selectionFocusColor MEMBER selectionFocusColor NOTIFY changed)
0063 
0064         Q_PROPERTY(QColor tooltipTextColor MEMBER tooltipTextColor NOTIFY changed)
0065         Q_PROPERTY(QColor tooltipBackgroundColor MEMBER tooltipBackgroundColor NOTIFY changed)
0066         Q_PROPERTY(QColor tooltipAlternateBackgroundColor MEMBER tooltipAlternateBackgroundColor NOTIFY changed)
0067         Q_PROPERTY(QColor tooltipHoverColor MEMBER tooltipHoverColor NOTIFY changed)
0068         Q_PROPERTY(QColor tooltipFocusColor MEMBER tooltipFocusColor NOTIFY changed)
0069 
0070         Q_PROPERTY(QColor complementaryTextColor MEMBER complementaryTextColor NOTIFY changed)
0071         Q_PROPERTY(QColor complementaryBackgroundColor MEMBER complementaryBackgroundColor NOTIFY changed)
0072         Q_PROPERTY(QColor complementaryAlternateBackgroundColor MEMBER complementaryAlternateBackgroundColor NOTIFY changed)
0073         Q_PROPERTY(QColor complementaryHoverColor MEMBER complementaryHoverColor NOTIFY changed)
0074         Q_PROPERTY(QColor complementaryFocusColor MEMBER complementaryFocusColor NOTIFY changed)
0075 
0076         Q_PROPERTY(QColor headerTextColor MEMBER headerTextColor NOTIFY changed)
0077         Q_PROPERTY(QColor headerBackgroundColor MEMBER headerBackgroundColor NOTIFY changed)
0078         Q_PROPERTY(QColor headerAlternateBackgroundColor MEMBER headerAlternateBackgroundColor NOTIFY changed)
0079         Q_PROPERTY(QColor headerHoverColor MEMBER headerHoverColor NOTIFY changed)
0080         Q_PROPERTY(QColor headerFocusColor MEMBER headerFocusColor NOTIFY changed)
0081 
0082 
0083     public:
0084         explicit BasicThemeDefinition(QObject *parent = nullptr);
0085 
0086         virtual void syncToQml(PlatformTheme *object);
0087 
0088         QColor textColor ;
0089         QColor disabledTextColor ;
0090 
0091         QColor highlightColor ;
0092         QColor highlightedTextColor ;
0093         QColor backgroundColor ;
0094         QColor alternateBackgroundColor ;
0095 
0096         QColor focusColor ;
0097         QColor hoverColor;
0098 
0099         QColor activeTextColor;
0100         QColor activeBackgroundColor ;
0101         QColor linkColor;
0102         QColor linkBackgroundColor;
0103         QColor visitedLinkColor;
0104         QColor visitedLinkBackgroundColor;
0105         QColor negativeTextColor ;
0106         QColor negativeBackgroundColor;
0107         QColor neutralTextColor;
0108         QColor neutralBackgroundColor;
0109         QColor positiveTextColor;
0110         QColor positiveBackgroundColor;
0111 
0112         QColor buttonTextColor;
0113         QColor buttonBackgroundColor;
0114         QColor buttonAlternateBackgroundColor;
0115         QColor buttonHoverColor;
0116         QColor buttonFocusColor ;
0117 
0118         QColor viewTextColor;
0119         QColor viewBackgroundColor ;
0120         QColor viewAlternateBackgroundColor;
0121         QColor viewHoverColor;
0122         QColor viewFocusColor;
0123 
0124         QColor selectionTextColor;
0125         QColor selectionBackgroundColor;
0126         QColor selectionAlternateBackgroundColor;
0127         QColor selectionHoverColor;
0128         QColor selectionFocusColor;
0129 
0130         QColor tooltipTextColor;
0131         QColor tooltipBackgroundColor;
0132         QColor tooltipAlternateBackgroundColor;
0133         QColor tooltipHoverColor;
0134         QColor tooltipFocusColor;
0135 
0136         QColor complementaryTextColor;
0137         QColor complementaryBackgroundColor;
0138         QColor complementaryAlternateBackgroundColor;
0139         QColor complementaryHoverColor;
0140         QColor complementaryFocusColor;
0141 
0142         QColor headerTextColor;
0143         QColor headerBackgroundColor;
0144         QColor headerAlternateBackgroundColor;
0145         QColor headerHoverColor;
0146         QColor headerFocusColor;
0147 
0148         Q_SIGNAL void changed();
0149         Q_SIGNAL void sync(QQuickItem *object);
0150 
0151     private:
0152         ImageColors *m_imgColors;
0153         void setDarkColors();
0154         void setTrueBlackColors(bool inverted = false);
0155         void setLightColors();
0156         void setAdaptiveColors();
0157         void setSystemPaletteColors();
0158 
0159         struct LightColor
0160         {
0161             const static inline QColor textColor = QColor{"#31363b"};
0162             const static inline QColor disabledTextColor = QColor{"#83909d"};
0163             const static inline QColor backgroundColor = QColor{"#e8e8e8"};
0164             const static inline QColor alternateBackgroundColor = QColor{"#f0f0f0"};
0165             const static inline QColor hoverColor = QColor{"#dbdbdb"};
0166 
0167             const static inline  QColor buttonBackgroundColor = QColor{"#ffffff"};
0168             const static inline QColor buttonAlternateBackgroundColor = QColor{"#f8f7f7"};
0169             const static inline  QColor buttonHoverColor = QColor{"#f2f2f2"};
0170 
0171             const static inline QColor viewBackgroundColor = QColor{"#fafafa"};
0172             const static inline QColor viewAlternateBackgroundColor = QColor{"#f0f0f0"};
0173             const static inline  QColor viewHoverColor = QColor{"#e5e5e5"};
0174 
0175            const static inline QColor headerBackgroundColor = QColor{"#dedede"};
0176             const static inline QColor headerAlternateBackgroundColor = QColor{"#f0f0f0"};
0177             const static inline QColor headerHoverColor = QColor{"#dbdbdb"};
0178         };
0179 
0180         struct DarkColor
0181         {
0182             const static inline QColor textColor = QColor{"#f4f5f6"};
0183             const static inline QColor disabledTextColor = QColor{"#505050"};
0184             const static inline QColor backgroundColor = QColor{"#27292a"};
0185             const static inline QColor alternateBackgroundColor = QColor{"#1a1e1e"};
0186             const static inline QColor hoverColor = QColor{"#202727"};
0187 
0188             const static inline  QColor buttonBackgroundColor = QColor{"#4c5052"};
0189             const static inline QColor buttonAlternateBackgroundColor = QColor{"#353637"};
0190             const static inline  QColor buttonHoverColor = QColor{"#7d8487"};
0191 
0192             const static inline QColor viewBackgroundColor = QColor{"#0a0b0b"};
0193             const static inline QColor viewAlternateBackgroundColor = QColor{"#1a1e1e"};
0194             const static inline  QColor viewHoverColor = QColor{"#1f1f1f"};
0195 
0196             const static inline QColor headerBackgroundColor = QColor{"#2b2c31"};
0197             const static inline QColor headerAlternateBackgroundColor = QColor{"#1a1e1e"};
0198             const static inline QColor headerHoverColor = QColor{"#202727"};
0199         };
0200     };
0201 
0202     class BasicThemeInstance : public QObject
0203     {
0204         Q_OBJECT
0205 
0206     public:
0207         explicit BasicThemeInstance(QObject *parent = nullptr);
0208 
0209         BasicThemeDefinition &themeDefinition(QQmlEngine *engine);
0210 
0211         QVector<BasicTheme *> watchers;
0212 
0213     private:
0214         void onDefinitionChanged();
0215 
0216         std::unique_ptr<BasicThemeDefinition> m_themeDefinition;
0217     };
0218 
0219     class BasicTheme : public PlatformTheme
0220     {
0221         Q_OBJECT
0222 
0223     public:
0224         explicit BasicTheme(QObject *parent = nullptr);
0225         ~BasicTheme() override;
0226 
0227         void sync();
0228 
0229     protected:
0230         bool event(QEvent *event) override;
0231 
0232     private:
0233         QColor tint(const QColor &color);
0234     };
0235 
0236 }
0237 
0238 #endif // BASICTHEME_H