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