From fdfa43c093448ab93e494ed4c36edcdc12a08d56 Mon Sep 17 00:00:00 2001 From: Gres Date: Thu, 11 Nov 2021 11:20:50 +0300 Subject: [PATCH] Fix multi-monitor configurations with primary not right/bottom --- src/capture/captureareaselector.cpp | 6 ++++-- src/capture/captureareaselector.h | 4 +++- src/capture/capturer.cpp | 6 +++++- src/capture/capturer.h | 1 + 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/capture/captureareaselector.cpp b/src/capture/captureareaselector.cpp index 7af9602..a719293 100644 --- a/src/capture/captureareaselector.cpp +++ b/src/capture/captureareaselector.cpp @@ -22,10 +22,12 @@ static bool notLocked(const std::shared_ptr &area) CaptureAreaSelector::CaptureAreaSelector(Capturer &capturer, const Settings &settings, const CommonModels &models, - const QPixmap &pixmap) + const QPixmap &pixmap, + const QPoint &pixmapOffset) : capturer_(capturer) , settings_(settings) , pixmap_(pixmap) + , pixmapOffset_(pixmapOffset) , editor_(std::make_unique(models, this)) , contextMenu_(new QMenu(this)) { @@ -56,7 +58,7 @@ CaptureAreaSelector::~CaptureAreaSelector() = default; void CaptureAreaSelector::activate() { - setGeometry(pixmap_.rect()); + setGeometry(QRect(pixmapOffset_, pixmap_.size())); show(); activateWindow(); } diff --git a/src/capture/captureareaselector.h b/src/capture/captureareaselector.h index 1d5e428..5dadf91 100644 --- a/src/capture/captureareaselector.h +++ b/src/capture/captureareaselector.h @@ -12,7 +12,8 @@ class CaptureAreaSelector : public QWidget public: CaptureAreaSelector(Capturer &capturer, const Settings &settings, - const CommonModels &models, const QPixmap &pixmap); + const CommonModels &models, const QPixmap &pixmap, + const QPoint &pixmapOffset); ~CaptureAreaSelector(); void activate(); @@ -50,6 +51,7 @@ private: Capturer &capturer_; const Settings &settings_; const QPixmap &pixmap_; + const QPoint &pixmapOffset_; Generation generation_{}; QPoint startSelectPos_; QPoint currentSelectPos_; diff --git a/src/capture/capturer.cpp b/src/capture/capturer.cpp index 51b0b26..d186365 100644 --- a/src/capture/capturer.cpp +++ b/src/capture/capturer.cpp @@ -15,7 +15,7 @@ Capturer::Capturer(Manager &manager, const Settings &settings, : manager_(manager) , settings_(settings) , selector_(std::make_unique(*this, settings_, models, - pixmap_)) + pixmap_, pixmapOffset_)) { } @@ -56,6 +56,7 @@ void Capturer::updatePixmap() QPixmap combined(rect.size()); QPainter p(&combined); + p.translate(-rect.topLeft()); for (const auto screen : screens) { const auto geometry = screen->geometry(); @@ -66,6 +67,9 @@ void Capturer::updatePixmap() SOFT_ASSERT(selector_, return ); pixmap_ = combined; + pixmapOffset_ = rect.topLeft(); + + for (auto &r : screenRects) r.translate(-rect.topLeft()); selector_->setScreenRects(screenRects); } diff --git a/src/capture/capturer.h b/src/capture/capturer.h index e49afbe..0b78606 100644 --- a/src/capture/capturer.h +++ b/src/capture/capturer.h @@ -26,5 +26,6 @@ private: Manager &manager_; const Settings &settings_; QPixmap pixmap_; + QPoint pixmapOffset_; std::unique_ptr selector_; };