From 7655ba77463718b7e38ee9eb17a03d7f9fdecc1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Thu, 31 Jan 2019 23:15:05 +0100 Subject: [PATCH] Make screenshot return path to file --- .../engines/opengl/OpenGLDrawingEngine.cpp | 4 +-- src/openrct2/drawing/IDrawingEngine.h | 3 +- src/openrct2/drawing/NewDrawing.cpp | 4 +-- src/openrct2/drawing/X8DrawingEngine.cpp | 2 +- src/openrct2/drawing/X8DrawingEngine.h | 2 +- src/openrct2/interface/Screenshot.cpp | 28 ++++++++----------- src/openrct2/interface/Screenshot.h | 8 ++++-- 7 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp b/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp index 0742e11966..f3279ebb04 100644 --- a/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp +++ b/src/openrct2-ui/drawing/engines/opengl/OpenGLDrawingEngine.cpp @@ -286,12 +286,12 @@ public: // Not implemented } - int32_t Screenshot() override + std::string Screenshot() override { const OpenGLFramebuffer& framebuffer = _drawingContext->GetFinalFramebuffer(); framebuffer.Bind(); framebuffer.GetPixels(_bitsDPI); - int32_t result = screenshot_dump_png(&_bitsDPI); + std::string result = screenshot_dump_png(&_bitsDPI); return result; } diff --git a/src/openrct2/drawing/IDrawingEngine.h b/src/openrct2/drawing/IDrawingEngine.h index b93e6d5ad6..3f04551c36 100644 --- a/src/openrct2/drawing/IDrawingEngine.h +++ b/src/openrct2/drawing/IDrawingEngine.h @@ -12,6 +12,7 @@ #include "../common.h" #include +#include enum DRAWING_ENGINE { @@ -64,7 +65,7 @@ namespace OpenRCT2::Drawing virtual void UpdateWindows() abstract; virtual void PaintRain() abstract; virtual void CopyRect(int32_t x, int32_t y, int32_t width, int32_t height, int32_t dx, int32_t dy) abstract; - virtual int32_t Screenshot() abstract; + virtual std::string Screenshot() abstract; virtual IDrawingContext* GetDrawingContext(rct_drawpixelinfo * dpi) abstract; virtual rct_drawpixelinfo* GetDrawingPixelInfo() abstract; diff --git a/src/openrct2/drawing/NewDrawing.cpp b/src/openrct2/drawing/NewDrawing.cpp index 020ae03531..dca79cba34 100644 --- a/src/openrct2/drawing/NewDrawing.cpp +++ b/src/openrct2/drawing/NewDrawing.cpp @@ -249,12 +249,12 @@ void FASTCALL gfx_draw_sprite_solid(rct_drawpixelinfo* dpi, int32_t image, int32 } } -int32_t screenshot_dump() +std::string screenshot_dump() { auto drawingEngine = GetDrawingEngine(); if (drawingEngine != nullptr) { return drawingEngine->Screenshot(); } - return false; + return ""; } diff --git a/src/openrct2/drawing/X8DrawingEngine.cpp b/src/openrct2/drawing/X8DrawingEngine.cpp index 942df4fe54..cf00ded57b 100644 --- a/src/openrct2/drawing/X8DrawingEngine.cpp +++ b/src/openrct2/drawing/X8DrawingEngine.cpp @@ -276,7 +276,7 @@ void X8DrawingEngine::CopyRect(int32_t x, int32_t y, int32_t width, int32_t heig } } -int32_t X8DrawingEngine::Screenshot() +std::string X8DrawingEngine::Screenshot() { return screenshot_dump_png(&_bitsDPI); } diff --git a/src/openrct2/drawing/X8DrawingEngine.h b/src/openrct2/drawing/X8DrawingEngine.h index 9053727815..8ab558b9d3 100644 --- a/src/openrct2/drawing/X8DrawingEngine.h +++ b/src/openrct2/drawing/X8DrawingEngine.h @@ -98,7 +98,7 @@ namespace OpenRCT2 void UpdateWindows() override; void PaintRain() override; void CopyRect(int32_t x, int32_t y, int32_t width, int32_t height, int32_t dx, int32_t dy) override; - int32_t Screenshot() override; + std::string Screenshot() override; IDrawingContext* GetDrawingContext(rct_drawpixelinfo* dpi) override; rct_drawpixelinfo* GetDrawingPixelInfo() override; DRAWING_ENGINE_FLAGS GetFlags() override; diff --git a/src/openrct2/interface/Screenshot.cpp b/src/openrct2/interface/Screenshot.cpp index 97ca84cffe..2831949b9f 100644 --- a/src/openrct2/interface/Screenshot.cpp +++ b/src/openrct2/interface/Screenshot.cpp @@ -63,17 +63,15 @@ static bool WriteDpiToFile(const std::string_view& path, const rct_drawpixelinfo */ void screenshot_check() { - int32_t screenshotIndex; - if (gScreenshotCountdown != 0) { gScreenshotCountdown--; if (gScreenshotCountdown == 0) { // update_rain_animation(); - screenshotIndex = screenshot_dump(); + std::string screenshotPath = screenshot_dump(); - if (screenshotIndex != -1) + if (!screenshotPath.empty()) { audio_play_sound(SOUND_WINDOW_OPEN, 100, context_get_width() / 2); } @@ -172,14 +170,13 @@ static int32_t screenshot_get_next_path(char* path, size_t size) return -1; } -int32_t screenshot_dump_png(rct_drawpixelinfo* dpi) +std::string screenshot_dump_png(rct_drawpixelinfo* dpi) { // Get a free screenshot path - int32_t index; char path[MAX_PATH] = ""; - if ((index = screenshot_get_next_path(path, MAX_PATH)) == -1) + if (screenshot_get_next_path(path, MAX_PATH) == -1) { - return -1; + return ""; } rct_palette renderedPalette; @@ -187,22 +184,21 @@ int32_t screenshot_dump_png(rct_drawpixelinfo* dpi) if (WriteDpiToFile(path, dpi, renderedPalette)) { - return index; + return std::string(path); } else { - return -1; + return ""; } } -int32_t screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels) +std::string screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels) { // Get a free screenshot path - int32_t index; char path[MAX_PATH] = ""; - if ((index = screenshot_get_next_path(path, MAX_PATH)) == -1) + if (screenshot_get_next_path(path, MAX_PATH) == -1) { - return -1; + return ""; } const auto pixels8 = (const uint8_t*)pixels; @@ -217,12 +213,12 @@ int32_t screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pix image.Stride = width * 4; image.Pixels = std::vector(pixels8, pixels8 + pixelsLen); Imaging::WriteToFile(path, image, IMAGE_FORMAT::PNG_32); - return index; + return std::string(path); } catch (const std::exception& e) { log_error("Unable to save screenshot: %s", e.what()); - return -1; + return ""; } } diff --git a/src/openrct2/interface/Screenshot.h b/src/openrct2/interface/Screenshot.h index 958e5620cf..ee3923c8b2 100644 --- a/src/openrct2/interface/Screenshot.h +++ b/src/openrct2/interface/Screenshot.h @@ -11,6 +11,8 @@ #include "../common.h" +#include + struct rct_drawpixelinfo; extern uint8_t gScreenshotCountdown; @@ -29,9 +31,9 @@ struct ScreenshotOptions }; void screenshot_check(); -int32_t screenshot_dump(); -int32_t screenshot_dump_png(rct_drawpixelinfo* dpi); -int32_t screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels); +std::string screenshot_dump(); +std::string screenshot_dump_png(rct_drawpixelinfo* dpi); +std::string screenshot_dump_png_32bpp(int32_t width, int32_t height, const void* pixels); void screenshot_giant(); int32_t cmdline_for_screenshot(const char** argv, int32_t argc, ScreenshotOptions* options);