From a9ae691513f20018cc3798929dc6161828adfc7f Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Mon, 24 Apr 2017 01:06:03 +0100 Subject: SDL: Improve debug and warning messages when saving screenshots In particular this adds a warning when failing to save a screenshot in OpenGL mode (there was already one in SurfaceSDL mode). --- backends/graphics/opengl/opengl-graphics.cpp | 8 ++++++-- backends/graphics/opengl/opengl-graphics.h | 3 ++- backends/graphics/openglsdl/openglsdl-graphics.cpp | 13 +++++++++++-- backends/graphics/surfacesdl/surfacesdl-graphics.cpp | 15 +++++++++++---- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 7b41699e80..b239802a0f 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -1302,7 +1302,7 @@ const Graphics::Font *OpenGLGraphicsManager::getFontOSD() { } #endif -void OpenGLGraphicsManager::saveScreenshot(const Common::String &filename) const { +bool OpenGLGraphicsManager::saveScreenshot(const Common::String &filename) const { const uint width = _outputScreenWidth; const uint height = _outputScreenHeight; @@ -1332,7 +1332,10 @@ void OpenGLGraphicsManager::saveScreenshot(const Common::String &filename) const // Open file Common::DumpFile out; - out.open(filename); + if (!out.open(filename)) { + delete[] pixels; + return false; + } // Write BMP header out.writeByte('B'); @@ -1357,6 +1360,7 @@ void OpenGLGraphicsManager::saveScreenshot(const Common::String &filename) const // Free allocated memory delete[] pixels; + return true; } } // End of namespace OpenGL diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index d3f8d792ba..f5f4cab305 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -296,8 +296,9 @@ protected: * uses Common::DumpFile for writing the screenshot. * * @param filename The output filename. + * @return true on success, false otherwise */ - void saveScreenshot(const Common::String &filename) const; + bool saveScreenshot(const Common::String &filename) const; private: // diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index ccb2572d33..75e2cf8ef7 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -642,8 +642,17 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) { SDL_RWclose(file); } - saveScreenshot((screenshotsPath + filename).c_str()); - debug("Saved screenshot '%s'", filename.c_str()); + if (saveScreenshot(screenshotsPath + filename)) { + if (screenshotsPath.empty()) + debug("Saved screenshot '%s' in current directory", filename.c_str()); + else + debug("Saved screenshot '%s' in directory '%s'", filename.c_str(), screenshotsPath.c_str()); + } else { + if (screenshotsPath.empty()) + warning("Could not save screenshot in current directory"); + else + warning("Could not save screenshot in directory '%s'", screenshotsPath.c_str()); + } return true; } diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index dd28f32bdc..ccfcc94ab3 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -2543,10 +2543,17 @@ bool SurfaceSdlGraphicsManager::notifyEvent(const Common::Event &event) { SDL_RWclose(file); } - if (saveScreenshot((screenshotsPath + filename).c_str())) - debug("Saved screenshot '%s'", filename.c_str()); - else - warning("Could not save screenshot"); + if (saveScreenshot((screenshotsPath + filename).c_str())) { + if (screenshotsPath.empty()) + debug("Saved screenshot '%s' in current directory", filename.c_str()); + else + debug("Saved screenshot '%s' in directory '%s'", filename.c_str(), screenshotsPath.c_str()); + } else { + if (screenshotsPath.empty()) + warning("Could not save screenshot in current directory"); + else + warning("Could not save screenshot in directory '%s'", screenshotsPath.c_str()); + } return true; } -- cgit v1.2.3