diff --git a/src/dbusservice/dbusscreenshotservice.cpp b/src/dbusservice/dbusscreenshotservice.cpp index 64a4ec34..7c115bf5 100755 --- a/src/dbusservice/dbusscreenshotservice.cpp +++ b/src/dbusservice/dbusscreenshotservice.cpp @@ -168,3 +168,11 @@ void DBusScreenshotService::StartScreenshotFor3rd(const QString &in0) parent()->startScreenshotFor3rd(in0); m_singleInstance = true; } + +void DBusScreenshotService::FullScreenRecord(const QString &in0) +{ + + if (!m_singleInstance) + parent()->fullScreenRecord(in0); + m_singleInstance = true; +} diff --git a/src/dbusservice/dbusscreenshotservice.h b/src/dbusservice/dbusscreenshotservice.h index 4e390380..145cfa31 100755 --- a/src/dbusservice/dbusscreenshotservice.h +++ b/src/dbusservice/dbusscreenshotservice.h @@ -38,6 +38,9 @@ class DBusScreenshotService: public QDBusAbstractAdaptor " \n" " \n" " \n" + " \n" + " \n" + " \n" " \n" " \n" " \n" @@ -73,6 +76,8 @@ public Q_SLOTS: // METHODS void FullscreenScreenshot(); void SavePathScreenshot(const QString &in0); void StartScreenshotFor3rd(const QString &in0); + void FullScreenRecord(const QString &in0); + Q_SIGNALS: // SIGNALS void Done(const QString &in0); private: diff --git a/src/main.cpp b/src/main.cpp index c8f67212..f736ba46 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -172,6 +172,7 @@ int main(int argc, char *argv[]) QCommandLineOption prohibitNotifyOption(QStringList() << "n" << "no-notification", "Don't send notifications."); QCommandLineOption useGStreamer(QStringList() << "g" << "gstreamer", "Use GStreamer."); QCommandLineOption dbusOption(QStringList() << "u" << "dbus", "Start from dbus."); + QCommandLineOption screenRecordFullScreenOption(QStringList() << "rf" << "recordFullScreen","Record full screen","FileNAME",""); QCommandLineOption screenRecordOption(QStringList() << "record" << "screenRecord" << "start screen record"); QCommandLineOption screenShotOption(QStringList() << "shot" << "screenShot" << "start screen shot"); QCommandLineOption screenOcrOption(QStringList() << "ocr" << "screenOcr" << "start screen ocr"); @@ -189,6 +190,7 @@ int main(int argc, char *argv[]) cmdParser.addOption(prohibitNotifyOption); cmdParser.addOption(useGStreamer); cmdParser.addOption(dbusOption); + cmdParser.addOption(screenRecordFullScreenOption); cmdParser.addOption(screenRecordOption); cmdParser.addOption(screenShotOption); cmdParser.addOption(screenOcrOption); @@ -274,6 +276,9 @@ int main(int argc, char *argv[]) } else if (cmdParser.isSet(prohibitNotifyOption)) { qDebug() << "screenshot no notify!"; window.noNotifyScreenshot(); + } else if (cmdParser.isSet(screenRecordFullScreenOption)) { + qDebug() << "screenRecordFullScreenOption!!!!"<< cmdParser.value(screenRecordFullScreenOption); + window.fullScreenRecord(cmdParser.value(screenRecordFullScreenOption)); } else { window.startScreenshot(); } diff --git a/src/main_window.cpp b/src/main_window.cpp index 0b0f7843..bc406988 100755 --- a/src/main_window.cpp +++ b/src/main_window.cpp @@ -1522,7 +1522,7 @@ void MainWindow::fullScreenshot() // initDBusInterface(); this->setFocus(); // m_configSettings = ConfigSettings::instance(); - installEventFilter(this); +// installEventFilter(this); // 多屏截取全屏 @@ -1548,6 +1548,33 @@ void MainWindow::fullScreenshot() save2Clipboard(m_resultPixmap); sendNotify(m_saveIndex, m_saveFileName, r); } + +void MainWindow::fullScreenRecord(const QString fileName) +{ + m_isFullScreenRecord = true; + this->initAttributes(); + this->initResource(); + this->initLaunchMode("screenRecord"); + this->showFullScreen(); + qApp->setOverrideCursor(BaseUtils::setCursorShape("start")); + + QScreen *t_primaryScreen = QGuiApplication::primaryScreen(); + m_backgroundRect = t_primaryScreen->virtualGeometry();; + m_backgroundRect = QRect(m_backgroundRect.topLeft(), m_backgroundRect.size()); + this->move(m_backgroundRect.x(), m_backgroundRect.y()); + this->setFixedSize(m_backgroundRect.size()); + recordX = 0; + recordY = 0; + recordWidth = m_backgroundRect.width(); + recordHeight = m_backgroundRect.height(); + updateToolBarPos(); + if(fileName.isEmpty()){ + selectAreaName = fileName; + }else{ + selectAreaName = fileName+"_rfs"; + } + startCountdown(); +} void MainWindow::topWindow() { //DDesktopServices::playSystemSoundEffect(DDesktopServices::SEE_Screenshot); @@ -2172,6 +2199,8 @@ void MainWindow::updateToolBarPos() } } //qDebug() << "工具栏最新坐标 >>> toolbarPoint: " << toolbarPoint; + //快捷全屏录制不需要显示工具栏 + if(m_isFullScreenRecord) return; m_toolBar->showAt(toolbarPoint); //qDebug() << "==================2================="; } diff --git a/src/main_window.h b/src/main_window.h index d26d27dc..3261893c 100755 --- a/src/main_window.h +++ b/src/main_window.h @@ -319,6 +319,10 @@ class MainWindow : public DWidget //void delayScreenshot(double num); void fullScreenshot(); + /** + * @brief fullScreenRecord 快捷启动全屏录制 + */ + void fullScreenRecord(const QString fileName = ""); /** * @brief 截取顶层窗口 */ @@ -1038,6 +1042,11 @@ public slots: bool m_isScreenVertical = false; // 判断多屏是否纵向布局 bool m_isLockedState = false; bool m_isScreenResolutionChanged = false; + + /** + * @brief m_isFullScreenRecord 全屏录制 + */ + bool m_isFullScreenRecord = false; }; #endif //MAINWINDOW_H diff --git a/src/record_process.cpp b/src/record_process.cpp index 30d3b05a..aa41d682 100755 --- a/src/record_process.cpp +++ b/src/record_process.cpp @@ -150,6 +150,8 @@ void RecordProcess::onRecordFinish() // Move file to save directory. QString newSavePath = QDir(saveDir).filePath(saveBaseName); + QFile file(newSavePath); + file.remove(); QFile::rename(savePath, newSavePath); exitRecord(newSavePath); } @@ -399,7 +401,15 @@ void RecordProcess::initProcess() fileExtension = "mp4"; } } - saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension); + if(saveAreaName.isEmpty()){ + saveBaseName = QString("%1_%2.%3").arg(tr("Record")).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension); + }else{ + if(saveAreaName.contains(QString("_rfs"))){ + saveBaseName = QString("%1.%2").arg(saveAreaName.remove("_rfs")).arg(fileExtension); + }else { + saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension); + } + } savePath = QDir(saveTempDir).filePath(saveBaseName); // Remove same cache file first. QFile file(savePath); @@ -518,7 +528,16 @@ void RecordProcess::GstStartRecord() fileExtension = "webm"; } } - saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension); + if(saveAreaName.isEmpty()){ + saveBaseName = QString("%1_%2.%3").arg(tr("Record")).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension); + }else{ + if(saveAreaName.contains(QString("_rfs"))){ + saveBaseName = QString("%1.%2").arg(saveAreaName.remove("_rfs")).arg(fileExtension); + }else { + saveBaseName = QString("%1_%2_%3.%4").arg(tr("Record")).arg(saveAreaName).arg(date.toString("yyyyMMddhhmmss")).arg(fileExtension); + } + } + savePath = QDir(saveTempDir).filePath(saveBaseName); // Remove same cache file first. QFile file(savePath); @@ -565,6 +584,8 @@ void RecordProcess::GstStopRecord() void RecordProcess::onExitGstRecord() { QString newSavePath = QDir(saveDir).filePath(saveBaseName); + QFile file(newSavePath); + file.remove(); QFile::rename(savePath, newSavePath); //注销gstreamer相关库加载 gstInterface::unloadFunctions(); diff --git a/src/screenshot.cpp b/src/screenshot.cpp index b0778eb5..e3927fd6 100755 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -139,6 +139,12 @@ void Screenshot::initLaunchMode(const QString &launchmode) m_launchMode = launchmode; } +void Screenshot::fullScreenRecord(QString fileName) +{ + qInfo() << "Start Full Screen Record!" << fileName; + m_window.fullScreenRecord(fileName); +} + void Screenshot::stopRecord() { m_window.stopRecord(); diff --git a/src/screenshot.h b/src/screenshot.h index 57203cea..aa5bacdb 100755 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -30,6 +30,12 @@ public slots: void savePathScreenshot(const QString &path); void startScreenshotFor3rd(const QString &path); void initLaunchMode(const QString &launchmode); + + /** + * @brief fullScreenRecord 快捷启动全屏录制,文件路径 + */ + void fullScreenRecord(QString fileName = ""); + Q_SCRIPTABLE void stopRecord(); Q_SCRIPTABLE QString getRecorderNormalIcon(); signals: