diff --git a/src/screenshot.cpp b/src/screenshot.cpp index fa455049f2..47c92b400a 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. */ @@ -604,6 +605,16 @@ const char *GetScreenshotFormatDesc(int i) return _screenshot_formats[i].name; } +/** + * 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 474b93f890..844085423e 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 53217bb04a..433e49261b 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;