refactor theming code
This commit is contained in:
parent
e3517e11d1
commit
adfcfdc398
|
@ -14,7 +14,12 @@ FlatButtonPrivate::FlatButtonPrivate(FlatButton *q)
|
|||
role(Material::Default),
|
||||
rippleStyle(Material::PositionedRipple),
|
||||
cornerRadius(3),
|
||||
bgMode(Qt::TransparentMode)
|
||||
bgMode(Qt::TransparentMode),
|
||||
peakOpacity(0.15)
|
||||
{
|
||||
}
|
||||
|
||||
FlatButtonPrivate::~FlatButtonPrivate()
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -36,28 +41,22 @@ void FlatButtonPrivate::init()
|
|||
font.setPointSizeF(10.5);
|
||||
font.setStyleName("Medium");
|
||||
q->setFont(font);
|
||||
|
||||
// Apply theme style
|
||||
|
||||
q->setPrimaryBgColor(style.themeColor("primary1"));
|
||||
q->setSecondaryBgColor(style.themeColor("accent1"));
|
||||
q->setDefaultBgColor(style.themeColor("text"));
|
||||
|
||||
q->setPrimaryTextColor(style.themeColor("primary1"));
|
||||
q->setSecondaryTextColor(style.themeColor("accent1"));
|
||||
q->setDefaultTextColor(style.themeColor("text"));
|
||||
|
||||
q->setDisabledTextColor(style.themeColor("disabled"));
|
||||
|
||||
delegate->updatePalette();
|
||||
}
|
||||
|
||||
/*
|
||||
void FlatButtonPrivate::setPaletteColor(QPalette::ColorGroup group,
|
||||
QPalette::ColorRole role,
|
||||
const QColor &color)
|
||||
{
|
||||
Q_Q(FlatButton);
|
||||
|
||||
QPalette palette(q->palette());
|
||||
palette.setColor(group, role, color);
|
||||
q->setPalette(palette);
|
||||
|
||||
// QPalette palette(q->palette());
|
||||
// Style &style = Style::instance();
|
||||
//
|
||||
// palette.setColor(group, role, style.themeColor(themeColor));
|
||||
//
|
||||
// q->setPalette(palette);
|
||||
}
|
||||
*/
|
||||
|
||||
FlatButton::FlatButton(QWidget *parent)
|
||||
: QPushButton(parent),
|
||||
d_ptr(new FlatButtonPrivate(this))
|
||||
|
@ -122,6 +121,51 @@ Qt::BGMode FlatButton::bgMode() const
|
|||
return d->bgMode;
|
||||
}
|
||||
|
||||
void FlatButton::setPrimaryBgColor(const QColor &color)
|
||||
{
|
||||
Q_D(FlatButton);
|
||||
|
||||
d->primaryBgColor = color;
|
||||
d->delegate->updatePalette();
|
||||
}
|
||||
|
||||
QColor FlatButton::primaryBgColor() const
|
||||
{
|
||||
Q_D(const FlatButton);
|
||||
|
||||
return d->primaryBgColor;
|
||||
}
|
||||
|
||||
void FlatButton::setSecondaryBgColor(const QColor &color)
|
||||
{
|
||||
Q_D(FlatButton);
|
||||
|
||||
d->secondaryBgColor = color;
|
||||
d->delegate->updatePalette();
|
||||
}
|
||||
|
||||
QColor FlatButton::secondaryBgColor() const
|
||||
{
|
||||
Q_D(const FlatButton);
|
||||
|
||||
return d->secondaryBgColor;
|
||||
}
|
||||
|
||||
void FlatButton::setDefaultBgColor(const QColor &color)
|
||||
{
|
||||
Q_D(FlatButton);
|
||||
|
||||
d->defaultBgColor = color;
|
||||
d->delegate->updatePalette();
|
||||
}
|
||||
|
||||
QColor FlatButton::defaultBgColor() const
|
||||
{
|
||||
Q_D(const FlatButton);
|
||||
|
||||
return d->defaultBgColor;
|
||||
}
|
||||
|
||||
void FlatButton::setPrimaryTextColor(const QColor &color)
|
||||
{
|
||||
Q_D(FlatButton);
|
||||
|
@ -182,6 +226,21 @@ QColor FlatButton::disabledTextColor() const
|
|||
return d->disabledTextColor;
|
||||
}
|
||||
|
||||
void FlatButton::setPeakOpacity(qreal opacity)
|
||||
{
|
||||
Q_D(FlatButton);
|
||||
|
||||
d->peakOpacity = opacity;
|
||||
d->delegate->updatePalette();
|
||||
}
|
||||
|
||||
qreal FlatButton::peakOpacity() const
|
||||
{
|
||||
Q_D(const FlatButton);
|
||||
|
||||
return d->peakOpacity;
|
||||
}
|
||||
|
||||
void FlatButton::setRole(Material::Role role)
|
||||
{
|
||||
Q_D(FlatButton);
|
||||
|
@ -232,7 +291,20 @@ void FlatButton::paintEvent(QPaintEvent *event)
|
|||
if (Qt::OpaqueMode == d->bgMode) {
|
||||
QBrush brush;
|
||||
brush.setStyle(Qt::SolidPattern);
|
||||
brush.setColor(Qt::red);
|
||||
QColor color;
|
||||
switch (d->role)
|
||||
{
|
||||
case Material::Primary:
|
||||
color = d->primaryBgColor;
|
||||
break;
|
||||
case Material::Secondary:
|
||||
color = d->secondaryBgColor;
|
||||
break;
|
||||
case Material::Default:
|
||||
default:
|
||||
color = d->defaultBgColor;
|
||||
}
|
||||
brush.setColor(color);
|
||||
painter.setOpacity(1);
|
||||
painter.setBrush(brush);
|
||||
painter.setPen(Qt::NoPen);
|
||||
|
@ -289,7 +361,8 @@ void FlatButton::mousePressEvent(QMouseEvent *event)
|
|||
QColor color = palette().color(QPalette::Active, QPalette::ButtonText);
|
||||
|
||||
Ripple *ripple = new Ripple(Material::CenteredRipple == d->rippleStyle
|
||||
? rect().center() : event->pos());
|
||||
? rect().center()
|
||||
: event->pos());
|
||||
|
||||
ripple->setRadiusEndValue(100);
|
||||
ripple->setOpacityStartValue(0.4);
|
||||
|
|
|
@ -15,17 +15,21 @@ class FlatButton : public QPushButton
|
|||
Q_PROPERTY(Material::RippleStyle rippleStyle WRITE setRippleStyle READ rippleStyle)
|
||||
Q_PROPERTY(qreal cornerRadius WRITE setCornerRadius READ cornerRadius)
|
||||
Q_PROPERTY(Qt::BGMode bgMode WRITE setBgMode READ bgMode)
|
||||
Q_PROPERTY(QColor primaryBgColor WRITE setPrimaryBgColor READ primaryBgColor)
|
||||
Q_PROPERTY(QColor secondaryBgColor WRITE setSecondaryBgColor READ secondaryBgColor)
|
||||
Q_PROPERTY(QColor defaultBgColor WRITE setDefaultBgColor READ defaultBgColor)
|
||||
Q_PROPERTY(QColor primaryTextColor WRITE setPrimaryTextColor READ primaryTextColor)
|
||||
Q_PROPERTY(QColor secondaryTextColor WRITE setSecondaryTextColor READ secondaryTextColor)
|
||||
Q_PROPERTY(QColor defaultTextColor WRITE setDefaultTextColor READ defaultTextColor)
|
||||
Q_PROPERTY(QColor disabledTextColor WRITE setDisabledTextColor READ disabledTextColor)
|
||||
Q_PROPERTY(qreal peakOpacity WRITE setPeakOpacity READ peakOpacity)
|
||||
|
||||
public:
|
||||
explicit FlatButton(QWidget *parent = 0);
|
||||
explicit FlatButton(const QString &text, QWidget *parent = 0);
|
||||
~FlatButton();
|
||||
|
||||
virtual void setRole(Material::Role role);
|
||||
void setRole(Material::Role role);
|
||||
Material::Role role() const;
|
||||
|
||||
void setRippleStyle(Material::RippleStyle style);
|
||||
|
@ -37,6 +41,15 @@ public:
|
|||
void setBgMode(Qt::BGMode mode);
|
||||
Qt::BGMode bgMode() const;
|
||||
|
||||
void setPrimaryBgColor(const QColor &color);
|
||||
QColor primaryBgColor() const;
|
||||
|
||||
void setSecondaryBgColor(const QColor &color);
|
||||
QColor secondaryBgColor() const;
|
||||
|
||||
void setDefaultBgColor(const QColor &color);
|
||||
QColor defaultBgColor() const;
|
||||
|
||||
void setPrimaryTextColor(const QColor &color);
|
||||
QColor primaryTextColor() const;
|
||||
|
||||
|
@ -49,6 +62,9 @@ public:
|
|||
void setDisabledTextColor(const QColor &color);
|
||||
QColor disabledTextColor() const;
|
||||
|
||||
void setPeakOpacity(qreal opacity);
|
||||
qreal peakOpacity() const;
|
||||
|
||||
protected:
|
||||
FlatButton(FlatButtonPrivate &d, QWidget *parent = 0);
|
||||
|
||||
|
|
|
@ -19,8 +19,6 @@ FlatButtonDelegate::FlatButtonDelegate(FlatButton *parent)
|
|||
{
|
||||
setInitialState(_normalState);
|
||||
|
||||
updatePalette();
|
||||
|
||||
addTransition(QEvent::Enter, _normalFocusedState, _hoveredFocusedState);
|
||||
addTransition(QEvent::FocusIn, _normalState, _normalFocusedState);
|
||||
addTransition(QEvent::FocusOut, _normalFocusedState, _normalState);
|
||||
|
@ -124,6 +122,7 @@ void FlatButtonDelegate::updatePalette()
|
|||
|
||||
QPalette palette(button->palette());
|
||||
palette.setColor(QPalette::Active, QPalette::ButtonText, color);
|
||||
palette.setColor(QPalette::Inactive, QPalette::ButtonText, color);
|
||||
palette.setColor(QPalette::Disabled, QPalette::ButtonText, button->disabledTextColor());
|
||||
button->setPalette(palette);
|
||||
|
||||
|
@ -133,17 +132,17 @@ void FlatButtonDelegate::updatePalette()
|
|||
|
||||
_normalFocusedState->assignProperty(this, "backgroundOpacity", 0);
|
||||
_normalFocusedState->assignProperty(this, "backgroundColor", color);
|
||||
_normalFocusedState->assignProperty(this, "focusHaloOpacity", 0.15);
|
||||
_normalFocusedState->assignProperty(this, "focusHaloOpacity", button->peakOpacity());
|
||||
|
||||
_hoveredState->assignProperty(this, "backgroundOpacity", 0.15);
|
||||
_hoveredState->assignProperty(this, "backgroundOpacity", button->peakOpacity());
|
||||
_hoveredState->assignProperty(this, "backgroundColor", color);
|
||||
_hoveredState->assignProperty(this, "focusHaloOpacity", 0);
|
||||
|
||||
_hoveredFocusedState->assignProperty(this, "backgroundOpacity", 0.15);
|
||||
_hoveredFocusedState->assignProperty(this, "backgroundOpacity", button->peakOpacity());
|
||||
_hoveredFocusedState->assignProperty(this, "backgroundColor", color);
|
||||
_normalFocusedState->assignProperty(this, "focusHaloOpacity", 0.15);
|
||||
_normalFocusedState->assignProperty(this, "focusHaloOpacity", button->peakOpacity());
|
||||
|
||||
_pressedState->assignProperty(this, "backgroundOpacity", 0.15);
|
||||
_pressedState->assignProperty(this, "backgroundOpacity", button->peakOpacity());
|
||||
_pressedState->assignProperty(this, "backgroundColor", color);
|
||||
_pressedState->assignProperty(this, "focusHaloOpacity", 0);
|
||||
|
||||
|
|
|
@ -16,13 +16,10 @@ class FlatButtonPrivate
|
|||
|
||||
public:
|
||||
FlatButtonPrivate(FlatButton *q);
|
||||
virtual ~FlatButtonPrivate();
|
||||
|
||||
void init();
|
||||
|
||||
/*
|
||||
void setPaletteColor(QPalette::ColorGroup group, QPalette::ColorRole role, const QColor &color);
|
||||
*/
|
||||
|
||||
FlatButton *const q_ptr;
|
||||
RippleOverlay *ripple;
|
||||
FlatButtonDelegate *delegate;
|
||||
|
@ -34,6 +31,10 @@ public:
|
|||
QColor secondaryTextColor;
|
||||
QColor defaultTextColor;
|
||||
QColor disabledTextColor;
|
||||
QColor primaryBgColor;
|
||||
QColor secondaryBgColor;
|
||||
QColor defaultBgColor;
|
||||
qreal peakOpacity;
|
||||
};
|
||||
|
||||
#endif // FLATBUTTON_P_H
|
||||
|
|
|
@ -10,10 +10,23 @@
|
|||
#include <QDebug>
|
||||
#include "raisedbutton_p.h"
|
||||
|
||||
RaisedButtonPrivate::RaisedButtonPrivate(RaisedButton *q)
|
||||
: FlatButtonPrivate(q)
|
||||
{
|
||||
}
|
||||
|
||||
RaisedButtonPrivate::~RaisedButtonPrivate()
|
||||
{
|
||||
}
|
||||
|
||||
void RaisedButtonPrivate::init()
|
||||
{
|
||||
Q_Q(RaisedButton);
|
||||
|
||||
q->setPrimaryTextColor(Qt::white);
|
||||
q->setSecondaryTextColor(Qt::white);
|
||||
q->setPeakOpacity(0.25);
|
||||
|
||||
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
|
||||
effect->setBlurRadius(7);
|
||||
effect->setOffset(QPointF(0, 0));
|
||||
|
@ -97,33 +110,6 @@ RaisedButton::~RaisedButton()
|
|||
{
|
||||
}
|
||||
|
||||
void RaisedButton::setRole(Material::Role role)
|
||||
{
|
||||
Q_D(FlatButton);
|
||||
|
||||
d->role = role;
|
||||
|
||||
/*
|
||||
switch (role)
|
||||
{
|
||||
case Material::Primary:
|
||||
d->setPaletteColor(QPalette::Active, QPalette::Background, "primary1");
|
||||
d->setPaletteColor(QPalette::Active, QPalette::ButtonText, "alternateText");
|
||||
break;
|
||||
case Material::Secondary:
|
||||
d->setPaletteColor(QPalette::Active, QPalette::Background, "accent1");
|
||||
d->setPaletteColor(QPalette::Active, QPalette::ButtonText, "alternateText");
|
||||
break;
|
||||
default:
|
||||
d->setPaletteColor(QPalette::Active, QPalette::Background, "canvas");
|
||||
d->setPaletteColor(QPalette::Active, QPalette::ButtonText, "text");
|
||||
break;
|
||||
}
|
||||
d->delegate->assignProperties();
|
||||
update();
|
||||
*/
|
||||
}
|
||||
|
||||
bool RaisedButton::event(QEvent *event)
|
||||
{
|
||||
Q_D(RaisedButton);
|
||||
|
@ -149,14 +135,26 @@ void RaisedButton::paintEvent(QPaintEvent *event)
|
|||
|
||||
painter.save();
|
||||
|
||||
QBrush brush;
|
||||
|
||||
const qreal cr = d->cornerRadius;
|
||||
|
||||
QColor bg;
|
||||
switch (d->role)
|
||||
{
|
||||
case Material::Primary:
|
||||
bg = d->primaryBgColor;
|
||||
break;
|
||||
case Material::Secondary:
|
||||
bg = d->secondaryBgColor;
|
||||
break;
|
||||
case Material::Default:
|
||||
default:
|
||||
bg = d->defaultBgColor;
|
||||
}
|
||||
|
||||
QBrush brush;
|
||||
brush.setStyle(Qt::SolidPattern);
|
||||
brush.setColor(isEnabled()
|
||||
? palette().color(QPalette::Active, QPalette::Background)
|
||||
: palette().color(QPalette::Disabled, QPalette::Background));
|
||||
? bg : palette().color(QPalette::Disabled, QPalette::Background));
|
||||
painter.setBrush(brush);
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.drawRoundedRect(rect(), cr, cr);
|
||||
|
|
|
@ -13,8 +13,6 @@ public:
|
|||
explicit RaisedButton(QWidget *parent = 0);
|
||||
~RaisedButton();
|
||||
|
||||
void setRole(Material::Role role) Q_DECL_OVERRIDE;
|
||||
|
||||
protected:
|
||||
bool event(QEvent *event) Q_DECL_OVERRIDE;
|
||||
void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
|
||||
|
|
|
@ -9,9 +9,8 @@ class RaisedButtonPrivate : public FlatButtonPrivate
|
|||
Q_DECLARE_PUBLIC(RaisedButton)
|
||||
|
||||
public:
|
||||
RaisedButtonPrivate(RaisedButton *q)
|
||||
: FlatButtonPrivate(q)
|
||||
{}
|
||||
RaisedButtonPrivate(RaisedButton *q);
|
||||
~RaisedButtonPrivate();
|
||||
|
||||
void init();
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ class SliderThumb : public QWidget
|
|||
|
||||
public:
|
||||
explicit SliderThumb(Slider *slider);
|
||||
~SliderThumb();
|
||||
virutal ~SliderThumb();
|
||||
|
||||
inline void setDiameter(qreal diameter)
|
||||
{
|
||||
|
|
|
@ -31,6 +31,73 @@ FlatButtonExamples::FlatButtonExamples(QWidget *parent)
|
|||
|
||||
layout->addWidget(frame);
|
||||
}
|
||||
{
|
||||
FlatButton *flatButton = new FlatButton;
|
||||
flatButton->setText("Press me!");
|
||||
flatButton->setMinimumSize(200, 42);
|
||||
|
||||
flatButton->setRole(Material::Secondary);
|
||||
// flatButton->setDisabled(true);
|
||||
|
||||
ExampleView *view = new ExampleView;
|
||||
view->setWidget(flatButton);
|
||||
view->setBackgroundRole(QPalette::Base);
|
||||
|
||||
Frame *frame = new Frame;
|
||||
frame->setCodeSnippet(
|
||||
"FlatButton *flatButton = new FlatButton;\n"
|
||||
"flatButton->setText(\"Press me!\");"
|
||||
);
|
||||
frame->setWidget(view);
|
||||
|
||||
layout->addWidget(frame);
|
||||
}
|
||||
{
|
||||
FlatButton *flatButton = new FlatButton;
|
||||
flatButton->setText("Press me!");
|
||||
flatButton->setMinimumSize(200, 42);
|
||||
|
||||
flatButton->setRole(Material::Primary);
|
||||
flatButton->setBgMode(Qt::OpaqueMode);
|
||||
flatButton->setPrimaryTextColor(Qt::white);
|
||||
flatButton->setPeakOpacity(0.25);
|
||||
|
||||
ExampleView *view = new ExampleView;
|
||||
view->setWidget(flatButton);
|
||||
view->setBackgroundRole(QPalette::Base);
|
||||
|
||||
Frame *frame = new Frame;
|
||||
frame->setCodeSnippet(
|
||||
"FlatButton *flatButton = new FlatButton;\n"
|
||||
"flatButton->setText(\"Press me!\");"
|
||||
);
|
||||
frame->setWidget(view);
|
||||
|
||||
layout->addWidget(frame);
|
||||
}
|
||||
{
|
||||
FlatButton *flatButton = new FlatButton;
|
||||
flatButton->setText("Press me!");
|
||||
flatButton->setMinimumSize(200, 42);
|
||||
|
||||
flatButton->setRole(Material::Secondary);
|
||||
flatButton->setBgMode(Qt::OpaqueMode);
|
||||
flatButton->setSecondaryTextColor(Qt::white);
|
||||
flatButton->setPeakOpacity(0.25);
|
||||
|
||||
ExampleView *view = new ExampleView;
|
||||
view->setWidget(flatButton);
|
||||
view->setBackgroundRole(QPalette::Base);
|
||||
|
||||
Frame *frame = new Frame;
|
||||
frame->setCodeSnippet(
|
||||
"FlatButton *flatButton = new FlatButton;\n"
|
||||
"flatButton->setText(\"Press me!\");"
|
||||
);
|
||||
frame->setWidget(view);
|
||||
|
||||
layout->addWidget(frame);
|
||||
}
|
||||
{
|
||||
FlatButton *flatButton = new FlatButton;
|
||||
flatButton->setText("Press me!");
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
RaisedButtonExamples::RaisedButtonExamples(QWidget *parent)
|
||||
: ExampleList(parent)
|
||||
{
|
||||
|
||||
QLayout *layout = widget()->layout();
|
||||
|
||||
RaisedButton *raisedButton = new RaisedButton;
|
||||
|
@ -20,7 +21,6 @@ RaisedButtonExamples::RaisedButtonExamples(QWidget *parent)
|
|||
layout->addWidget(raisedButton);
|
||||
//layout->setAlignment(raisedButton, Qt::AlignHCenter);
|
||||
|
||||
|
||||
QPushButton *pb = new QPushButton;
|
||||
pb->setText("Press me!");
|
||||
|
||||
|
|
Loading…
Reference in New Issue