File indexing completed on 2024-05-05 03:56:26

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 "kirigamiplatform_export.h"
0013 
0014 namespace Kirigami
0015 {
0016 namespace Platform
0017 {
0018 class BasicTheme;
0019 
0020 class KIRIGAMIPLATFORM_EXPORT BasicThemeDefinition : public QObject
0021 {
0022     Q_OBJECT
0023     QML_ELEMENT
0024 
0025     Q_PROPERTY(QColor textColor MEMBER textColor NOTIFY changed FINAL)
0026     Q_PROPERTY(QColor disabledTextColor MEMBER disabledTextColor NOTIFY changed FINAL)
0027 
0028     Q_PROPERTY(QColor highlightColor MEMBER highlightColor NOTIFY changed FINAL)
0029     Q_PROPERTY(QColor highlightedTextColor MEMBER highlightedTextColor NOTIFY changed FINAL)
0030     Q_PROPERTY(QColor backgroundColor MEMBER backgroundColor NOTIFY changed FINAL)
0031     Q_PROPERTY(QColor alternateBackgroundColor MEMBER alternateBackgroundColor NOTIFY changed FINAL)
0032 
0033     Q_PROPERTY(QColor focusColor MEMBER focusColor NOTIFY changed FINAL)
0034     Q_PROPERTY(QColor hoverColor MEMBER hoverColor NOTIFY changed FINAL)
0035 
0036     Q_PROPERTY(QColor activeTextColor MEMBER activeTextColor NOTIFY changed FINAL)
0037     Q_PROPERTY(QColor activeBackgroundColor MEMBER activeBackgroundColor NOTIFY changed FINAL)
0038     Q_PROPERTY(QColor linkColor MEMBER linkColor NOTIFY changed FINAL)
0039     Q_PROPERTY(QColor linkBackgroundColor MEMBER linkBackgroundColor NOTIFY changed FINAL)
0040     Q_PROPERTY(QColor visitedLinkColor MEMBER visitedLinkColor NOTIFY changed FINAL)
0041     Q_PROPERTY(QColor visitedLinkBackgroundColor MEMBER visitedLinkBackgroundColor NOTIFY changed FINAL)
0042     Q_PROPERTY(QColor negativeTextColor MEMBER negativeTextColor NOTIFY changed FINAL)
0043     Q_PROPERTY(QColor negativeBackgroundColor MEMBER negativeBackgroundColor NOTIFY changed FINAL)
0044     Q_PROPERTY(QColor neutralTextColor MEMBER neutralTextColor NOTIFY changed FINAL)
0045     Q_PROPERTY(QColor neutralBackgroundColor MEMBER neutralBackgroundColor NOTIFY changed FINAL)
0046     Q_PROPERTY(QColor positiveTextColor MEMBER positiveTextColor NOTIFY changed FINAL)
0047     Q_PROPERTY(QColor positiveBackgroundColor MEMBER positiveBackgroundColor NOTIFY changed FINAL)
0048 
0049     Q_PROPERTY(QColor buttonTextColor MEMBER buttonTextColor NOTIFY changed FINAL)
0050     Q_PROPERTY(QColor buttonBackgroundColor MEMBER buttonBackgroundColor NOTIFY changed FINAL)
0051     Q_PROPERTY(QColor buttonAlternateBackgroundColor MEMBER buttonAlternateBackgroundColor NOTIFY changed FINAL)
0052     Q_PROPERTY(QColor buttonHoverColor MEMBER buttonHoverColor NOTIFY changed FINAL)
0053     Q_PROPERTY(QColor buttonFocusColor MEMBER buttonFocusColor NOTIFY changed FINAL)
0054 
0055     Q_PROPERTY(QColor viewTextColor MEMBER viewTextColor NOTIFY changed FINAL)
0056     Q_PROPERTY(QColor viewBackgroundColor MEMBER viewBackgroundColor NOTIFY changed FINAL)
0057     Q_PROPERTY(QColor viewAlternateBackgroundColor MEMBER viewAlternateBackgroundColor NOTIFY changed FINAL)
0058     Q_PROPERTY(QColor viewHoverColor MEMBER viewHoverColor NOTIFY changed FINAL)
0059     Q_PROPERTY(QColor viewFocusColor MEMBER viewFocusColor NOTIFY changed FINAL)
0060 
0061     Q_PROPERTY(QColor selectionTextColor MEMBER selectionTextColor NOTIFY changed FINAL)
0062     Q_PROPERTY(QColor selectionBackgroundColor MEMBER selectionBackgroundColor NOTIFY changed FINAL)
0063     Q_PROPERTY(QColor selectionAlternateBackgroundColor MEMBER selectionAlternateBackgroundColor NOTIFY changed FINAL)
0064     Q_PROPERTY(QColor selectionHoverColor MEMBER selectionHoverColor NOTIFY changed FINAL)
0065     Q_PROPERTY(QColor selectionFocusColor MEMBER selectionFocusColor NOTIFY changed FINAL)
0066 
0067     Q_PROPERTY(QColor tooltipTextColor MEMBER tooltipTextColor NOTIFY changed FINAL)
0068     Q_PROPERTY(QColor tooltipBackgroundColor MEMBER tooltipBackgroundColor NOTIFY changed FINAL)
0069     Q_PROPERTY(QColor tooltipAlternateBackgroundColor MEMBER tooltipAlternateBackgroundColor NOTIFY changed FINAL)
0070     Q_PROPERTY(QColor tooltipHoverColor MEMBER tooltipHoverColor NOTIFY changed FINAL)
0071     Q_PROPERTY(QColor tooltipFocusColor MEMBER tooltipFocusColor NOTIFY changed FINAL)
0072 
0073     Q_PROPERTY(QColor complementaryTextColor MEMBER complementaryTextColor NOTIFY changed FINAL)
0074     Q_PROPERTY(QColor complementaryBackgroundColor MEMBER complementaryBackgroundColor NOTIFY changed FINAL)
0075     Q_PROPERTY(QColor complementaryAlternateBackgroundColor MEMBER complementaryAlternateBackgroundColor NOTIFY changed FINAL)
0076     Q_PROPERTY(QColor complementaryHoverColor MEMBER complementaryHoverColor NOTIFY changed FINAL)
0077     Q_PROPERTY(QColor complementaryFocusColor MEMBER complementaryFocusColor NOTIFY changed FINAL)
0078 
0079     Q_PROPERTY(QColor headerTextColor MEMBER headerTextColor NOTIFY changed FINAL)
0080     Q_PROPERTY(QColor headerBackgroundColor MEMBER headerBackgroundColor NOTIFY changed FINAL)
0081     Q_PROPERTY(QColor headerAlternateBackgroundColor MEMBER headerAlternateBackgroundColor NOTIFY changed FINAL)
0082     Q_PROPERTY(QColor headerHoverColor MEMBER headerHoverColor NOTIFY changed FINAL)
0083     Q_PROPERTY(QColor headerFocusColor MEMBER headerFocusColor NOTIFY changed FINAL)
0084 
0085     Q_PROPERTY(QFont defaultFont MEMBER defaultFont NOTIFY changed FINAL)
0086     Q_PROPERTY(QFont smallFont MEMBER smallFont NOTIFY changed FINAL)
0087 
0088 public:
0089     explicit BasicThemeDefinition(QObject *parent = nullptr);
0090 
0091     virtual void syncToQml(PlatformTheme *object);
0092 
0093     QColor textColor{0x31363b};
0094     QColor disabledTextColor{0x31, 0x36, 0x3b, 0x99};
0095 
0096     QColor highlightColor{0x2196F3};
0097     QColor highlightedTextColor{0xeff0fa};
0098     QColor backgroundColor{0xeff0f1};
0099     QColor alternateBackgroundColor{0xbdc3c7};
0100 
0101     QColor focusColor{0x2196F3};
0102     QColor hoverColor{0x2196F3};
0103 
0104     QColor activeTextColor{0x0176D3};
0105     QColor activeBackgroundColor{0x0176D3};
0106     QColor linkColor{0x2196F3};
0107     QColor linkBackgroundColor{0x2196F3};
0108     QColor visitedLinkColor{0x2196F3};
0109     QColor visitedLinkBackgroundColor{0x2196F3};
0110     QColor negativeTextColor{0xDA4453};
0111     QColor negativeBackgroundColor{0xDA4453};
0112     QColor neutralTextColor{0xF67400};
0113     QColor neutralBackgroundColor{0xF67400};
0114     QColor positiveTextColor{0x27AE60};
0115     QColor positiveBackgroundColor{0x27AE60};
0116 
0117     QColor buttonTextColor{0x31363b};
0118     QColor buttonBackgroundColor{0xeff0f1};
0119     QColor buttonAlternateBackgroundColor{0xbdc3c7};
0120     QColor buttonHoverColor{0x2196F3};
0121     QColor buttonFocusColor{0x2196F3};
0122 
0123     QColor viewTextColor{0x31363b};
0124     QColor viewBackgroundColor{0xfcfcfc};
0125     QColor viewAlternateBackgroundColor{0xeff0f1};
0126     QColor viewHoverColor{0x2196F3};
0127     QColor viewFocusColor{0x2196F3};
0128 
0129     QColor selectionTextColor{0xeff0fa};
0130     QColor selectionBackgroundColor{0x2196F3};
0131     QColor selectionAlternateBackgroundColor{0x1d99f3};
0132     QColor selectionHoverColor{0x2196F3};
0133     QColor selectionFocusColor{0x2196F3};
0134 
0135     QColor tooltipTextColor{0xeff0f1};
0136     QColor tooltipBackgroundColor{0x31363b};
0137     QColor tooltipAlternateBackgroundColor{0x4d4d4d};
0138     QColor tooltipHoverColor{0x2196F3};
0139     QColor tooltipFocusColor{0x2196F3};
0140 
0141     QColor complementaryTextColor{0xeff0f1};
0142     QColor complementaryBackgroundColor{0x31363b};
0143     QColor complementaryAlternateBackgroundColor{0x3b4045};
0144     QColor complementaryHoverColor{0x2196F3};
0145     QColor complementaryFocusColor{0x2196F3};
0146 
0147     QColor headerTextColor{0x232629};
0148     QColor headerBackgroundColor{0xe3e5e7};
0149     QColor headerAlternateBackgroundColor{0xeff0f1};
0150     QColor headerHoverColor{0x2196F3};
0151     QColor headerFocusColor{0x93cee9};
0152 
0153     QFont defaultFont;
0154     QFont smallFont;
0155 
0156     Q_SIGNAL void changed();
0157     Q_SIGNAL void sync(QQuickItem *object);
0158 };
0159 
0160 class BasicThemeInstance : public QObject
0161 {
0162     Q_OBJECT
0163 
0164 public:
0165     explicit BasicThemeInstance(QObject *parent = nullptr);
0166 
0167     BasicThemeDefinition &themeDefinition(QQmlEngine *engine);
0168 
0169     QList<BasicTheme *> watchers;
0170 
0171 private:
0172     void onDefinitionChanged();
0173 
0174     std::unique_ptr<BasicThemeDefinition> m_themeDefinition;
0175 };
0176 
0177 class BasicTheme : public PlatformTheme
0178 {
0179     Q_OBJECT
0180 
0181 public:
0182     explicit BasicTheme(QObject *parent = nullptr);
0183     ~BasicTheme() override;
0184 
0185     void sync();
0186 
0187 protected:
0188     bool event(QEvent *event) override;
0189 
0190 private:
0191     QColor tint(const QColor &color);
0192 };
0193 
0194 }
0195 }
0196 
0197 #endif // BASICTHEME_H