Fix multi-monitor configurations with primary not right/bottom
This commit is contained in:
parent
af15301bf1
commit
fdfa43c093
@ -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();
|
||||
}
|
||||
|
@ -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_;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -26,5 +26,6 @@ private:
|
||||
Manager &manager_;
|
||||
const Settings &settings_;
|
||||
QPixmap pixmap_;
|
||||
QPoint pixmapOffset_;
|
||||
std::unique_ptr<CaptureAreaSelector> selector_;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user