From 18ea4136b75a5c25f0e1c392a27d28824cfd914c Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 7 Jul 2023 14:45:58 +0300 Subject: [PATCH] Added helper class for tempered opacity in QPainter. --- ui/painter.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ui/painter.h b/ui/painter.h index 4d15b82..5bbbfd0 100644 --- a/ui/painter.h +++ b/ui/painter.h @@ -135,3 +135,30 @@ private: QPainter::RenderHints _hints; }; + +class ScopedPainterOpacity { +public: + ScopedPainterOpacity(QPainter &p, float64 nowOpacity) + : _painter(p) + , _wasOpacity(p.opacity()) { + if (_wasOpacity != nowOpacity) { + _painter.setOpacity(nowOpacity); + } + } + + ScopedPainterOpacity( + const ScopedPainterOpacity &other) = delete; + ScopedPainterOpacity &operator=( + const ScopedPainterOpacity &other) = delete; + + ~ScopedPainterOpacity() { + if (_painter.isActive()) { + _painter.setOpacity(_wasOpacity); + } + } + +private: + QPainter &_painter; + const float64 _wasOpacity; + +};