summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Locurcio <hugo.locurcio@hugo.pro>2020-04-06 16:54:12 +0200
committerGitHub <noreply@github.com>2020-04-06 16:54:12 +0200
commitf45ba78a72d86fd481a2d2064ac63858d69ad7ee (patch)
tree319698f6edccc3d4b82fb9ca5bd99ea65b4589de
parent661b4a1837067082a76114c08a7aebec83bc2b58 (diff)
downloadminetest-f45ba78a72d86fd481a2d2064ac63858d69ad7ee.tar.gz
minetest-f45ba78a72d86fd481a2d2064ac63858d69ad7ee.tar.bz2
minetest-f45ba78a72d86fd481a2d2064ac63858d69ad7ee.zip
Allow relative directories for `screenshot_path`, tweak default path (#9122)
This will likely be more intuitive for users and should play better with sandboxed distributions such as Flatpak. In addition, the screenshot directory will now be created if it doesn't exist already.
-rw-r--r--builtin/settingtypes.txt5
-rw-r--r--src/client/client.cpp13
-rw-r--r--src/defaultsettings.cpp2
3 files changed, 16 insertions, 4 deletions
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 1f2889b45..a6cf8de60 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -903,8 +903,9 @@ fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255
# This font will be used for certain languages or if the default font is unavailable.
fallback_font_path (Fallback font path) filepath fonts/DroidSansFallbackFull.ttf
-# Path to save screenshots at.
-screenshot_path (Screenshot folder) path
+# Path to save screenshots at. Can be an absolute or relative path.
+# The folder will be created if it doesn't already exist.
+screenshot_path (Screenshot folder) path screenshots
# Format of screenshots.
screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga
diff --git a/src/client/client.cpp b/src/client/client.cpp
index c6d28ce80..e15391dde 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -1780,13 +1780,24 @@ void Client::makeScreenshot()
char timetstamp_c[64];
strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", tm);
- std::string filename_base = g_settings->get("screenshot_path")
+ std::string screenshot_dir;
+
+ if (fs::IsPathAbsolute(g_settings->get("screenshot_path")))
+ screenshot_dir = g_settings->get("screenshot_path");
+ else
+ screenshot_dir = porting::path_user + DIR_DELIM + g_settings->get("screenshot_path");
+
+ std::string filename_base = screenshot_dir
+ DIR_DELIM
+ std::string("screenshot_")
+ std::string(timetstamp_c);
std::string filename_ext = "." + g_settings->get("screenshot_format");
std::string filename;
+ // Create the directory if it doesn't already exist.
+ // Otherwise, saving the screenshot would fail.
+ fs::CreateDir(screenshot_dir);
+
u32 quality = (u32)g_settings->getS32("screenshot_quality");
quality = MYMIN(MYMAX(quality, 0), 100) / 100.0 * 255;
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 472522bf4..b6b1ce1f2 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -48,7 +48,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("pitch_move", "false");
settings->setDefault("fast_move", "false");
settings->setDefault("noclip", "false");
- settings->setDefault("screenshot_path", ".");
+ settings->setDefault("screenshot_path", "screenshots");
settings->setDefault("screenshot_format", "png");
settings->setDefault("screenshot_quality", "0");
settings->setDefault("client_unload_unused_data_timeout", "600");