diff --git a/lib/ripple.cpp b/lib/ripple.cpp index 7f92da0..d204d75 100644 --- a/lib/ripple.cpp +++ b/lib/ripple.cpp @@ -14,6 +14,9 @@ Ripple::Ripple(const QPoint ¢er, QObject *parent) setOpacityEndValue(0); setRadiusStartValue(0); setRadiusEndValue(300); + + _brush.setColor(Qt::black); + _brush.setStyle(Qt::SolidPattern); } Ripple::~Ripple() @@ -38,6 +41,14 @@ void Ripple::setOpacity(qreal opacity) emit changed(); } +void Ripple::setColor(const QColor &color) +{ + if (color == _brush.color()) + return; + + _brush.setColor(color); +} + QPropertyAnimation *Ripple::animate(const QByteArray &property) { QPropertyAnimation *animation = new QPropertyAnimation; diff --git a/lib/ripple.h b/lib/ripple.h index 807979d..6ff852f 100644 --- a/lib/ripple.h +++ b/lib/ripple.h @@ -5,6 +5,7 @@ #include #include #include +#include class Ripple : public QObject { @@ -23,6 +24,12 @@ public: void setOpacity(qreal opacity); inline qreal opacity() const { return _opacity; } + void setColor(const QColor &color); + inline QColor color() const { return _brush.color(); } + + inline void setBrush(const QBrush &brush) { _brush = brush; } + inline QBrush brush() const { return _brush; } + inline const QPoint ¢er() const { return _center; } inline void setDuration(int duration) @@ -51,6 +58,7 @@ private: qreal _radius; qreal _opacity; QPoint _center; + QBrush _brush; }; #endif // RIPPLE_H diff --git a/lib/rippleoverlay.cpp b/lib/rippleoverlay.cpp index b1864a6..4a10f89 100644 --- a/lib/rippleoverlay.cpp +++ b/lib/rippleoverlay.cpp @@ -14,10 +14,11 @@ RippleOverlay::~RippleOverlay() { } -void RippleOverlay::addRipple(const QPoint &position, qreal radius) +void RippleOverlay::addRipple(const QPoint &position, const QColor &color, qreal radius) { Ripple *ripple = new Ripple(position); ripple->setRadiusEndValue(radius); + ripple->setColor(color); ripples.push_back(ripple); connect(ripple, SIGNAL(changed()), this, SLOT(update())); connect(ripple, SIGNAL(finished()), this, SLOT(deleteRipple())); @@ -31,11 +32,6 @@ void RippleOverlay::paintEvent(QPaintEvent *event) QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); - QBrush brush; - brush.setColor(Qt::black); - brush.setStyle(Qt::SolidPattern); - painter.setBrush(brush); - QList::const_iterator i; for (i = ripples.begin(); i != ripples.end(); ++i) { @@ -43,6 +39,7 @@ void RippleOverlay::paintEvent(QPaintEvent *event) const qreal radius = ripple->radius(); const QPointF ¢er = ripple->center(); painter.setOpacity(ripple->opacity()); + painter.setBrush(ripple->brush()); painter.drawEllipse(center, radius, radius); } diff --git a/lib/rippleoverlay.h b/lib/rippleoverlay.h index 2ac690c..3b9fd97 100644 --- a/lib/rippleoverlay.h +++ b/lib/rippleoverlay.h @@ -13,7 +13,8 @@ public: explicit RippleOverlay(QWidget *parent = 0); ~RippleOverlay(); - void addRipple(const QPoint &position, qreal radius = 300); + void addRipple(const QPoint &position, const QColor &color = Qt::black, + qreal radius = 300); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;