Add options for screenshot format and quality
authorDiego Martinez <kaeza@users.sf.net>
Mon, 7 Mar 2016 22:09:07 +0000 (19:09 -0300)
committerShadowNinja <shadowninja@minetest.net>
Sat, 12 Mar 2016 22:12:43 +0000 (17:12 -0500)
builtin/settingtypes.txt
minetest.conf.example
src/client.cpp
src/defaultsettings.cpp
src/settings_translation_file.cpp

index 1672e08ca8ace770fdaf8302a025516b1b128c6f..c1157b163286a959b378aeca5b29380bfce06dc7 100644 (file)
@@ -554,6 +554,14 @@ fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255
 #    Path to save screenshots at.
 screenshot_path (Screenshot folder) path
 
+#    Format of screenshots.
+screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga
+
+#    Screenshot quality. Only used for JPEG format.
+#    1 means worst quality; 100 means best quality.
+#    Use 0 for default quality.
+screenshot_quality (Screenshot quality) int 0 0 100
+
 [**Advanced]
 
 #    Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
index 1587cba76d189f2456589bc8a66d0b006273db23..cd0be52963d41546cf256f258f8157cfacb3f4b0 100644 (file)
 #    type: path
 # screenshot_path =
 
+#    Format of screenshots.
+#    type: enum values: png, jpg, bmp, pcx, ppm, tga
+# screenshot_format = png
+
+#    Screenshot quality. Only used for JPEG format.
+#    1 means worst quality; 100 means best quality.
+#    Use 0 for default quality.
+#    type: int min: 0 max: 100
+# screenshot_quality = 0
+
 ### Advanced
 
 #    Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
index f27f031c5325e2dcd9fdbd481011257df50df80c..e13344ec2d4c661f6a9f6106cf7ec093cdd966fb 100644 (file)
@@ -1813,9 +1813,12 @@ void Client::makeScreenshot(IrrlichtDevice *device)
                        + DIR_DELIM
                        + std::string("screenshot_")
                        + std::string(timetstamp_c);
-       std::string filename_ext = ".png";
+       std::string filename_ext = "." + g_settings->get("screenshot_format");
        std::string filename;
 
+       u32 quality = (u32)g_settings->getS32("screenshot_quality");
+       quality = MYMIN(MYMAX(quality, 0), 100) / 100.0 * 255;
+
        // Try to find a unique filename
        unsigned serial = 0;
 
@@ -1837,7 +1840,7 @@ void Client::makeScreenshot(IrrlichtDevice *device)
                        raw_image->copyTo(image);
 
                        std::ostringstream sstr;
-                       if (driver->writeImageToFile(image, filename.c_str())) {
+                       if (driver->writeImageToFile(image, filename.c_str(), quality)) {
                                sstr << "Saved screenshot to '" << filename << "'";
                        } else {
                                sstr << "Failed to save screenshot '" << filename << "'";
index db2950fc239295d4c2d9a7ea2c492099c5648a81..53059e8ada94608f88f39e8c6113d0b6ed6bc077 100644 (file)
@@ -123,6 +123,8 @@ void set_default_settings(Settings *settings)
        settings->setDefault("invert_mouse", "false");
        settings->setDefault("enable_clouds", "true");
        settings->setDefault("screenshot_path", ".");
+       settings->setDefault("screenshot_format", "png");
+       settings->setDefault("screenshot_quality", "0");
        settings->setDefault("view_bobbing_amount", "1.0");
        settings->setDefault("fall_bobbing_amount", "0.0");
        settings->setDefault("enable_3d_clouds", "true");
index e92a34cba5df1f130377481032c55a6514016e1a..f115bc0110a4cff248225fcb9ec3c11d9f5d9148 100644 (file)
@@ -272,6 +272,10 @@ fake_function() {
        gettext("Fallback font shadow alpha");
        gettext("Screenshot folder");
        gettext("Path to save screenshots at.");
+       gettext("Screenshot format");
+       gettext("Format of screenshots.");
+       gettext("Screenshot quality");
+       gettext("Screenshot quality. Only used for JPEG format.\n1 means worst quality; 100 means best quality.\nUse 0 for default quality.");
        gettext("Advanced");
        gettext("DPI");
        gettext("Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.");