refactor theme hooks

This commit is contained in:
laserpants 2016-05-30 19:03:41 +03:00
parent 0a79208ab4
commit e3517e11d1
9 changed files with 143 additions and 44 deletions

View File

@ -9,6 +9,15 @@
#include "lib/ripple.h" #include "lib/ripple.h"
#include "flatbutton_p.h" #include "flatbutton_p.h"
FlatButtonPrivate::FlatButtonPrivate(FlatButton *q)
: q_ptr(q),
role(Material::Default),
rippleStyle(Material::PositionedRipple),
cornerRadius(3),
bgMode(Qt::TransparentMode)
{
}
void FlatButtonPrivate::init() void FlatButtonPrivate::init()
{ {
Q_Q(FlatButton); Q_Q(FlatButton);
@ -27,26 +36,27 @@ void FlatButtonPrivate::init()
font.setPointSizeF(10.5); font.setPointSizeF(10.5);
font.setStyleName("Medium"); font.setStyleName("Medium");
q->setFont(font); q->setFont(font);
QPalette palette;
palette.setColor(QPalette::Disabled, QPalette::ButtonText,
style.themeColor("disabled"));
q->setPalette(palette);
} }
/*
void FlatButtonPrivate::setPaletteColor(QPalette::ColorGroup group, void FlatButtonPrivate::setPaletteColor(QPalette::ColorGroup group,
QPalette::ColorRole role, QPalette::ColorRole role,
const QString &themeColor) const QColor &color)
{ {
Q_Q(FlatButton); Q_Q(FlatButton);
QPalette palette(q->palette()); QPalette palette(q->palette());
Style &style = Style::instance(); palette.setColor(group, role, color);
palette.setColor(group, role, style.themeColor(themeColor));
q->setPalette(palette); 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) FlatButton::FlatButton(QWidget *parent)
: QPushButton(parent), : QPushButton(parent),
@ -112,26 +122,72 @@ Qt::BGMode FlatButton::bgMode() const
return d->bgMode; return d->bgMode;
} }
void FlatButton::setPrimaryTextColor(const QColor &color)
{
Q_D(FlatButton);
d->primaryTextColor = color;
d->delegate->updatePalette();
}
QColor FlatButton::primaryTextColor() const
{
Q_D(const FlatButton);
return d->primaryTextColor;
}
void FlatButton::setSecondaryTextColor(const QColor &color)
{
Q_D(FlatButton);
d->secondaryTextColor = color;
d->delegate->updatePalette();
}
QColor FlatButton::secondaryTextColor() const
{
Q_D(const FlatButton);
return d->secondaryTextColor;
}
void FlatButton::setDefaultTextColor(const QColor &color)
{
Q_D(FlatButton);
d->defaultTextColor = color;
d->delegate->updatePalette();
}
QColor FlatButton::defaultTextColor() const
{
Q_D(const FlatButton);
return d->defaultTextColor;
}
void FlatButton::setDisabledTextColor(const QColor &color)
{
Q_D(FlatButton);
d->disabledTextColor = color;
d->delegate->updatePalette();
}
QColor FlatButton::disabledTextColor() const
{
Q_D(const FlatButton);
return d->disabledTextColor;
}
void FlatButton::setRole(Material::Role role) void FlatButton::setRole(Material::Role role)
{ {
Q_D(FlatButton); Q_D(FlatButton);
d->role = role; d->role = role;
d->delegate->updatePalette();
switch (role)
{
case Material::Primary:
d->setPaletteColor(QPalette::Active, QPalette::ButtonText, "primary1");
break;
case Material::Secondary:
d->setPaletteColor(QPalette::Active, QPalette::ButtonText, "accent1");
break;
default:
d->setPaletteColor(QPalette::Active, QPalette::ButtonText, "text");
break;
}
d->delegate->assignProperties();
update();
} }
Material::Role FlatButton::role() const Material::Role FlatButton::role() const

View File

@ -15,6 +15,10 @@ class FlatButton : public QPushButton
Q_PROPERTY(Material::RippleStyle rippleStyle WRITE setRippleStyle READ rippleStyle) Q_PROPERTY(Material::RippleStyle rippleStyle WRITE setRippleStyle READ rippleStyle)
Q_PROPERTY(qreal cornerRadius WRITE setCornerRadius READ cornerRadius) Q_PROPERTY(qreal cornerRadius WRITE setCornerRadius READ cornerRadius)
Q_PROPERTY(Qt::BGMode bgMode WRITE setBgMode READ bgMode) Q_PROPERTY(Qt::BGMode bgMode WRITE setBgMode READ bgMode)
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)
public: public:
explicit FlatButton(QWidget *parent = 0); explicit FlatButton(QWidget *parent = 0);
@ -33,6 +37,18 @@ public:
void setBgMode(Qt::BGMode mode); void setBgMode(Qt::BGMode mode);
Qt::BGMode bgMode() const; Qt::BGMode bgMode() const;
void setPrimaryTextColor(const QColor &color);
QColor primaryTextColor() const;
void setSecondaryTextColor(const QColor &color);
QColor secondaryTextColor() const;
void setDefaultTextColor(const QColor &color);
QColor defaultTextColor() const;
void setDisabledTextColor(const QColor &color);
QColor disabledTextColor() const;
protected: protected:
FlatButton(FlatButtonPrivate &d, QWidget *parent = 0); FlatButton(FlatButtonPrivate &d, QWidget *parent = 0);

View File

@ -19,7 +19,7 @@ FlatButtonDelegate::FlatButtonDelegate(FlatButton *parent)
{ {
setInitialState(_normalState); setInitialState(_normalState);
assignProperties(); updatePalette();
addTransition(QEvent::Enter, _normalFocusedState, _hoveredFocusedState); addTransition(QEvent::Enter, _normalFocusedState, _hoveredFocusedState);
addTransition(QEvent::FocusIn, _normalState, _normalFocusedState); addTransition(QEvent::FocusIn, _normalState, _normalFocusedState);
@ -105,30 +105,49 @@ qreal FlatButtonDelegate::focusHaloSize() const
return _focusHaloSize; return _focusHaloSize;
} }
void FlatButtonDelegate::assignProperties() void FlatButtonDelegate::updatePalette()
{ {
QColor textColor = button->palette().color(QPalette::Active, QColor color;
QPalette::ButtonText);
switch (button->role())
{
case Material::Primary:
color = button->primaryTextColor();
break;
case Material::Secondary:
color = button->secondaryTextColor();
break;
case Material::Default:
default:
color = button->defaultTextColor();
}
QPalette palette(button->palette());
palette.setColor(QPalette::Active, QPalette::ButtonText, color);
palette.setColor(QPalette::Disabled, QPalette::ButtonText, button->disabledTextColor());
button->setPalette(palette);
_normalState->assignProperty(this, "backgroundOpacity", 0); _normalState->assignProperty(this, "backgroundOpacity", 0);
_normalState->assignProperty(this, "backgroundColor", textColor); _normalState->assignProperty(this, "backgroundColor", color);
_normalState->assignProperty(this, "focusHaloOpacity", 0); _normalState->assignProperty(this, "focusHaloOpacity", 0);
_normalFocusedState->assignProperty(this, "backgroundOpacity", 0); _normalFocusedState->assignProperty(this, "backgroundOpacity", 0);
_normalFocusedState->assignProperty(this, "backgroundColor", textColor); _normalFocusedState->assignProperty(this, "backgroundColor", color);
_normalFocusedState->assignProperty(this, "focusHaloOpacity", 0.15); _normalFocusedState->assignProperty(this, "focusHaloOpacity", 0.15);
_hoveredState->assignProperty(this, "backgroundOpacity", 0.15); _hoveredState->assignProperty(this, "backgroundOpacity", 0.15);
_hoveredState->assignProperty(this, "backgroundColor", textColor); _hoveredState->assignProperty(this, "backgroundColor", color);
_hoveredState->assignProperty(this, "focusHaloOpacity", 0); _hoveredState->assignProperty(this, "focusHaloOpacity", 0);
_hoveredFocusedState->assignProperty(this, "backgroundOpacity", 0.15); _hoveredFocusedState->assignProperty(this, "backgroundOpacity", 0.15);
_hoveredFocusedState->assignProperty(this, "backgroundColor", textColor); _hoveredFocusedState->assignProperty(this, "backgroundColor", color);
_normalFocusedState->assignProperty(this, "focusHaloOpacity", 0.15); _normalFocusedState->assignProperty(this, "focusHaloOpacity", 0.15);
_pressedState->assignProperty(this, "backgroundOpacity", 0.15); _pressedState->assignProperty(this, "backgroundOpacity", 0.15);
_pressedState->assignProperty(this, "backgroundColor", textColor); _pressedState->assignProperty(this, "backgroundColor", color);
_pressedState->assignProperty(this, "focusHaloOpacity", 0); _pressedState->assignProperty(this, "focusHaloOpacity", 0);
button->update();
} }
void FlatButtonDelegate::addTransition(QEvent::Type eventType, void FlatButtonDelegate::addTransition(QEvent::Type eventType,

View File

@ -32,7 +32,7 @@ public:
void setFocusHaloSize(qreal size); void setFocusHaloSize(qreal size);
qreal focusHaloSize() const; qreal focusHaloSize() const;
void assignProperties(); void updatePalette();
private: private:
Q_DISABLE_COPY(FlatButtonDelegate) Q_DISABLE_COPY(FlatButtonDelegate)

View File

@ -15,16 +15,13 @@ class FlatButtonPrivate
Q_DECLARE_PUBLIC(FlatButton) Q_DECLARE_PUBLIC(FlatButton)
public: public:
FlatButtonPrivate(FlatButton *q) FlatButtonPrivate(FlatButton *q);
: q_ptr(q),
role(Material::Default),
rippleStyle(Material::PositionedRipple),
cornerRadius(3),
bgMode(Qt::TransparentMode)
{}
void init(); void init();
void setPaletteColor(QPalette::ColorGroup group, QPalette::ColorRole role, const QString &themeColor);
/*
void setPaletteColor(QPalette::ColorGroup group, QPalette::ColorRole role, const QColor &color);
*/
FlatButton *const q_ptr; FlatButton *const q_ptr;
RippleOverlay *ripple; RippleOverlay *ripple;
@ -33,6 +30,10 @@ public:
Material::RippleStyle rippleStyle; Material::RippleStyle rippleStyle;
qreal cornerRadius; qreal cornerRadius;
Qt::BGMode bgMode; Qt::BGMode bgMode;
QColor primaryTextColor;
QColor secondaryTextColor;
QColor defaultTextColor;
QColor disabledTextColor;
}; };
#endif // FLATBUTTON_P_H #endif // FLATBUTTON_P_H

View File

@ -1,6 +1,8 @@
#ifndef ICONBUTTON_P_H #ifndef ICONBUTTON_P_H
#define ICONBUTTON_P_H #define ICONBUTTON_P_H
#include <QObject>
class IconButton; class IconButton;
class RippleOverlay; class RippleOverlay;
@ -14,7 +16,7 @@ public:
void init(); void init();
IconButton *const q_ptr; IconButton *const q_ptr;
RippleOverlay *ripple; RippleOverlay *ripple;
}; };

View File

@ -103,6 +103,7 @@ void RaisedButton::setRole(Material::Role role)
d->role = role; d->role = role;
/*
switch (role) switch (role)
{ {
case Material::Primary: case Material::Primary:
@ -120,6 +121,7 @@ void RaisedButton::setRole(Material::Role role)
} }
d->delegate->assignProperties(); d->delegate->assignProperties();
update(); update();
*/
} }
bool RaisedButton::event(QEvent *event) bool RaisedButton::event(QEvent *event)

View File

@ -25,6 +25,7 @@ void TogglePrivate::init()
ripple = new RippleOverlay(q->parentWidget()); ripple = new RippleOverlay(q->parentWidget());
q->setCheckable(true); q->setCheckable(true);
q->setChecked(false);
q->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); q->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
QState *offState = new QState; QState *offState = new QState;

View File

@ -1,6 +1,7 @@
#include <QPainter> #include <QPainter>
#include <QEvent> #include <QEvent>
#include <QGraphicsDropShadowEffect> #include <QGraphicsDropShadowEffect>
#include <QDebug>
#include "lib/style.h" #include "lib/style.h"
#include "toggle_internal.h" #include "toggle_internal.h"
#include "toggle.h" #include "toggle.h"
@ -84,6 +85,7 @@ void ToggleThumb::mouseReleaseEvent(QMouseEvent *event)
if (_toggle->isEnabled()) { if (_toggle->isEnabled()) {
const bool newChecked = !_toggle->isChecked(); const bool newChecked = !_toggle->isChecked();
_toggle->setChecked(newChecked); _toggle->setChecked(newChecked);
qDebug() << "checked : " << newChecked;
emit clicked(newChecked); emit clicked(newChecked);
} }
QWidget::mouseReleaseEvent(event); QWidget::mouseReleaseEvent(event);