diff --git a/frontend/utility/ScreenshotObj.cpp b/frontend/utility/ScreenshotObj.cpp index fa4383d56..ee5df6351 100644 --- a/frontend/utility/ScreenshotObj.cpp +++ b/frontend/utility/ScreenshotObj.cpp @@ -353,11 +353,7 @@ void ScreenshotObj::onFinished() if (outputWidth > 0 && outputHeight > 0) { if (outputToFile) { - OBSBasic *main = OBSBasic::Get(); - main->ShowStatusBarMessage( - QTStr("Basic.StatusBar.ScreenshotSavedTo").arg(QT_UTF8(path.c_str()))); - main->lastScreenshot = path; - main->OnEvent(OBS_FRONTEND_EVENT_SCREENSHOT_TAKEN); + emit imageSaved(path); } emit imageReady(image.copy()); diff --git a/frontend/utility/ScreenshotObj.hpp b/frontend/utility/ScreenshotObj.hpp index 8a5568282..99fe3ebb8 100644 --- a/frontend/utility/ScreenshotObj.hpp +++ b/frontend/utility/ScreenshotObj.hpp @@ -34,7 +34,15 @@ public: enum class Stage { Render, Download, Output, Finished }; + Stage stage() { return stage_; } + + void setSize(QSize size); + void setSize(int width, int height); + void setSaveToFile(bool save); + void processStage(); + +private: void renderScreenshot(); void downloadData(); void copyData(); @@ -42,14 +50,6 @@ public: void muxFile(); void onFinished(); - Stage stage() { return stage_; } - void setStage(Stage stage) { stage_ = stage; } - - void setSize(QSize size); - void setSize(int width, int height); - void setSaveToFile(bool save); - -private: Stage stage_ = Stage::Render; gs_texrender_t *texrender = nullptr; @@ -69,6 +69,7 @@ private: bool outputToFile = true; signals: + void imageSaved(std::string path); void imageReady(QImage image); private slots: diff --git a/frontend/widgets/OBSBasic.cpp b/frontend/widgets/OBSBasic.cpp index 97e89f415..ed263b4e5 100644 --- a/frontend/widgets/OBSBasic.cpp +++ b/frontend/widgets/OBSBasic.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #if defined(_WIN32) || defined(WHATSNEW_ENABLED) #include #endif diff --git a/frontend/widgets/OBSBasic.hpp b/frontend/widgets/OBSBasic.hpp index d26c5fa79..a7fc6fc9d 100644 --- a/frontend/widgets/OBSBasic.hpp +++ b/frontend/widgets/OBSBasic.hpp @@ -40,6 +40,7 @@ #include #include +#include #include #include @@ -57,6 +58,7 @@ class OBSBasicTransform; class OBSLogViewer; class OBSMissingFiles; class OBSProjector; +class ScreenshotObj; class VolumeControl; #ifdef YOUTUBE_ENABLED class YouTubeAppDock; @@ -215,7 +217,6 @@ class OBSBasic : public OBSMainWindow { friend class OBSYoutubeActions; friend struct BasicOutputHandler; friend struct OBSStudioAPI; - friend class ScreenshotObj; enum class MoveDir { Up, Down, Left, Right }; @@ -1336,7 +1337,7 @@ public: * ------------------------------------- */ private: - QPointer screenshotData; + QPointer screenshotData; std::string lastScreenshot; private slots: diff --git a/frontend/widgets/OBSBasic_Screenshots.cpp b/frontend/widgets/OBSBasic_Screenshots.cpp index aee070f97..af7d96cc8 100644 --- a/frontend/widgets/OBSBasic_Screenshots.cpp +++ b/frontend/widgets/OBSBasic_Screenshots.cpp @@ -30,6 +30,13 @@ void OBSBasic::Screenshot(OBSSource source) } screenshotData = new ScreenshotObj(source); + + connect(screenshotData, &ScreenshotObj::imageSaved, this, [this](std::string path) { + ShowStatusBarMessage(QTStr("Basic.StatusBar.ScreenshotSavedTo").arg(QT_UTF8(path.c_str()))); + lastScreenshot = path; + + OnEvent(OBS_FRONTEND_EVENT_SCREENSHOT_TAKEN); + }); } void OBSBasic::ScreenshotSelectedSource()