From 921bc2aff4d57fd31aa4db0dd6473c125f751dfa Mon Sep 17 00:00:00 2001 From: laserpants Date: Sat, 28 May 2016 11:22:43 +0300 Subject: [PATCH] make it possible to center ripple in flat button --- components/flatbutton.cpp | 16 ++++++++++++++-- components/flatbutton.h | 8 ++++++++ components/flatbutton_p.h | 4 +++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/components/flatbutton.cpp b/components/flatbutton.cpp index 36f947e..7c45cb5 100644 --- a/components/flatbutton.cpp +++ b/components/flatbutton.cpp @@ -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); diff --git a/components/flatbutton.h b/components/flatbutton.h index 0de44eb..253cb63 100644 --- a/components/flatbutton.h +++ b/components/flatbutton.h @@ -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); diff --git a/components/flatbutton_p.h b/components/flatbutton_p.h index ccc7750..30c8b91 100644 --- a/components/flatbutton_p.h +++ b/components/flatbutton_p.h @@ -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