Change overlay drawing
This commit is contained in:
		
							parent
							
								
									295353332f
								
							
						
					
					
						commit
						6336d3545a
					
				@ -1,38 +1,33 @@
 | 
				
			|||||||
#include "captureareaselector.h"
 | 
					#include "captureareaselector.h"
 | 
				
			||||||
 | 
					#include "capturearea.h"
 | 
				
			||||||
#include "capturer.h"
 | 
					#include "capturer.h"
 | 
				
			||||||
#include "languagecodes.h"
 | 
					#include "languagecodes.h"
 | 
				
			||||||
#include "settings.h"
 | 
					#include "settings.h"
 | 
				
			||||||
#include "task.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QMouseEvent>
 | 
					#include <QMouseEvent>
 | 
				
			||||||
#include <QPainter>
 | 
					#include <QPainter>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CaptureAreaSelector::CaptureAreaSelector(Capturer &capturer,
 | 
					CaptureAreaSelector::CaptureAreaSelector(Capturer &capturer,
 | 
				
			||||||
                                         const Settings &settings)
 | 
					                                         const Settings &settings,
 | 
				
			||||||
 | 
					                                         const QPixmap &pixmap)
 | 
				
			||||||
  : capturer_(capturer)
 | 
					  : capturer_(capturer)
 | 
				
			||||||
  , settings_(settings)
 | 
					  , settings_(settings)
 | 
				
			||||||
 | 
					  , pixmap_(pixmap)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint |
 | 
					  setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint |
 | 
				
			||||||
                 Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
 | 
					                 Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
 | 
				
			||||||
  setCursor(Qt::CrossCursor);
 | 
					  setCursor(Qt::CrossCursor);
 | 
				
			||||||
  setMouseTracking(true);
 | 
					  setMouseTracking(true);
 | 
				
			||||||
 | 
					  setAttribute(Qt::WA_OpaquePaintEvent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CaptureAreaSelector::activate()
 | 
					void CaptureAreaSelector::activate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  setGeometry(pixmap_.rect());
 | 
				
			||||||
  show();
 | 
					  show();
 | 
				
			||||||
  activateWindow();
 | 
					  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<QRect> &screens)
 | 
					void CaptureAreaSelector::setScreenRects(const std::vector<QRect> &screens)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  auto helpRect = fontMetrics().boundingRect({}, 0, help_);
 | 
					  auto helpRect = fontMetrics().boundingRect({}, 0, help_);
 | 
				
			||||||
@ -79,16 +74,9 @@ void CaptureAreaSelector::keyPressEvent(QKeyEvent *event)
 | 
				
			|||||||
void CaptureAreaSelector::paintEvent(QPaintEvent * /*event*/)
 | 
					void CaptureAreaSelector::paintEvent(QPaintEvent * /*event*/)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  QPainter painter(this);
 | 
					  QPainter painter(this);
 | 
				
			||||||
 | 
					  painter.drawPixmap(rect(), pixmap_);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (auto &screenHelp : helpRects_) {
 | 
					  for (const auto &rect : helpRects_) drawHelpRects(painter, rect);
 | 
				
			||||||
    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_);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto selection = QRect(startSelectPos_, currentSelectPos_).normalized();
 | 
					  auto selection = QRect(startSelectPos_, currentSelectPos_).normalized();
 | 
				
			||||||
  if (!selection.isValid())
 | 
					  if (!selection.isValid())
 | 
				
			||||||
@ -121,6 +109,18 @@ bool CaptureAreaSelector::updateCurrentHelpRects()
 | 
				
			|||||||
  return changed;
 | 
					  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)
 | 
					void CaptureAreaSelector::mousePressEvent(QMouseEvent *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (startSelectPos_.isNull())
 | 
					  if (startSelectPos_.isNull())
 | 
				
			||||||
 | 
				
			|||||||
@ -9,10 +9,10 @@ class CaptureAreaSelector : public QWidget
 | 
				
			|||||||
  Q_OBJECT
 | 
					  Q_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  CaptureAreaSelector(Capturer &capturer, const Settings &settings);
 | 
					  CaptureAreaSelector(Capturer &capturer, const Settings &settings,
 | 
				
			||||||
 | 
					                      const QPixmap &pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void activate();
 | 
					  void activate();
 | 
				
			||||||
  void setPixmap(const QPixmap &pixmap);
 | 
					 | 
				
			||||||
  void setScreenRects(const std::vector<QRect> &screens);
 | 
					  void setScreenRects(const std::vector<QRect> &screens);
 | 
				
			||||||
  void updateSettings();
 | 
					  void updateSettings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -31,10 +31,11 @@ private:
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool updateCurrentHelpRects();
 | 
					  bool updateCurrentHelpRects();
 | 
				
			||||||
 | 
					  void drawHelpRects(QPainter &painter, const HelpRect &rect) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Capturer &capturer_;
 | 
					  Capturer &capturer_;
 | 
				
			||||||
  const Settings &settings_;
 | 
					  const Settings &settings_;
 | 
				
			||||||
  QPixmap pixmap_;
 | 
					  const QPixmap &pixmap_;
 | 
				
			||||||
  QPoint startSelectPos_;
 | 
					  QPoint startSelectPos_;
 | 
				
			||||||
  QPoint currentSelectPos_;
 | 
					  QPoint currentSelectPos_;
 | 
				
			||||||
  QString help_;
 | 
					  QString help_;
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@
 | 
				
			|||||||
Capturer::Capturer(Manager &manager, const Settings &settings)
 | 
					Capturer::Capturer(Manager &manager, const Settings &settings)
 | 
				
			||||||
  : manager_(manager)
 | 
					  : manager_(manager)
 | 
				
			||||||
  , settings_(settings)
 | 
					  , settings_(settings)
 | 
				
			||||||
  , selector_(std::make_unique<CaptureAreaSelector>(*this, settings_))
 | 
					  , selector_(std::make_unique<CaptureAreaSelector>(*this, settings_, pixmap_))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -49,7 +49,7 @@ void Capturer::updatePixmap()
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SOFT_ASSERT(selector_, return );
 | 
					  SOFT_ASSERT(selector_, return );
 | 
				
			||||||
  selector_->setPixmap(combined);
 | 
					  pixmap_ = combined;
 | 
				
			||||||
  selector_->setScreenRects(screenRects);
 | 
					  selector_->setScreenRects(screenRects);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "stfwd.h"
 | 
					#include "stfwd.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <vector>
 | 
					#include <QPixmap>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Capturer
 | 
					class Capturer
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -22,5 +22,6 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  Manager &manager_;
 | 
					  Manager &manager_;
 | 
				
			||||||
  const Settings &settings_;
 | 
					  const Settings &settings_;
 | 
				
			||||||
 | 
					  QPixmap pixmap_;
 | 
				
			||||||
  std::unique_ptr<CaptureAreaSelector> selector_;
 | 
					  std::unique_ptr<CaptureAreaSelector> selector_;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user