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