File indexing completed on 2024-05-12 15:42:37

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 #include "kirigami2_export.h"
0013 
0014 namespace Kirigami
0015 {
0016 class BasicTheme;
0017 
0018 class KIRIGAMI2_EXPORT 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     Q_PROPERTY(QFont defaultFont MEMBER defaultFont NOTIFY changed)
0083     Q_PROPERTY(QFont smallFont MEMBER smallFont NOTIFY changed)
0084 
0085 public:
0086     explicit BasicThemeDefinition(QObject *parent = nullptr);
0087 
0088     virtual void syncToQml(PlatformTheme *object);
0089 
0090     QColor textColor = QColor{"#31363b"};
0091     QColor disabledTextColor = QColor{"#9931363b"};
0092 
0093     QColor highlightColor = QColor{"#2196F3"};
0094     QColor highlightedTextColor = QColor{"#eff0fa"};
0095     QColor backgroundColor = QColor{"#eff0f1"};
0096     QColor alternateBackgroundColor = QColor{"#bdc3c7"};
0097 
0098     QColor focusColor = QColor{"#2196F3"};
0099     QColor hoverColor = QColor{"#2196F3"};
0100 
0101     QColor activeTextColor = QColor{"#0176D3"};
0102     QColor activeBackgroundColor = QColor{"#0176D3"};
0103     QColor linkColor = QColor{"#2196F3"};
0104     QColor linkBackgroundColor = QColor{"#2196F3"};
0105     QColor visitedLinkColor = QColor{"#2196F3"};
0106     QColor visitedLinkBackgroundColor = QColor{"#2196F3"};
0107     QColor negativeTextColor = QColor{"#DA4453"};
0108     QColor negativeBackgroundColor = QColor{"#DA4453"};
0109     QColor neutralTextColor = QColor{"#F67400"};
0110     QColor neutralBackgroundColor = QColor{"#F67400"};
0111     QColor positiveTextColor = QColor{"#27AE60"};
0112     QColor positiveBackgroundColor = QColor{"#27AE60"};
0113 
0114     QColor buttonTextColor = QColor{"#31363b"};
0115     QColor buttonBackgroundColor = QColor{"#eff0f1"};
0116     QColor buttonAlternateBackgroundColor = QColor{"#bdc3c7"};
0117     QColor buttonHoverColor = QColor{"#2196F3"};
0118     QColor buttonFocusColor = QColor{"#2196F3"};
0119 
0120     QColor viewTextColor = QColor{"#31363b"};
0121     QColor viewBackgroundColor = QColor{"#fcfcfc"};
0122     QColor viewAlternateBackgroundColor = QColor{"#eff0f1"};
0123     QColor viewHoverColor = QColor{"#2196F3"};
0124     QColor viewFocusColor = QColor{"#2196F3"};
0125 
0126     QColor selectionTextColor = QColor{"#eff0fa"};
0127     QColor selectionBackgroundColor = QColor{"#2196F3"};
0128     QColor selectionAlternateBackgroundColor = QColor{"#1d99f3"};
0129     QColor selectionHoverColor = QColor{"#2196F3"};
0130     QColor selectionFocusColor = QColor{"#2196F3"};
0131 
0132     QColor tooltipTextColor = QColor{"#eff0f1"};
0133     QColor tooltipBackgroundColor = QColor{"#31363b"};
0134     QColor tooltipAlternateBackgroundColor = QColor{"#4d4d4d"};
0135     QColor tooltipHoverColor = QColor{"#2196F3"};
0136     QColor tooltipFocusColor = QColor{"#2196F3"};
0137 
0138     QColor complementaryTextColor = QColor{"#eff0f1"};
0139     QColor complementaryBackgroundColor = QColor{"#31363b"};
0140     QColor complementaryAlternateBackgroundColor = QColor{"#3b4045"};
0141     QColor complementaryHoverColor = QColor{"#2196F3"};
0142     QColor complementaryFocusColor = QColor{"#2196F3"};
0143 
0144     QColor headerTextColor = QColor{"#232629"};
0145     QColor headerBackgroundColor = QColor{"#e3e5e7"};
0146     QColor headerAlternateBackgroundColor = QColor{"#eff0f1"};
0147     QColor headerHoverColor = QColor{"#2196F3"};
0148     QColor headerFocusColor = QColor{"#93cee9"};
0149 
0150     QFont defaultFont;
0151     QFont smallFont;
0152 
0153     Q_SIGNAL void changed();
0154     Q_SIGNAL void sync(QQuickItem *object);
0155 };
0156 
0157 class BasicThemeInstance : public QObject
0158 {
0159     Q_OBJECT
0160 
0161 public:
0162     explicit BasicThemeInstance(QObject *parent = nullptr);
0163 
0164     BasicThemeDefinition &themeDefinition(QQmlEngine *engine);
0165 
0166     QVector<BasicTheme *> watchers;
0167 
0168 private:
0169     void onDefinitionChanged();
0170 
0171     std::unique_ptr<BasicThemeDefinition> m_themeDefinition;
0172 };
0173 
0174 class BasicTheme : public PlatformTheme
0175 {
0176     Q_OBJECT
0177 
0178 public:
0179     explicit BasicTheme(QObject *parent = nullptr);
0180     ~BasicTheme() override;
0181 
0182     void sync();
0183 
0184 protected:
0185     bool event(QEvent *event) override;
0186 
0187 private:
0188     QColor tint(const QColor &color);
0189 };
0190 
0191 }
0192 
0193 #endif // BASICTHEME_H