diff --git a/README b/README index 15da89c0766..f326171866d 100644 --- a/README +++ b/README @@ -2682,11 +2682,19 @@ configuration of each entry, allowing the custom options to be shown. 9.0) Screenshots (SDL backend only): ---- ------------------------------- On systems using the SDL backend (for example Windows, Mac or Linux) you can use -alt+s to take snapshots (see section 5.4 - Hotkeys). The location of the created -screenshot file depends on the OS: +alt+s to take snapshots (see section 5.4 - Hotkeys). + +You can specify the directory in which you want the screenshots to be created in +the config file. To do so add a screenshotpath value under the [scummvm] section: + +[scummvm] +screenshotpath=/path/to/screenshots/ + +The default location, when no screenshot path is defined in the config file, +depends on the OS: Windows: In Users\username\My Pictures\ScummVM Screenshots. macOS X: On the Desktop. - Any other OS: In the current directoty. + Any other OS: In the current directory. 10.0) Compiling: diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp index 500e438ec01..8669bf6a66d 100644 --- a/backends/platform/sdl/macosx/macosx.cpp +++ b/backends/platform/sdl/macosx/macosx.cpp @@ -188,7 +188,9 @@ Common::String OSystem_MacOSX::getSystemLanguage() const { } Common::String OSystem_MacOSX::getScreenshotsPath() { - Common::String path = getDesktopPathMacOSX(); + Common::String path = ConfMan.get("screenshotpath"); + if (path.empty()) + path = getDesktopPathMacOSX(); if (!path.empty() && !path.hasSuffix("/")) path += "/"; return path; diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 09268f3a539..9a5db7f1109 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -573,7 +573,10 @@ Common::SaveFileManager *OSystem_SDL::getSavefileManager() { //Not specified in base class Common::String OSystem_SDL::getScreenshotsPath() { - return Common::String(); + Common::String path = ConfMan.get("screenshotpath"); + if (!path.empty() && !path.hasSuffix("/")) + path += "/"; + return path; } #ifdef USE_OPENGL diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index 02ad2257495..57242501097 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -147,13 +147,22 @@ bool OSystem_Win32::openUrl(const Common::String &url) { } Common::String OSystem_Win32::getScreenshotsPath() { + Common::String screenshotsPath = ConfMan.get("screenshotpath"); + if (!screenshotsPath.empty()) { + if (!screenshotsPath.hasSuffix("\\") && !screenshotsPath.hasSuffix("/") + screenshotsPath += "\\"; + return screenshotsPath; + } + 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"); + if (SHGetFolderPath(NULL, CSIDL_MYPICTURES, NULL, SHGFP_TYPE_CURRENT, picturesPath) != S_OK) { + warning("Unable to access My Pictures directory"); + return Common::String(); + } - Common::String screenshotsPath = Common::String(picturesPath) + "\\ScummVM Screenshots\\"; + 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)