重写QSS组件,让主题和元素更改更方便

This commit is contained in:
RigoLigoRLC
2021-08-19 02:00:16 +08:00
parent dd00465d83
commit 04ebc6ed20
7 changed files with 288 additions and 200 deletions

94
inc/spkqsshelper.h Normal file
View File

@@ -0,0 +1,94 @@
#pragma once
#include <map>
#include <QColor>
namespace SpkUi
{
QColor ColorTextOnBackground(QColor);
namespace Qss
{
enum ColorSetIndex
{
GlobalBgnd = 0,
ControlsBgnd,
ControlsBgndHighlighted,
SelectionBgnd, AccentColor = SelectionBgnd,
SelectionBgndHighlighted, AccentColorHighlighted = SelectionBgndHighlighted,
LightCtrlsGradLight,
LightCtrlsGradDark,
LightCtrlsGradDarker,
DarkCtrlsGradLight,
DarkCtrlsGradDark,
TextOnSelection, TextOnAccentColor = TextOnSelection,
TextOnGlobalBgnd,
TextOnControlsBgnd,
TextLighter,
GlossyEdge,
ShadesEdge,
};
const std::map<ColorSetIndex, const char *> ColorSet2Token
{
{ GlobalBgnd, "GBG_" },
{ ControlsBgnd, "CBG_" },
{ ControlsBgndHighlighted, "CBGH" },
{ SelectionBgnd, "ACC_" },
{ SelectionBgndHighlighted, "ACCH" },
{ LightCtrlsGradLight, "LCTL1" },
{ LightCtrlsGradDark, "LCTL2" },
{ LightCtrlsGradDarker, "LCTL3" },
{ DarkCtrlsGradLight, "DCTL1" },
{ DarkCtrlsGradDark, "DCTL2" },
{ TextOnSelection, "TXACC" },
{ TextOnGlobalBgnd, "TXGBG" },
{ TextOnControlsBgnd, "TXCBG" },
{ TextLighter, "TXL" },
{ GlossyEdge, "GLS" },
{ ShadesEdge, "SHD" }
};
const std::map<ColorSetIndex, QColor>
DarkColorSet
{
{ GlobalBgnd, 0x282828 },
{ ControlsBgnd, 0x323232 },
{ ControlsBgndHighlighted, 0xff0000 },
{ SelectionBgnd, 0x0070ff },
{ SelectionBgndHighlighted, QColor(0x0070ff).lighter(120) },
{ LightCtrlsGradLight, 0x6b6b6b },
{ LightCtrlsGradDark, 0x656565 },
{ LightCtrlsGradDarker, 0x606060 },
{ DarkCtrlsGradLight, 0x404040 },
{ DarkCtrlsGradDark, 0x383838 },
{ TextOnSelection, ColorTextOnBackground(0x0070ff) },
{ TextOnGlobalBgnd, ColorTextOnBackground(0x282828) },
{ TextOnControlsBgnd, ColorTextOnBackground(0x282828) },
{ TextLighter, 0xd5d5d5 },
{ GlossyEdge, 0x656565 },
{ ShadesEdge, 0x7b7b7b }
},
LightColorSet // TODO: Use real light color set
{
// { GlobalBgnd, 0x282828 },
// { ControlsBgnd, 0x282828 },
// { ControlsBgndHighlighted, 0xff0000 },
// { SelectionBgnd, 0x0070ff },
// { SelectionBgndHighlighted, QColor(0x0070ff).lighter(120) },
// { LightCtrlsGradLight, 0x6b6b6b },
// { LightCtrlsGradDark, 0x656565 },
// { LightCtrlsGradDarker, 0x606060 },
// { DarkCtrlsGradLight, 0x404040 },
// { DarkCtrlsGradDark, 0x383838 },
// { TextOnSelection, ColorTextOnBackground(0x0070ff) },
// { TextOnGlobalBgnd, ColorTextOnBackground(0x282828) },
// { TextOnControlsBgnd, ColorTextOnBackground(0x282828) },
// { TextLighter, 0xd5d5d5 }
};
using ColorSet = std::map<Qss::ColorSetIndex, QColor>;
}
}

View File

@@ -1,4 +1,14 @@
#ifndef SPKRESOURCE_H
#define SPKRESOURCE_H
#endif // SPKRESOURCE_H
#pragma once
#include <QObject>
class SpkResource : public QObject
{
Q_OBJECT
public:
SpkResource(QObject *parent = nullptr);
private:
};

View File

@@ -8,30 +8,16 @@
#include <QString>
#include <QSize>
#include <QColor>
#include <map>
#include "spkqsshelper.h"
#include "dtk/spkdtkplugin.h"
namespace SpkUi
{
enum SpkUiStyle { Light, Dark };
enum SpkButtonStyle { Normal = 0, Recommend, Warn };
enum ColorSetIndex
{
GlobalBgnd = 0,
ControlsBgnd,
ControlsBgndHighlighted,
SelectionBgnd, AccentColor = SelectionBgnd,
SelectionBgndHighlighted, AccentColorHighlighted = SelectionBgndHighlighted,
LightCtrlsGradLight,
LightCtrlsGradDark,
LightCtrlsGradDarker,
DarkCtrlsGradLight,
DarkCtrlsGradDark,
TextOnSelection, TextOnAccentColor = TextOnSelection,
TextOnGlobalBgnd,
TextOnControlsBgnd,
TextLighter
};
class SpkPopup;
@@ -56,7 +42,7 @@ namespace SpkUi
extern QSize PrimaryScreenSize;
extern SpkDtkPlugin *DtkPlugin;
extern QStyle *OldSystemStyle;
extern QList<QColor> CurrentColorSet;
extern std::map<Qss::ColorSetIndex, QColor> CurrentColorSet;
extern SpkPopup *Popup;
@@ -68,16 +54,16 @@ namespace SpkUi
namespace Priv
{
extern bool CrashHandlerActivated;
using namespace SpkUi::Qss;
}
void Initialize();
void GuessAppropriateTheme();
void PrepareForDeepinDesktop();
bool CheckIsDeepinDesktop();
QString StylesheetFromColors(QList<QColor>);
QString StylesheetFromColors(Qss::ColorSet);
QIcon GetThemedIcon(QString);
QColor ColorTextOnBackground(QColor);
void CrashSignalHandler(int);