diff options
author | Pala | 2017-03-24 22:25:46 +0100 |
---|---|---|
committer | Thierry Crozat | 2017-04-24 01:06:29 +0100 |
commit | 3849a3e90e6e679e35f8ec4517ce38d2a0c5d098 (patch) | |
tree | ea6630e9149d45031ec9a34358301d81d5858d9b | |
parent | 28ab63136ad2b3b48b50279f9deb4b6c5a659795 (diff) | |
download | scummvm-rg350-3849a3e90e6e679e35f8ec4517ce38d2a0c5d098.tar.gz scummvm-rg350-3849a3e90e6e679e35f8ec4517ce38d2a0c5d098.tar.bz2 scummvm-rg350-3849a3e90e6e679e35f8ec4517ce38d2a0c5d098.zip |
WINDOWS: Change location where screenshot are saved
This fixes bug #9701: WINDOWS: Flow of taking screenshots
on Windows is broken
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | README | 15 | ||||
-rw-r--r-- | backends/graphics/openglsdl/openglsdl-graphics.cpp | 12 | ||||
-rw-r--r-- | backends/graphics/surfacesdl/surfacesdl-graphics.cpp | 16 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 5 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.h | 3 | ||||
-rw-r--r-- | backends/platform/sdl/win32/win32.cpp | 20 | ||||
-rw-r--r-- | backends/platform/sdl/win32/win32.h | 2 |
8 files changed, 62 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore index 585d575d01..1c2edd7ace 100644 --- a/.gitignore +++ b/.gitignore @@ -216,3 +216,4 @@ psp2pkg/ #Ignore gmon.out created by gprof gmon.out +/scummvm_libs_2015 @@ -81,8 +81,9 @@ Table of Contents: 8.0) Configuration file * 8.1 Recognized configuration keywords * 8.2 Custom game options that can be toggled via the GUI -9.0) Compiling -10.0) Credits +9.0) Screenshots (SDL backend only) +10.0) Compiling +11.0) Credits 1.0) Introduction: @@ -2678,7 +2679,13 @@ once or readded in the ScummVM launcher's game list. This will update the configuration of each entry, allowing the custom options to be shown. -9.0) Compiling: +9.0) Screenshots (SDL backend only): +---- ------------------------------- +By default screenshots are put into the current directory, however on Windows +the directory for this purpose is set to "Users\username\My Pictures\ScummVM Screenshots". + + +10.0) Compiling: ---- ---------- For an up-to-date overview on how to compile ScummVM for various platforms, please consult our Wiki, in particular this page: @@ -2787,7 +2794,7 @@ debug messages (see <https://technet.microsoft.com/en-us/sysinternals/debugview. <http://wiki.scummvm.org/index.php/Compiling_ScummVM/Symbian> -10.0) Credits +11.0) Credits ----- ------- Please refer to our extensive Credits list at: diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index 860173a3c6..9b25f43f39 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -22,6 +22,7 @@ #include "backends/graphics/openglsdl/openglsdl-graphics.h" #include "backends/events/sdl/sdl-events.h" +#include "backends/platform/sdl/sdl.h" #include "common/textconsole.h" #include "common/config-manager.h" @@ -620,25 +621,30 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) { return true; } + // Alt-s creates a screenshot if (event.kbd.keycode == Common::KEYCODE_s) { - // Alt-s creates a screenshot Common::String filename; + Common::String screenshotsPath = ((OSystem_SDL *)g_system)->getScreenshotsPath(); + for (int n = 0;; n++) { SDL_RWops *file; filename = Common::String::format("scummvm%05d.bmp", n); - file = SDL_RWFromFile(filename.c_str(), "r"); + + file = SDL_RWFromFile((screenshotsPath + filename).c_str(), "r"); + if (!file) break; SDL_RWclose(file); } - saveScreenshot(filename.c_str()); + saveScreenshot((screenshotsPath + filename).c_str()); debug("Saved screenshot '%s'", filename.c_str()); return true; } + } else if (event.kbd.hasFlags(Common::KBD_CTRL | Common::KBD_ALT)) { if ( event.kbd.keycode == Common::KEYCODE_PLUS || event.kbd.keycode == Common::KEYCODE_MINUS || event.kbd.keycode == Common::KEYCODE_KP_PLUS || event.kbd.keycode == Common::KEYCODE_KP_MINUS) { diff --git a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp index 690e9a360e..047941cb43 100644 --- a/backends/graphics/surfacesdl/surfacesdl-graphics.cpp +++ b/backends/graphics/surfacesdl/surfacesdl-graphics.cpp @@ -2524,21 +2524,27 @@ bool SurfaceSdlGraphicsManager::notifyEvent(const Common::Event &event) { // Alt-S: Create a screenshot if (event.kbd.hasFlags(Common::KBD_ALT) && event.kbd.keycode == 's') { - char filename[20]; + Common::String filename; + + Common::String screenshotsPath = ((OSystem_SDL *)g_system)->getScreenshotsPath(); for (int n = 0;; n++) { SDL_RWops *file; - sprintf(filename, "scummvm%05d.bmp", n); - file = SDL_RWFromFile(filename, "r"); + filename = Common::String::format("scummvm%05d.bmp", n); + + file = SDL_RWFromFile((screenshotsPath + filename).c_str(), "r"); + if (!file) break; SDL_RWclose(file); } - if (saveScreenshot(filename)) - debug("Saved screenshot '%s'", filename); + + if (saveScreenshot((screenshotsPath + filename).c_str())) + debug("Saved screenshot '%s'", filename.c_str()); else warning("Could not save screenshot"); + return true; } diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 1c5a7c2cbf..09268f3a53 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -571,6 +571,11 @@ Common::SaveFileManager *OSystem_SDL::getSavefileManager() { #endif } +//Not specified in base class +Common::String OSystem_SDL::getScreenshotsPath() { + return Common::String(); +} + #ifdef USE_OPENGL const OSystem::GraphicsMode *OSystem_SDL::getSupportedGraphicsModes() const { diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index 17b4e9b001..bc4292be0b 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -84,6 +84,9 @@ public: virtual Common::TimerManager *getTimerManager(); virtual Common::SaveFileManager *getSavefileManager(); + //Screenshots + virtual Common::String getScreenshotsPath(); + protected: bool _inited; bool _initedSDL; diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index 99c71a49e0..02ad225749 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -29,6 +29,7 @@ #include <windows.h> #undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one... #include <shellapi.h> +#include <ShlObj.h> #include "common/scummsys.h" #include "common/config-manager.h" @@ -145,6 +146,25 @@ bool OSystem_Win32::openUrl(const Common::String &url) { return true; } +Common::String OSystem_Win32::getScreenshotsPath() { + char picturesPath[MAXPATHLEN]; + + // Use the My Pictures folder. + if (SHGetFolderPath(NULL, CSIDL_MYPICTURES, NULL, SHGFP_TYPE_CURRENT, picturesPath) != S_OK) + error("Unable to access My Pictures directory"); + + Common::String screenshotsPath = Common::String(picturesPath) + "\\ScummVM Screenshots\\"; + + // If the directory already exists (as it should in most cases), + // we don't want to fail, but we need to stop on other errors (such as ERROR_PATH_NOT_FOUND) + if (!CreateDirectory(screenshotsPath.c_str(), NULL)) { + if (GetLastError() != ERROR_ALREADY_EXISTS) + error("Cannot create ScummVM Screenshots folder"); + } + + return screenshotsPath; +} + Common::String OSystem_Win32::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h index 636ebae88f..6764a7fe49 100644 --- a/backends/platform/sdl/win32/win32.h +++ b/backends/platform/sdl/win32/win32.h @@ -38,6 +38,8 @@ public: virtual bool openUrl(const Common::String &url); + virtual Common::String getScreenshotsPath(); + protected: /** * The path of the currently open log file, if any. |