Codechange: simplify access to the current screenshot format

This commit is contained in:
Rubidium 2024-04-20 15:34:30 +02:00 committed by rubidium42
parent d465257dd0
commit ded4d63db2
2 changed files with 15 additions and 22 deletions

View File

@ -38,8 +38,6 @@ static const char * const SCREENSHOT_NAME = "screenshot"; ///< Default filename
static const char * const HEIGHTMAP_NAME = "heightmap"; ///< Default filename of a saved heightmap.
std::string _screenshot_format_name; ///< Extension of the current screenshot format (corresponds with #_cur_screenshot_format).
uint _num_screenshot_formats; ///< Number of available screenshot formats.
uint _cur_screenshot_format; ///< Index of the currently selected screenshot format in #_screenshot_formats.
static std::string _screenshot_name; ///< Filename of the screenshot file.
std::string _full_screenshot_path; ///< Pathname of the screenshot file.
uint _heightmap_highest_peak; ///< When saving a heightmap, this contains the highest peak on the map.
@ -575,24 +573,26 @@ static const ScreenshotFormat _screenshot_formats[] = {
{"pcx", &MakePCXImage},
};
/* The currently loaded screenshot format. Set to a valid value as it might be used in early crash logs, when InitializeScreenshotFormats has not been called yet. */
static const ScreenshotFormat *_cur_screenshot_format = std::begin(_screenshot_formats);
/** Get filename extension of current screenshot file format. */
const char *GetCurrentScreenshotExtension()
{
return _screenshot_formats[_cur_screenshot_format].extension;
return _cur_screenshot_format->extension;
}
/** Initialize screenshot format information on startup, with #_screenshot_format_name filled from the loadsave code. */
void InitializeScreenshotFormats()
{
uint j = 0;
for (uint i = 0; i < lengthof(_screenshot_formats); i++) {
if (_screenshot_format_name.compare(_screenshot_formats[i].extension) == 0) {
j = i;
break;
for (auto &format : _screenshot_formats) {
if (_screenshot_format_name == format.extension) {
_cur_screenshot_format = &format;
return;
}
}
_cur_screenshot_format = j;
_num_screenshot_formats = lengthof(_screenshot_formats);
_cur_screenshot_format = std::begin(_screenshot_formats);
}
/**
@ -706,8 +706,7 @@ static const char *MakeScreenshotName(const char *default_fn, const char *ext, b
/** Make a screenshot of the current screen. */
static bool MakeSmallScreenshot(bool crashlog)
{
const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension, crashlog), CurrentScreenCallback, nullptr, _screen.width, _screen.height,
return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension, crashlog), CurrentScreenCallback, nullptr, _screen.width, _screen.height,
BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette);
}
@ -804,8 +803,7 @@ static bool MakeLargeWorldScreenshot(ScreenshotType t, uint32_t width = 0, uint3
Viewport vp;
SetupScreenshotViewport(t, &vp, width, height);
const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), LargeWorldCallback, &vp, vp.width, vp.height,
return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), LargeWorldCallback, &vp, vp.width, vp.height,
BlitterFactory::GetCurrentBlitter()->GetScreenDepth(), _cur_palette.palette);
}
@ -852,8 +850,7 @@ bool MakeHeightmapScreenshot(const char *filename)
_heightmap_highest_peak = std::max(h, _heightmap_highest_peak);
}
const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
return sf->proc(filename, HeightmapCallback, nullptr, Map::SizeX(), Map::SizeY(), 8, palette);
return _cur_screenshot_format->proc(filename, HeightmapCallback, nullptr, Map::SizeX(), Map::SizeY(), 8, palette);
}
static ScreenshotType _confirmed_screenshot_type; ///< Screenshot type the current query is about to confirm.
@ -937,8 +934,7 @@ static bool RealMakeScreenshot(ScreenshotType t, std::string name, uint32_t widt
break;
case SC_HEIGHTMAP: {
const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
ret = MakeHeightmapScreenshot(MakeScreenshotName(HEIGHTMAP_NAME, sf->extension));
ret = MakeHeightmapScreenshot(MakeScreenshotName(HEIGHTMAP_NAME, _cur_screenshot_format->extension));
break;
}
@ -1019,6 +1015,5 @@ static void MinimapScreenCallback(void *, void *buf, uint y, uint pitch, uint n)
*/
bool MakeMinimapWorldScreenshot()
{
const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format;
return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), MinimapScreenCallback, nullptr, Map::SizeX(), Map::SizeY(), 32, _cur_palette.palette);
return _cur_screenshot_format->proc(MakeScreenshotName(SCREENSHOT_NAME, _cur_screenshot_format->extension), MinimapScreenCallback, nullptr, Map::SizeX(), Map::SizeY(), 32, _cur_palette.palette);
}

View File

@ -32,8 +32,6 @@ bool MakeScreenshot(ScreenshotType t, std::string name, uint32_t width = 0, uint
bool MakeMinimapWorldScreenshot();
extern std::string _screenshot_format_name;
extern uint _num_screenshot_formats;
extern uint _cur_screenshot_format;
extern std::string _full_screenshot_path;
#endif /* SCREENSHOT_H */