diff options
author | Tyler Trahan <tyler@tylertrahan.com> | 2021-11-07 11:41:24 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-07 17:41:24 +0100 |
commit | 08cb5ba2cd69406e34cb4a439d477142e80cef57 (patch) | |
tree | 760d772ca7d7236545bda0d9d7639d968e746f08 | |
parent | d0655a48bab31903068d6e0f94323da8a8bda94d (diff) | |
download | openttd-08cb5ba2cd69406e34cb4a439d477142e80cef57.tar.xz |
Fix: Don't show screenshot GUI in screenshots (#9674)
-rw-r--r-- | src/screenshot.cpp | 3 | ||||
-rw-r--r-- | src/screenshot_gui.cpp | 22 | ||||
-rw-r--r-- | src/screenshot_gui.h | 1 |
3 files changed, 26 insertions, 0 deletions
diff --git a/src/screenshot.cpp b/src/screenshot.cpp index f91648cf4..ddb22f13e 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 e9b989e51..b6d68d091 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 44a395edb..493bcc80f 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 */ |