add ripple brush accessors

This commit is contained in:
laserpants 2016-05-14 21:32:36 +03:00
parent 3d2084d99e
commit 2601b2e39e
4 changed files with 24 additions and 7 deletions

View File

@ -14,6 +14,9 @@ Ripple::Ripple(const QPoint &center, 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;

View File

@ -5,6 +5,7 @@
#include <QPoint>
#include <QParallelAnimationGroup>
#include <QPropertyAnimation>
#include <QBrush>
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 &center() const { return _center; }
inline void setDuration(int duration)
@ -51,6 +58,7 @@ private:
qreal _radius;
qreal _opacity;
QPoint _center;
QBrush _brush;
};
#endif // RIPPLE_H

View File

@ -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<Ripple *>::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 &center = ripple->center();
painter.setOpacity(ripple->opacity());
painter.setBrush(ripple->brush());
painter.drawEllipse(center, radius, radius);
}

View File

@ -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;