From d876ecc4437d32822381ea3aa8d39a5406bb92bd Mon Sep 17 00:00:00 2001 From: laserpants Date: Mon, 20 Jun 2016 22:02:24 +0300 Subject: [PATCH] remove changed signal from ripple --- lib/ripple.cpp | 17 ++++++++++++++--- lib/ripple.h | 8 ++++++-- lib/rippleoverlay.cpp | 4 ++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/ripple.cpp b/lib/ripple.cpp index ab458c1..b93eca9 100644 --- a/lib/ripple.cpp +++ b/lib/ripple.cpp @@ -1,7 +1,9 @@ #include "ripple.h" +#include "rippleoverlay.h" -Ripple::Ripple(const QPoint ¢er, QObject *parent) +Ripple::Ripple(const QPoint ¢er, RippleOverlay *overlay, QObject *parent) : QObject(parent), + _overlay(overlay), _radiusAnimation(animate("radius")), _opacityAnimation(animate("opacity")), _radius(0), @@ -23,22 +25,31 @@ Ripple::~Ripple() { } +void Ripple::setOverlay(RippleOverlay *overlay) +{ + _overlay = overlay; +} + void Ripple::setRadius(qreal radius) { + Q_ASSERT(_overlay); + if (radius == _radius) return; _radius = radius; - emit changed(); + _overlay->update(); } void Ripple::setOpacity(qreal opacity) { + Q_ASSERT(_overlay); + if (opacity == _opacity) return; _opacity = opacity; - emit changed(); + _overlay->update(); } void Ripple::setColor(const QColor &color) diff --git a/lib/ripple.h b/lib/ripple.h index 702b8e1..176ba27 100644 --- a/lib/ripple.h +++ b/lib/ripple.h @@ -7,6 +7,8 @@ #include #include +class RippleOverlay; + class Ripple : public QObject { Q_OBJECT @@ -15,9 +17,11 @@ class Ripple : public QObject Q_PROPERTY(qreal opacity WRITE setOpacity READ opacity) public: - explicit Ripple(const QPoint ¢er, QObject *parent = 0); + explicit Ripple(const QPoint ¢er, RippleOverlay *overlay = 0, QObject *parent = 0); ~Ripple(); + void setOverlay(RippleOverlay *overlay); + void setRadius(qreal radius); inline qreal radius() const { return _radius; } @@ -64,13 +68,13 @@ public: inline void startAnimation() { _group.start(); } signals: - void changed(); void finished(); private: QPropertyAnimation *animate(const QByteArray &property); QParallelAnimationGroup _group; + RippleOverlay *_overlay; QPropertyAnimation *const _radiusAnimation; QPropertyAnimation *const _opacityAnimation; qreal _radius; diff --git a/lib/rippleoverlay.cpp b/lib/rippleoverlay.cpp index 6e7a3b3..c4cc5bb 100644 --- a/lib/rippleoverlay.cpp +++ b/lib/rippleoverlay.cpp @@ -17,15 +17,15 @@ RippleOverlay::~RippleOverlay() void RippleOverlay::addRipple(const QPoint &position, qreal radius) { - Ripple *ripple = new Ripple(position); + Ripple *ripple = new Ripple(position, this); ripple->setRadiusEndValue(radius); addRipple(ripple); } void RippleOverlay::addRipple(Ripple *ripple) { + ripple->setOverlay(this); ripples.push_back(ripple); - connect(ripple, SIGNAL(changed()), this, SLOT(update())); connect(ripple, SIGNAL(finished()), this, SLOT(deleteRipple())); ripple->startAnimation(); }