Esempio n. 1
0
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;
    }
}
Esempio n. 2
0
// 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);
}
Esempio n. 4
0
void Controller::startFullscreenCapture(const uint id) {
    bool ok = true;
    QPixmap p(ScreenGrabber().grabEntireDesktop(ok));
    if (ok) {
        emit captureTaken(id, p);
    } else {
        emit captureFailed(id);
    }
}
Esempio n. 5
0
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);
    }
}