Fix multi-monitor configurations with primary not right/bottom

This commit is contained in:
Gres 2021-11-11 11:20:50 +03:00
parent af15301bf1
commit fdfa43c093
4 changed files with 13 additions and 4 deletions

View File

@ -22,10 +22,12 @@ static bool notLocked(const std::shared_ptr<CaptureArea> &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<CaptureAreaEditor>(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();
}

View File

@ -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_;

View File

@ -15,7 +15,7 @@ Capturer::Capturer(Manager &manager, const Settings &settings,
: manager_(manager)
, settings_(settings)
, selector_(std::make_unique<CaptureAreaSelector>(*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);
}

View File

@ -26,5 +26,6 @@ private:
Manager &manager_;
const Settings &settings_;
QPixmap pixmap_;
QPoint pixmapOffset_;
std::unique_ptr<CaptureAreaSelector> selector_;
};