1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Merge remote-tracking branch 'antis81/ngf/fix/screen-grabber'

This commit is contained in:
agilob 2015-09-29 19:36:36 +01:00
commit 9cafb31eca
No known key found for this signature in database
GPG Key ID: 296F0B764741106C
2 changed files with 20 additions and 28 deletions

View File

@ -34,8 +34,8 @@
#include "toolboxgraphicsitem.h" #include "toolboxgraphicsitem.h"
#include "src/widget/widget.h" #include "src/widget/widget.h"
ScreenshotGrabber::ScreenshotGrabber(QWidget* parent) ScreenshotGrabber::ScreenshotGrabber(QObject* parent)
: QWidget(parent) : QObject(parent)
{ {
scene = new QGraphicsScene; scene = new QGraphicsScene;
window = new QGraphicsView (scene); // Top-level widget window = new QGraphicsView (scene); // Top-level widget
@ -66,7 +66,7 @@ bool ScreenshotGrabber::eventFilter(QObject* object, QEvent* event)
if (event->type() == QEvent::KeyPress) if (event->type() == QEvent::KeyPress)
return handleKeyPress(static_cast<QKeyEvent*>(event)); return handleKeyPress(static_cast<QKeyEvent*>(event));
return QWidget::eventFilter(object, event); return QObject::eventFilter(object, event);
} }
void ScreenshotGrabber::showGrabber() void ScreenshotGrabber::showGrabber()
@ -76,7 +76,14 @@ void ScreenshotGrabber::showGrabber()
this->window->show(); this->window->show();
this->window->setFocus(); this->window->setFocus();
this->window->grabKeyboard(); this->window->grabKeyboard();
adjustWindowSize();
QRect fullGrabbedRect = screenGrab.rect();
QRect rec = QApplication::primaryScreen()->virtualGeometry();
this->window->setGeometry(rec);
this->scene->setSceneRect(fullGrabbedRect);
this->overlay->setRect(fullGrabbedRect);
adjustTooltipPosition(); adjustTooltipPosition();
} }
@ -191,28 +198,15 @@ void ScreenshotGrabber::reject()
Widget::getInstance()->setVisible(true); // show window if it was hidden Widget::getInstance()->setVisible(true); // show window if it was hidden
} }
QRect ScreenshotGrabber::getSystemScreenRect()
{
return QApplication::primaryScreen()->virtualGeometry();
}
void ScreenshotGrabber::adjustWindowSize()
{
QRect systemScreenRect = getSystemScreenRect();
qDebug() << "adjusting grabber size to" << systemScreenRect;
this->window->setGeometry(systemScreenRect);
this->window->scene()->setSceneRect(systemScreenRect);
this->overlay->setRect(systemScreenRect);
}
QPixmap ScreenshotGrabber::grabScreen() QPixmap ScreenshotGrabber::grabScreen()
{ {
QScreen* screen = QApplication::primaryScreen(); QScreen* screen = QGuiApplication::primaryScreen();
if (screen) QRect rec = screen->virtualGeometry();
return screen->grabWindow(0); return screen->grabWindow(QApplication::desktop()->winId(),
rec.x(),
return QPixmap(); rec.y(),
rec.width(),
rec.height());
} }
void ScreenshotGrabber::beginRectChooser(QGraphicsSceneMouseEvent* event) void ScreenshotGrabber::beginRectChooser(QGraphicsSceneMouseEvent* event)

View File

@ -35,12 +35,12 @@ class QGraphicsTextItem;
class QGraphicsScene; class QGraphicsScene;
class QGraphicsView; class QGraphicsView;
class ScreenshotGrabber : public QWidget class ScreenshotGrabber : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
ScreenshotGrabber(QWidget* parent); ScreenshotGrabber(QObject* parent);
~ScreenshotGrabber() override; ~ScreenshotGrabber() override;
bool eventFilter(QObject* object, QEvent* event) override; bool eventFilter(QObject* object, QEvent* event) override;
@ -71,8 +71,6 @@ private:
bool handleKeyPress(QKeyEvent* event); bool handleKeyPress(QKeyEvent* event);
void reject(); void reject();
QRect getSystemScreenRect();
void adjustWindowSize();
QPixmap grabScreen(); QPixmap grabScreen();
void beginRectChooser(QGraphicsSceneMouseEvent* event); void beginRectChooser(QGraphicsSceneMouseEvent* event);