summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/screenshot.cpp17
-rw-r--r--src/screenshot.h1
-rw-r--r--src/settings_gui.cpp2
3 files changed, 17 insertions, 3 deletions
diff --git a/src/screenshot.cpp b/src/screenshot.cpp
index fa455049f..47c92b400 100644
--- a/src/screenshot.cpp
+++ b/src/screenshot.cpp
@@ -63,6 +63,7 @@ struct ScreenshotFormat {
const char *name; ///< Name of the format.
const char *extension; ///< File extension.
ScreenshotHandlerProc *proc; ///< Function for writing the screenshot.
+ bool supports_32bpp; ///< Does this format support 32bpp images?
};
/*************************************************
@@ -568,10 +569,10 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user
/** Available screenshot formats. */
static const ScreenshotFormat _screenshot_formats[] = {
#if defined(WITH_PNG)
- {"PNG", "png", &MakePNGImage},
+ {"PNG", "png", &MakePNGImage, true},
#endif
- {"BMP", "bmp", &MakeBMPImage},
- {"PCX", "pcx", &MakePCXImage},
+ {"BMP", "bmp", &MakeBMPImage, true},
+ {"PCX", "pcx", &MakePCXImage, false},
};
/** Get filename extension of current screenshot file format. */
@@ -605,6 +606,16 @@ const char *GetScreenshotFormatDesc(int i)
}
/**
+ * Determine whether a certain screenshot format support 32bpp images.
+ * @param i Number of the screenshot format.
+ * @return true if 32bpp is supported.
+ */
+bool GetScreenshotFormatSupports_32bpp(int i)
+{
+ return _screenshot_formats[i].supports_32bpp;
+}
+
+/**
* Set the screenshot format to use.
* @param i Number of the format.
*/
diff --git a/src/screenshot.h b/src/screenshot.h
index 474b93f89..844085423 100644
--- a/src/screenshot.h
+++ b/src/screenshot.h
@@ -15,6 +15,7 @@
void InitializeScreenshotFormats();
const char *GetScreenshotFormatDesc(int i);
+bool GetScreenshotFormatSupports_32bpp(int i);
void SetScreenshotFormat(uint i);
const char *GetCurrentScreenshotExtension();
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 53217bb04..433e49261 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -32,6 +32,7 @@
#include "viewport_func.h"
#include "core/geometry_func.hpp"
#include "ai/ai.hpp"
+#include "blitter/factory.hpp"
#include "language.h"
@@ -260,6 +261,7 @@ struct GameOptionsWindow : Window {
list = new DropDownList();
*selected_index = _cur_screenshot_format;
for (uint i = 0; i < _num_screenshot_formats; i++) {
+ if (!GetScreenshotFormatSupports_32bpp(i) && BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth() == 32) continue;
list->push_back(new DropDownListStringItem(SPECSTR_SCREENSHOT_START + i, i, false));
}
break;