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