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