From 6336d3545ae001ef2c52ed438230565cc610496a Mon Sep 17 00:00:00 2001 From: Gres Date: Sun, 22 Mar 2020 14:32:51 +0300 Subject: [PATCH] Change overlay drawing --- src/capture/captureareaselector.cpp | 40 ++++++++++++++--------------- src/capture/captureareaselector.h | 7 ++--- src/capture/capturer.cpp | 4 +-- src/capture/capturer.h | 3 ++- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/capture/captureareaselector.cpp b/src/capture/captureareaselector.cpp index 5dfa544..97f7e6e 100644 --- a/src/capture/captureareaselector.cpp +++ b/src/capture/captureareaselector.cpp @@ -1,38 +1,33 @@ #include "captureareaselector.h" +#include "capturearea.h" #include "capturer.h" #include "languagecodes.h" #include "settings.h" -#include "task.h" #include #include CaptureAreaSelector::CaptureAreaSelector(Capturer &capturer, - const Settings &settings) + const Settings &settings, + const QPixmap &pixmap) : capturer_(capturer) , settings_(settings) + , pixmap_(pixmap) { setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); setCursor(Qt::CrossCursor); setMouseTracking(true); + setAttribute(Qt::WA_OpaquePaintEvent); } void CaptureAreaSelector::activate() { + setGeometry(pixmap_.rect()); show(); activateWindow(); } -void CaptureAreaSelector::setPixmap(const QPixmap &pixmap) -{ - pixmap_ = pixmap; - auto palette = this->palette(); - palette.setBrush(backgroundRole(), pixmap); - setPalette(palette); - setGeometry(pixmap_.rect()); -} - void CaptureAreaSelector::setScreenRects(const std::vector &screens) { auto helpRect = fontMetrics().boundingRect({}, 0, help_); @@ -79,16 +74,9 @@ void CaptureAreaSelector::keyPressEvent(QKeyEvent *event) void CaptureAreaSelector::paintEvent(QPaintEvent * /*event*/) { QPainter painter(this); + painter.drawPixmap(rect(), pixmap_); - for (auto &screenHelp : helpRects_) { - painter.setBrush(QBrush(QColor(200, 200, 200, 200))); - painter.setPen(Qt::NoPen); - painter.drawRect(screenHelp.current); - - painter.setBrush({}); - painter.setPen(Qt::black); - painter.drawText(screenHelp.current, Qt::AlignCenter, help_); - } + for (const auto &rect : helpRects_) drawHelpRects(painter, rect); auto selection = QRect(startSelectPos_, currentSelectPos_).normalized(); if (!selection.isValid()) @@ -121,6 +109,18 @@ bool CaptureAreaSelector::updateCurrentHelpRects() return changed; } +void CaptureAreaSelector::drawHelpRects(QPainter &painter, + const HelpRect &rect) const +{ + painter.setBrush(QBrush(QColor(200, 200, 200, 200))); + painter.setPen(Qt::NoPen); + painter.drawRect(rect.current); + + painter.setBrush({}); + painter.setPen(Qt::black); + painter.drawText(rect.current, Qt::AlignCenter, help_); +} + void CaptureAreaSelector::mousePressEvent(QMouseEvent *event) { if (startSelectPos_.isNull()) diff --git a/src/capture/captureareaselector.h b/src/capture/captureareaselector.h index 52d3fe9..188288c 100644 --- a/src/capture/captureareaselector.h +++ b/src/capture/captureareaselector.h @@ -9,10 +9,10 @@ class CaptureAreaSelector : public QWidget Q_OBJECT public: - CaptureAreaSelector(Capturer &capturer, const Settings &settings); + CaptureAreaSelector(Capturer &capturer, const Settings &settings, + const QPixmap &pixmap); void activate(); - void setPixmap(const QPixmap &pixmap); void setScreenRects(const std::vector &screens); void updateSettings(); @@ -31,10 +31,11 @@ private: }; bool updateCurrentHelpRects(); + void drawHelpRects(QPainter &painter, const HelpRect &rect) const; Capturer &capturer_; const Settings &settings_; - QPixmap pixmap_; + const QPixmap &pixmap_; QPoint startSelectPos_; QPoint currentSelectPos_; QString help_; diff --git a/src/capture/capturer.cpp b/src/capture/capturer.cpp index a0466ce..e49abf4 100644 --- a/src/capture/capturer.cpp +++ b/src/capture/capturer.cpp @@ -12,7 +12,7 @@ Capturer::Capturer(Manager &manager, const Settings &settings) : manager_(manager) , settings_(settings) - , selector_(std::make_unique(*this, settings_)) + , selector_(std::make_unique(*this, settings_, pixmap_)) { } @@ -49,7 +49,7 @@ void Capturer::updatePixmap() } SOFT_ASSERT(selector_, return ); - selector_->setPixmap(combined); + pixmap_ = combined; selector_->setScreenRects(screenRects); } diff --git a/src/capture/capturer.h b/src/capture/capturer.h index 78ac2e1..799aa74 100644 --- a/src/capture/capturer.h +++ b/src/capture/capturer.h @@ -2,7 +2,7 @@ #include "stfwd.h" -#include +#include class Capturer { @@ -22,5 +22,6 @@ private: Manager &manager_; const Settings &settings_; + QPixmap pixmap_; std::unique_ptr selector_; };