From 369ed5adbbd8b507cfe7a222b4ccd7da5a1e5cfe Mon Sep 17 00:00:00 2001 From: laserpants Date: Sun, 12 Jun 2016 17:53:43 +0300 Subject: [PATCH] add support for clip region to Ripple --- lib/rippleoverlay.cpp | 7 ++++++- lib/rippleoverlay.h | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/rippleoverlay.cpp b/lib/rippleoverlay.cpp index c52e0a3..dbef8ee 100644 --- a/lib/rippleoverlay.cpp +++ b/lib/rippleoverlay.cpp @@ -4,7 +4,8 @@ #include "ripple.h" RippleOverlay::RippleOverlay(QWidget *parent) - : QWidget(parent) + : QWidget(parent), + useClip(false) { setAttribute(Qt::WA_TransparentForMouseEvents); setAttribute(Qt::WA_NoSystemBackground); @@ -44,6 +45,10 @@ void RippleOverlay::paintEvent(QPaintEvent *event) painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); + if (useClip) { + painter.setClipRegion(clipRegion); + } + QList::const_iterator i; for (i = ripples.begin(); i != ripples.end(); ++i) { diff --git a/lib/rippleoverlay.h b/lib/rippleoverlay.h index d0a9ef5..a30d020 100644 --- a/lib/rippleoverlay.h +++ b/lib/rippleoverlay.h @@ -18,6 +18,11 @@ public: void setColor(const QColor &color); + inline void setClipping(bool enabled) { useClip = enabled; update(); } + inline bool hasClipping() const { return useClip; } + + inline void setClipRegion(const QRegion ®ion) { clipRegion = region; update(); } + protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; @@ -26,6 +31,8 @@ protected slots: private: QList ripples; + QRegion clipRegion; + bool useClip; }; #endif // RIPPLEOVERLAY_H