make it possible to center ripple in flat button

This commit is contained in:
laserpants 2016-05-28 11:22:43 +03:00
parent 078c3699cc
commit 921bc2aff4
3 changed files with 25 additions and 3 deletions

View File

@ -68,6 +68,13 @@ FlatButton::~FlatButton()
{ {
} }
void FlatButton::setRippleStyle(RippleStyle style)
{
Q_D(FlatButton);
d->rippleStyle = style;
}
void FlatButton::setRole(Material::Role role) void FlatButton::setRole(Material::Role role)
{ {
Q_D(FlatButton); Q_D(FlatButton);
@ -163,12 +170,17 @@ void FlatButton::mousePressEvent(QMouseEvent *event)
{ {
Q_D(FlatButton); Q_D(FlatButton);
if (FlatButton::NoRipple == d->rippleStyle) {
return;
}
QColor color = palette().color(QPalette::Active, QPalette::ButtonText); QColor color = palette().color(QPalette::Active, QPalette::ButtonText);
Ripple *ripple = new Ripple(event->pos()); Ripple *ripple = new Ripple(FlatButton::CenteredRipple == d->rippleStyle
? rect().center() : event->pos());
ripple->setRadiusEndValue(100); ripple->setRadiusEndValue(100);
ripple->setOpacityStartValue(0.4); ripple->setOpacityStartValue(0.4);
ripple->setColor(color); ripple->setColor(color);
d->ripple->addRipple(ripple); d->ripple->addRipple(ripple);

View File

@ -12,12 +12,20 @@ class FlatButton : public QPushButton
Q_OBJECT Q_OBJECT
public: public:
enum RippleStyle {
CenteredRipple,
PositionedRipple,
NoRipple
};
explicit FlatButton(QWidget *parent = 0); explicit FlatButton(QWidget *parent = 0);
explicit FlatButton(const QString &text, QWidget *parent = 0); explicit FlatButton(const QString &text, QWidget *parent = 0);
~FlatButton(); ~FlatButton();
virtual void setRole(Material::Role role); virtual void setRole(Material::Role role);
void setRippleStyle(RippleStyle style);
protected: protected:
FlatButton(FlatButtonPrivate &d, QWidget *parent = 0); FlatButton(FlatButtonPrivate &d, QWidget *parent = 0);

View File

@ -17,7 +17,8 @@ class FlatButtonPrivate
public: public:
FlatButtonPrivate(FlatButton *q) FlatButtonPrivate(FlatButton *q)
: q_ptr(q), : q_ptr(q),
role(Material::Default) role(Material::Default),
rippleStyle(FlatButton::PositionedRipple)
{} {}
void init(); void init();
@ -27,6 +28,7 @@ public:
RippleOverlay *ripple; RippleOverlay *ripple;
FlatButtonDelegate *delegate; FlatButtonDelegate *delegate;
Material::Role role; Material::Role role;
FlatButton::RippleStyle rippleStyle;
}; };
#endif // FLATBUTTON_P_H #endif // FLATBUTTON_P_H