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)
{
Q_D(FlatButton);
@ -163,12 +170,17 @@ void FlatButton::mousePressEvent(QMouseEvent *event)
{
Q_D(FlatButton);
if (FlatButton::NoRipple == d->rippleStyle) {
return;
}
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->setOpacityStartValue(0.4);
ripple->setColor(color);
d->ripple->addRipple(ripple);

View File

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

View File

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