summary refs log tree commit diff
path: root/src/ui/RippleOverlay.cpp
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-17 16:37:25 +0300
commit0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a (patch)
tree21f655d30630fe77ba48d07e4b357e2b6c6a5730 /src/ui/RippleOverlay.cpp
parentMerge pull request #372 from bebehei/notification (diff)
downloadnheko-0e814da91c8e041897a4c3f7e6e9234bbc7c6f7a.tar.xz
Move all files under src/
Diffstat (limited to 'src/ui/RippleOverlay.cpp')
-rw-r--r--src/ui/RippleOverlay.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/ui/RippleOverlay.cpp b/src/ui/RippleOverlay.cpp
new file mode 100644

index 00000000..20e98c0f --- /dev/null +++ b/src/ui/RippleOverlay.cpp
@@ -0,0 +1,62 @@ +#include <QPainter> + +#include "Ripple.h" +#include "RippleOverlay.h" + +RippleOverlay::RippleOverlay(QWidget *parent) + : OverlayWidget(parent) + , use_clip_(false) +{ + setAttribute(Qt::WA_TransparentForMouseEvents); + setAttribute(Qt::WA_NoSystemBackground); +} + +void +RippleOverlay::addRipple(Ripple *ripple) +{ + ripple->setOverlay(this); + ripples_.push_back(ripple); + ripple->start(); +} + +void +RippleOverlay::addRipple(const QPoint &position, qreal radius) +{ + Ripple *ripple = new Ripple(position); + ripple->setRadiusEndValue(radius); + addRipple(ripple); +} + +void +RippleOverlay::removeRipple(Ripple *ripple) +{ + if (ripples_.removeOne(ripple)) + delete ripple; +} + +void +RippleOverlay::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event) + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.setPen(Qt::NoPen); + + if (use_clip_) + painter.setClipPath(clip_path_); + + for (auto it = ripples_.constBegin(); it != ripples_.constEnd(); ++it) + paintRipple(&painter, *it); +} + +void +RippleOverlay::paintRipple(QPainter *painter, Ripple *ripple) +{ + const qreal radius = ripple->radius(); + const QPointF center = ripple->center(); + + painter->setOpacity(ripple->opacity()); + painter->setBrush(ripple->brush()); + painter->drawEllipse(center, radius, radius); +}