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