mirror of
https://gitee.com/spark-store-project/spark-store
synced 2025-09-08 04:12:21 +08:00
重写QSS组件,让主题和元素更改更方便
This commit is contained in:
parent
dd00465d83
commit
04ebc6ed20
@ -54,6 +54,7 @@ set(SOURCE_FILES
|
||||
inc/dtk/spkdtkplugin.h
|
||||
inc/spkutils.h src/spkutils.cpp
|
||||
inc/telemetry/collectid.h
|
||||
inc/spkqsshelper.h
|
||||
|
||||
inc/spkwindow.h gui/spkwindow.cpp
|
||||
inc/spktitlebar.h gui/spktitlebar.cpp
|
||||
|
@ -20,7 +20,7 @@ void SpkLoading::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
QPainter p(this);
|
||||
QPen pen(Qt::NoPen);
|
||||
QBrush b(SpkUi::CurrentColorSet[SpkUi::AccentColor], Qt::SolidPattern);
|
||||
QBrush b(SpkUi::CurrentColorSet[SpkUi::Qss::AccentColor], Qt::SolidPattern);
|
||||
p.setBrush(b);
|
||||
p.setPen(pen);
|
||||
p.setRenderHint(QPainter::Antialiasing);
|
||||
|
@ -24,14 +24,14 @@
|
||||
namespace SpkUi
|
||||
{
|
||||
UiMetaObject SpkUiMetaObject;
|
||||
|
||||
SpkUiStyle CurrentStyle;
|
||||
QString StylesheetBase, CurrentStylesheet;
|
||||
QColor ColorLine, ColorBack;
|
||||
QSize PrimaryScreenSize;
|
||||
SpkDtkPlugin *DtkPlugin = nullptr;
|
||||
QStyle *OldSystemStyle = nullptr;
|
||||
QList<QColor> CurrentColorSet;
|
||||
|
||||
std::map<Qss::ColorSetIndex, QColor> CurrentColorSet;
|
||||
|
||||
SpkPopup *Popup;
|
||||
|
||||
@ -141,38 +141,17 @@ namespace SpkUi
|
||||
switch(aStyle)
|
||||
{
|
||||
case Light:
|
||||
static auto LightColor = QList<QColor>{
|
||||
0x282828, 0x282828, 0xff0000, 0x0070ff, QColor(0x70ff).lighter(120),
|
||||
0x6b6b6b, 0x656565, 0x606060, 0x404040, 0x383838,
|
||||
ColorTextOnBackground(0x0070ff),
|
||||
ColorTextOnBackground(0x282828),
|
||||
ColorTextOnBackground(0x282828),
|
||||
/* TODO: %14 lighter text */
|
||||
};
|
||||
CurrentStylesheet = StylesheetFromColors(LightColor);
|
||||
CurrentStylesheet = StylesheetFromColors(Qss::LightColorSet);
|
||||
CurrentColorSet = Qss::LightColorSet;
|
||||
qApp->setStyleSheet(CurrentStylesheet);
|
||||
// TODO
|
||||
ColorLine = Qt::black;
|
||||
break;
|
||||
case Dark:
|
||||
static auto DarkColor = QList<QColor>{
|
||||
0x282828, 0x282828, 0xff0000, 0x0070ff, QColor(0x70ff).lighter(120),
|
||||
0x6b6b6b, 0x656565, 0x606060, 0x404040, 0x383838,
|
||||
ColorTextOnBackground(0x0070ff),
|
||||
ColorTextOnBackground(0x282828),
|
||||
ColorTextOnBackground(0x282828),
|
||||
0xd5d5d5
|
||||
};
|
||||
CurrentStylesheet = StylesheetFromColors(DarkColor);
|
||||
CurrentColorSet = DarkColor;
|
||||
CurrentStylesheet = StylesheetFromColors(Qss::DarkColorSet);
|
||||
CurrentColorSet = Qss::DarkColorSet;
|
||||
qApp->setStyleSheet(CurrentStylesheet);
|
||||
ColorLine = Qt::white;
|
||||
break;
|
||||
// IDE complains about default label covering all conditions, commented
|
||||
// default:
|
||||
// sWarn(QObject::tr("SetGlobalStyle invoked with unknown style %1.")
|
||||
// .arg(static_cast<int>(aStyle)));
|
||||
// break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -251,11 +230,11 @@ namespace SpkUi
|
||||
return QIcon(":/icons/" + name + ".svg");
|
||||
}
|
||||
|
||||
QString StylesheetFromColors(QList<QColor> aColors)
|
||||
QString StylesheetFromColors(Qss::ColorSet aColors)
|
||||
{
|
||||
QString ret = StylesheetBase;
|
||||
foreach(auto &i, aColors)
|
||||
ret = ret.arg(i.name());
|
||||
ret = ret.replace(Qss::ColorSet2Token.at(i.first), i.second.name());
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -268,9 +247,9 @@ namespace SpkUi
|
||||
|
||||
void UiMetaObject::SetAccentColor(QColor aColor)
|
||||
{
|
||||
CurrentColorSet[AccentColor] = aColor.lighter(80);
|
||||
CurrentColorSet[AccentColorHighlighted] = aColor;
|
||||
CurrentColorSet[TextOnAccentColor] = ColorTextOnBackground(aColor);
|
||||
CurrentColorSet[Qss::AccentColor] = aColor.lighter(80);
|
||||
CurrentColorSet[Qss::AccentColorHighlighted] = aColor;
|
||||
CurrentColorSet[Qss::TextOnAccentColor] = ColorTextOnBackground(aColor);
|
||||
qApp->setStyleSheet(StylesheetFromColors(CurrentColorSet));
|
||||
}
|
||||
|
||||
|
94
inc/spkqsshelper.h
Normal file
94
inc/spkqsshelper.h
Normal 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>;
|
||||
}
|
||||
}
|
@ -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:
|
||||
|
||||
};
|
||||
|
@ -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);
|
||||
|
||||
|
@ -1,32 +1,172 @@
|
||||
/*
|
||||
Spark Customizable style sheet conventions
|
||||
%1 : Global background color
|
||||
%2 : Controls background color
|
||||
%3 : Controls background color highlighted
|
||||
%4 : Selection/Activation background color
|
||||
%5 : Selection/Activation background color hightlighted
|
||||
%6 : Light controls gradient light
|
||||
%7 : Light controls gradient dark
|
||||
%8 : Light controls gradient darker
|
||||
%9 : Dark controls gradient light
|
||||
%10: Dark controls gradient dark
|
||||
%11: Text on Selection/Activation
|
||||
%12: Text on Global background
|
||||
%13: Text on controls background
|
||||
%14: Text slightly lighter
|
||||
GBG_ : Global background color
|
||||
CBG_ : Controls background color
|
||||
CBGH : Controls background color highlighted
|
||||
ACC_ : Selection/Activation background color
|
||||
ACCH : Selection/Activation background color hightlighted
|
||||
LCTL1 : Light controls gradient light
|
||||
LCTL2 : Light controls gradient dark
|
||||
LCTL3 : Light controls gradient darker
|
||||
DCTL1 : Dark controls gradient light
|
||||
DCTL2: Dark controls gradient dark
|
||||
TXACC: Text on Selection/Activation
|
||||
TXGBG: Text on Global background
|
||||
TXCBG: Text on controls background
|
||||
TXL: Text slightly lighter
|
||||
GLS: Glossy edge on controls
|
||||
SHD: Shades edge on controls
|
||||
*/
|
||||
|
||||
QWidget
|
||||
{
|
||||
background-color: %1;
|
||||
background-color: GBG_;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
QLabel
|
||||
{
|
||||
background: transparent;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
QScrollArea
|
||||
{
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
QLineEdit
|
||||
{
|
||||
background:qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 LCTL1, stop:1 LCTL2);
|
||||
padding: 3px;
|
||||
border-radius: 7px;
|
||||
border: 1px solid SHD;
|
||||
border-bottom: 1px solid GLS;
|
||||
selection-color: TXACC;
|
||||
selection-background-color: ACC_;
|
||||
}
|
||||
|
||||
QPushButton
|
||||
{
|
||||
border-width: 1px;
|
||||
padding: 2px;
|
||||
font-size: 14px;
|
||||
font-weight: 300;
|
||||
border-radius: 8px;
|
||||
border-color: LCTL2;
|
||||
border-top-color: SHD;
|
||||
border-style: solid;
|
||||
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 LCTL1, stop:1 LCTL2)
|
||||
}
|
||||
|
||||
QPushButton::pressed
|
||||
{
|
||||
border-top-color: GLS;
|
||||
border-bottom-color: SHD;
|
||||
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 LCTL3, stop:1 LCTL1)
|
||||
}
|
||||
|
||||
QScrollBar::handle
|
||||
{
|
||||
border: 0px;
|
||||
border-radius: 5px;
|
||||
background-color: DCTL1
|
||||
}
|
||||
QScrollBar::horizontal{height: 10px}
|
||||
QScrollBar::vertical{width:10px}
|
||||
|
||||
QScrollBar::handle:hover
|
||||
{
|
||||
background-color: LCTL2
|
||||
}
|
||||
|
||||
QScrollBar::add-line, QScrollBar::sub-line
|
||||
{
|
||||
height:0px
|
||||
}
|
||||
|
||||
/* Custom widgets */
|
||||
|
||||
#styAboutDesc
|
||||
{
|
||||
color: TXL
|
||||
}
|
||||
|
||||
SpkAppItem
|
||||
{
|
||||
background: DCTL2;
|
||||
border-radius: 11px;
|
||||
}
|
||||
|
||||
SpkAppItem::hover
|
||||
{
|
||||
background: DCTL1;
|
||||
border-radius: 11px;
|
||||
}
|
||||
|
||||
#styAppItmTitle
|
||||
{
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
#styChkBtn
|
||||
{
|
||||
border-width: 0px;
|
||||
background-color: DCTL1
|
||||
}
|
||||
|
||||
#styChkBtn:pressed
|
||||
{
|
||||
background-color: ACCH
|
||||
}
|
||||
|
||||
#styChkBtn:checked
|
||||
{
|
||||
background-color: ACC_
|
||||
}
|
||||
|
||||
#styPlainChkBtn
|
||||
{
|
||||
border-width: 0px;
|
||||
background-color: GBG_
|
||||
}
|
||||
|
||||
#styPlainChkBtn:pressed
|
||||
{
|
||||
background-color: ACCH
|
||||
}
|
||||
|
||||
#styPlainChkBtn:checked
|
||||
{
|
||||
background-color: ACC_
|
||||
}
|
||||
|
||||
SpkTitleBar
|
||||
{
|
||||
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 DCTL2, stop:1 DCTL1)
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton
|
||||
{
|
||||
margin: 0px;
|
||||
border-radius: 0px;
|
||||
border-width: 0px;
|
||||
background-color: CBG_;
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton:hover
|
||||
{
|
||||
background-color: DCTL1;
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton:pressed
|
||||
{
|
||||
background-color: LCTL3;
|
||||
}
|
||||
|
||||
/* Window widgets */
|
||||
|
||||
#styMwCateg
|
||||
{
|
||||
border: none;
|
||||
@ -38,143 +178,21 @@ QLabel
|
||||
{
|
||||
height: 35px;
|
||||
border: none;
|
||||
color: %13;
|
||||
color: TXCBG;
|
||||
}
|
||||
|
||||
#styMwCateg::item:selected
|
||||
{
|
||||
color: %11;
|
||||
background-color: %4;
|
||||
color: TXACC;
|
||||
background-color: ACC_;
|
||||
}
|
||||
|
||||
#styMwCateg::branch:!has-children
|
||||
{
|
||||
background: %1;
|
||||
background: GBG_;
|
||||
}
|
||||
|
||||
#styMwCateg::branch:selected
|
||||
{
|
||||
background-color: %4;
|
||||
}
|
||||
|
||||
QLabel
|
||||
{
|
||||
font-size: 14px
|
||||
}
|
||||
|
||||
QScrollArea
|
||||
{
|
||||
border-width: 1px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
QPushButton
|
||||
{
|
||||
border-width: 1px;
|
||||
padding: 2px;
|
||||
font-size: 14px;
|
||||
font-weight: 300;
|
||||
border-radius: 11px;
|
||||
border-color: %7;
|
||||
border-top-color: #7b7b7b;
|
||||
border-style: solid;
|
||||
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 %6, stop:1 %7)
|
||||
}
|
||||
|
||||
QPushButton::pressed
|
||||
{
|
||||
border-top-color: #656565;
|
||||
border-bottom-color: #7b7b7b;
|
||||
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 %8, stop:1 %6)
|
||||
}
|
||||
|
||||
#styChkBtn
|
||||
{
|
||||
border-width: 0px;
|
||||
background-color: %9
|
||||
}
|
||||
|
||||
#styChkBtn:pressed
|
||||
{
|
||||
background-color: %5
|
||||
}
|
||||
|
||||
#styChkBtn:checked
|
||||
{
|
||||
background-color: %4
|
||||
}
|
||||
|
||||
#styPlainChkBtn
|
||||
{
|
||||
border-width: 0px;
|
||||
background-color: %1
|
||||
}
|
||||
|
||||
#styPlainChkBtn:pressed
|
||||
{
|
||||
background-color: %5
|
||||
}
|
||||
|
||||
#styPlainChkBtn:checked
|
||||
{
|
||||
background-color: %4
|
||||
}
|
||||
|
||||
SpkTitleBar
|
||||
{
|
||||
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 %10, stop:1 %9)
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton
|
||||
{
|
||||
margin: 0px;
|
||||
border-radius: 0px;
|
||||
border-width: 0px;
|
||||
background-color: %2;
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton:hover
|
||||
{
|
||||
background-color: %9;
|
||||
}
|
||||
|
||||
SpkTitleBarDefaultButton:pressed
|
||||
{
|
||||
background-color: %8;
|
||||
}
|
||||
|
||||
QScrollBar::handle
|
||||
{
|
||||
border: 0px;
|
||||
border-radius: 5px;
|
||||
background-color: #606060
|
||||
}
|
||||
QScrollBar::horizontal{height: 10px}
|
||||
QScrollBar::vertical{width:10px}
|
||||
|
||||
QScrollBar::handle:hover
|
||||
{
|
||||
background-color: #606060
|
||||
}
|
||||
|
||||
QScrollBar::add-line, QScrollBar::sub-line
|
||||
{
|
||||
height:0px
|
||||
}
|
||||
|
||||
#styAboutDesc
|
||||
{
|
||||
color: %14
|
||||
}
|
||||
|
||||
SpkAppItem
|
||||
{
|
||||
background: %10;
|
||||
border-radius: 11px;
|
||||
}
|
||||
|
||||
#styAppItmTitle
|
||||
{
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
}
|
||||
background-color: ACC_;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user