void Controller::requestCapture(const CaptureRequest &request) { uint id = request.id(); m_requestMap.insert(id, request); switch (request.captureMode()) { case CaptureRequest::FULLSCREEN_MODE: doLater(request.delay(), this, [this, id](){ this->startFullscreenCapture(id); }); break; case CaptureRequest::SCREEN_MODE: { int &&number = request.data().toInt(); doLater(request.delay(), this, [this, id, number](){ this->startScreenGrab(id, number); }); break; } case CaptureRequest::GRAPHICAL_MODE: { QString &&path = request.path(); doLater(request.delay(), this, [this, id, path](){ this->startVisualCapture(id, path); }); break; } default: emit captureFailed(id); break; } }
// creation of a new capture in GUI mode void Controller::startVisualCapture(const uint id, const QString &forcedSavePath) { if (!m_captureWindow) { QWidget *modalWidget = nullptr; do { modalWidget = qApp->activeModalWidget(); if (modalWidget) { modalWidget->close(); modalWidget->deleteLater(); } } while (modalWidget); m_captureWindow = new CaptureWidget(id, forcedSavePath); //m_captureWindow = new CaptureWidget(id, forcedSavePath, false); // debug connect(m_captureWindow, &CaptureWidget::captureFailed, this, &Controller::captureFailed); connect(m_captureWindow, &CaptureWidget::captureTaken, this, &Controller::captureTaken); #ifdef Q_OS_WIN m_captureWindow->show(); #else m_captureWindow->showFullScreen(); //m_captureWindow->show(); // Debug #endif } else { emit captureFailed(id); } }
void FlameshotDBusAdapter::fullScreen( QString path, bool toClipboard, int delay, uint id) { auto f = [id, path, toClipboard, this]() { bool ok = true; QPixmap p(ScreenGrabber().grabEntireDesktop(ok)); if (!ok) { SystemNotification().sendMessage(tr("Unable to capture screen")); Q_EMIT captureFailed(id); return; } if(toClipboard) { ResourceExporter().captureToClipboard(p); } if(!path.isEmpty()) { ResourceExporter().captureToFile(p, path); } QByteArray byteArray; QBuffer buffer(&byteArray); p.save(&buffer, "PNG"); Q_EMIT captureTaken(id, byteArray); }; //QTimer::singleShot(delay, this, f); // // requires Qt 5.4 doLater(delay, this, f); }
void Controller::startFullscreenCapture(const uint id) { bool ok = true; QPixmap p(ScreenGrabber().grabEntireDesktop(ok)); if (ok) { emit captureTaken(id, p); } else { emit captureFailed(id); } }
void Controller::startScreenGrab(const uint id, const int screenNumber) { bool ok = true; int n = screenNumber; if (n < 0) { QPoint globalCursorPos = QCursor::pos(); n = qApp->desktop()->screenNumber(globalCursorPos); } QPixmap p(ScreenGrabber().grabScreen(n, ok)); if (ok) { emit captureTaken(id, p); } else { emit captureFailed(id); } }