From 08cb5ba2cd69406e34cb4a439d477142e80cef57 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 7 Nov 2021 11:41:24 -0500 Subject: [PATCH] Fix: Don't show screenshot GUI in screenshots (#9674) --- src/screenshot.cpp | 3 +++ src/screenshot_gui.cpp | 22 ++++++++++++++++++++++ src/screenshot_gui.h | 1 + 3 files changed, 26 insertions(+) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index f91648cf47..ddb22f13e1 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -12,6 +12,7 @@ #include "viewport_func.h" #include "gfx_func.h" #include "screenshot.h" +#include "screenshot_gui.h" #include "blitter/factory.hpp" #include "zoom_func.h" #include "core/endian_func.hpp" @@ -909,8 +910,10 @@ static bool RealMakeScreenshot(ScreenshotType t, std::string name, uint32 width, * of the screenshot. This way the screenshot will always show the name * of the previous screenshot in the 'successful' message instead of the * name of the new screenshot (or an empty name). */ + SetScreenshotWindowVisibility(true); UndrawMouseCursor(); DrawDirtyBlocks(); + SetScreenshotWindowVisibility(false); } _screenshot_name[0] = '\0'; diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index e9b989e517..b6d68d0919 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -13,6 +13,7 @@ #include "screenshot.h" #include "widgets/screenshot_widget.h" #include "table/strings.h" +#include "gfx_func.h" struct ScreenshotWindow : Window { ScreenshotWindow(WindowDesc *desc) : Window(desc) @@ -72,3 +73,24 @@ void ShowScreenshotWindow() CloseWindowById(WC_SCREENSHOT, 0); new ScreenshotWindow(&_screenshot_window_desc); } + +/** + * Set the visibility of the screenshot window when taking a screenshot. + * @param hide Are we hiding the window or showing it again after the screenshot is taken? + */ +void SetScreenshotWindowVisibility(bool hide) +{ + ScreenshotWindow *scw = (ScreenshotWindow *)FindWindowById(WC_SCREENSHOT, 0); + + if (scw == nullptr) return; + + if (hide) { + /* Set dirty the screen area where the window is covering (not the window itself), then move window off screen. */ + scw->SetDirty(); + scw->left += 2 * _screen.width; + } else { + /* Return window to original position. */ + scw->left -= 2 * _screen.width; + scw->SetDirty(); + } +} diff --git a/src/screenshot_gui.h b/src/screenshot_gui.h index 44a395edb1..493bcc80f7 100644 --- a/src/screenshot_gui.h +++ b/src/screenshot_gui.h @@ -11,5 +11,6 @@ #define SCREENSHOT_GUI_H void ShowScreenshotWindow(); +void SetScreenshotWindowVisibility(bool hide); #endif /* SCREENSHOT_GUI_H */