summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Trahan <tyler@tylertrahan.com>2021-11-07 11:41:24 -0500
committerGitHub <noreply@github.com>2021-11-07 17:41:24 +0100
commit08cb5ba2cd69406e34cb4a439d477142e80cef57 (patch)
tree760d772ca7d7236545bda0d9d7639d968e746f08
parentd0655a48bab31903068d6e0f94323da8a8bda94d (diff)
downloadopenttd-08cb5ba2cd69406e34cb4a439d477142e80cef57.tar.xz
Fix: Don't show screenshot GUI in screenshots (#9674)
-rw-r--r--src/screenshot.cpp3
-rw-r--r--src/screenshot_gui.cpp22
-rw-r--r--src/screenshot_gui.h1
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 */