|
OpenTTD Source 15.0-beta1
|
The creation of screenshots! More...
#include "stdafx.h"#include "core/backup_type.hpp"#include "fileio_func.h"#include "viewport_func.h"#include "gfx_func.h"#include "screenshot.h"#include "screenshot_gui.h"#include "blitter/factory.hpp"#include "zoom_func.h"#include "core/endian_func.hpp"#include "saveload/saveload.h"#include "company_base.h"#include "company_func.h"#include "strings_func.h"#include "error.h"#include "textbuf_gui.h"#include "window_gui.h"#include "window_func.h"#include "tile_map.h"#include "landscape.h"#include "video/video_driver.hpp"#include "smallmap_gui.h"#include "table/strings.h"#include "safeguards.h"#include <png.h>Go to the source code of this file.
Data Structures | |
| struct | ScreenshotFormat |
| Screenshot format information. More... | |
| struct | BitmapInfoHeader |
| BMP Info Header (stored in little endian) More... | |
| struct | RgbQuad |
| Format of palette data in BMP header. More... | |
| struct | PcxHeader |
| Definition of a PCX file header. More... | |
Macros | |
| #define | MKCOLOUR(x) TO_LE32(x) |
Typedefs | |
| typedef void | ScreenshotCallback(void *userdata, void *buf, uint y, uint pitch, uint n) |
| Callback function signature for generating lines of pixel data to be written to the screenshot file. | |
| typedef bool | ScreenshotHandlerProc(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) |
| Function signature for a screenshot generation routine for one of the available formats. | |
Functions | |
| PACK (struct BitmapFileHeader { uint16_t type;uint32_t size;uint32_t reserved;uint32_t off_bits;}) | |
| BMP File Header (stored in little endian) | |
| static bool | MakeBMPImage (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) |
| Generic .BMP writer. | |
| static void PNGAPI | png_my_error (png_structp png_ptr, png_const_charp message) |
| static void PNGAPI | png_my_warning (png_structp png_ptr, png_const_charp message) |
| static bool | MakePNGImage (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) |
| Generic .PNG file image writer. | |
| static bool | MakePCXImage (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) |
| Generic .PCX file image writer. | |
| const char * | GetCurrentScreenshotExtension () |
| Get filename extension of current screenshot file format. | |
| void | InitializeScreenshotFormats () |
| Initialize screenshot format information on startup, with _screenshot_format_name filled from the loadsave code. | |
| static void | CurrentScreenCallback (void *, void *buf, uint y, uint pitch, uint n) |
| Callback of the screenshot generator that dumps the current video buffer. | |
| static void | LargeWorldCallback (void *userdata, void *buf, uint y, uint pitch, uint n) |
| generate a large piece of the world | |
| static const char * | MakeScreenshotName (const char *default_fn, const char *ext, bool crashlog=false) |
| Construct a pathname for a screenshot file. | |
| static bool | MakeSmallScreenshot (bool crashlog) |
| Make a screenshot of the current screen. | |
| void | SetupScreenshotViewport (ScreenshotType t, Viewport *vp, uint32_t width, uint32_t height) |
| Configure a Viewport for rendering (a part of) the map into a screenshot. | |
| static bool | MakeLargeWorldScreenshot (ScreenshotType t, uint32_t width=0, uint32_t height=0) |
| Make a screenshot of the map. | |
| static void | HeightmapCallback (void *, void *buffer, uint y, uint, uint n) |
| Callback for generating a heightmap. | |
| bool | MakeHeightmapScreenshot (const char *filename) |
| Make a heightmap of the current map. | |
| static void | ScreenshotConfirmationCallback (Window *, bool confirmed) |
| Callback on the confirmation window for huge screenshots. | |
| void | MakeScreenshotWithConfirm (ScreenshotType t) |
| Make a screenshot. | |
| static bool | RealMakeScreenshot (ScreenshotType t, std::string name, uint32_t width, uint32_t height) |
| Make a screenshot. | |
| bool | MakeScreenshot (ScreenshotType t, std::string name, uint32_t width, uint32_t height) |
| Schedule making a screenshot. | |
| static void | MinimapScreenCallback (void *, void *buf, uint y, uint pitch, uint n) |
| bool | MakeMinimapWorldScreenshot () |
| Make a minimap screenshot. | |
Variables | |
| static const char *const | SCREENSHOT_NAME = "screenshot" |
| Default filename of a saved screenshot. | |
| 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). | |
| 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. | |
| static const ScreenshotFormat | _screenshot_formats [] |
| Available screenshot formats. | |
| static const ScreenshotFormat * | _cur_screenshot_format = std::begin(_screenshot_formats) |
| static ScreenshotType | _confirmed_screenshot_type |
| Screenshot type the current query is about to confirm. | |
The creation of screenshots!
Definition in file screenshot.cpp.
| #define MKCOLOUR | ( | x | ) | TO_LE32(x) |
Definition at line 74 of file screenshot.cpp.
| typedef void ScreenshotCallback(void *userdata, void *buf, uint y, uint pitch, uint n) |
Callback function signature for generating lines of pixel data to be written to the screenshot file.
| userdata | Pointer to user data. |
| buf | Destination buffer. |
| y | Line number of the first line to write. |
| pitch | Number of pixels to write (1 byte for 8bpp, 4 bytes for 32bpp). |
| n | Number of lines to write. |
Definition at line 53 of file screenshot.cpp.
| typedef bool ScreenshotHandlerProc(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) |
Function signature for a screenshot generation routine for one of the available formats.
| name | Filename, including extension. |
| callb | Callback function for generating lines of pixels. |
| userdata | User data, passed on to callb. |
| w | Width of the image in pixels. |
| h | Height of the image in pixels. |
| pixelformat | Bits per pixel (bpp), either 8 or 32. |
| palette | Colour palette (for 8bpp images). |
Definition at line 66 of file screenshot.cpp.
|
static |
Callback of the screenshot generator that dumps the current video buffer.
Definition at line 576 of file screenshot.cpp.
References Blitter::CopyImageToBuffer(), BlitterFactory::GetCurrentBlitter(), and Blitter::MoveTo().
Referenced by MakeSmallScreenshot().
| const char * GetCurrentScreenshotExtension | ( | ) |
Get filename extension of current screenshot file format.
Definition at line 554 of file screenshot.cpp.
References ScreenshotFormat::extension.
Referenced by FiosMakeHeightmapName().
|
static |
Callback for generating a heightmap.
Supports 8bpp grayscale only.
| buffer | Destination buffer. |
| y | Line number of the first line to write. |
| n | Number of lines to write. |
Definition at line 791 of file screenshot.cpp.
References _heightmap_highest_peak, Map::MaxX(), TileAddXY(), TileHeight(), and TileXY().
Referenced by MakeHeightmapScreenshot().
| void InitializeScreenshotFormats | ( | ) |
Initialize screenshot format information on startup, with _screenshot_format_name filled from the loadsave code.
Definition at line 560 of file screenshot.cpp.
References _screenshot_format_name, and _screenshot_formats.
Referenced by openttd_main().
|
static |
generate a large piece of the world
| userdata | Viewport area to draw |
| buf | Videobuffer with same bitdepth as current blitter |
| y | First line to render |
| pitch | Pitch of the videobuffer |
| n | Number of lines to render |
Definition at line 591 of file screenshot.cpp.
References _screen_disable_anim, Viewport::left, ScaleByZoom(), Viewport::top, Viewport::virtual_left, Viewport::virtual_top, Viewport::width, Viewport::zoom, and ZOOM_LVL_WORLD_SCREENSHOT.
Referenced by MakeLargeWorldScreenshot().
|
static |
Generic .BMP writer.
| name | file name including extension |
| callb | callback used for gathering rendered image |
| userdata | parameters forwarded to callb |
| w | width in pixels |
| h | height in pixels |
| pixelformat | bits per pixel |
| palette | colour palette (for 8bpp mode) |
Definition at line 116 of file screenshot.cpp.
References Align(), Colour::b, Clamp(), Colour::data, and FileHandle::Open().
| bool MakeHeightmapScreenshot | ( | const char * | filename | ) |
Make a heightmap of the current map.
| filename | Filename to use for saving. |
Definition at line 811 of file screenshot.cpp.
References _heightmap_highest_peak, Colour::b, HeightmapCallback(), Map::Iterate(), lengthof, ScreenshotFormat::proc, Map::SizeX(), Map::SizeY(), and TileHeight().
Referenced by RealMakeScreenshot().
|
static |
Make a screenshot of the map.
| t | Screenshot type: World or viewport screenshot |
| width | the width of the screenshot of, or 0 for current viewport width. |
| height | the height of the screenshot of, or 0 for current viewport height. |
Definition at line 775 of file screenshot.cpp.
References _cur_palette, ScreenshotFormat::extension, BlitterFactory::GetCurrentBlitter(), Blitter::GetScreenDepth(), Viewport::height, LargeWorldCallback(), MakeScreenshotName(), Palette::palette, ScreenshotFormat::proc, SCREENSHOT_NAME, SetupScreenshotViewport(), and Viewport::width.
Referenced by RealMakeScreenshot().
| bool MakeMinimapWorldScreenshot | ( | ) |
Make a minimap screenshot.
Definition at line 990 of file screenshot.cpp.
References _cur_palette, ScreenshotFormat::extension, MakeScreenshotName(), Palette::palette, ScreenshotFormat::proc, SCREENSHOT_NAME, Map::SizeX(), and Map::SizeY().
Referenced by RealMakeScreenshot().
|
static |
Generic .PCX file image writer.
| name | Filename, including extension. |
| callb | Callback function for generating lines of pixels. |
| userdata | User data, passed on to callb. |
| w | Width of the image in pixels. |
| h | Height of the image in pixels. |
| pixelformat | Bits per pixel (bpp), either 8 or 32. |
| palette | Colour palette (for 8bpp images). |
Definition at line 426 of file screenshot.cpp.
References Colour::b, Clamp(), Debug, and FileHandle::Open().
|
static |
Generic .PNG file image writer.
| name | Filename, including extension. |
| callb | Callback function for generating lines of pixels. |
| userdata | User data, passed on to callb. |
| w | Width of the image in pixels. |
| h | Height of the image in pixels. |
| pixelformat | Bits per pixel (bpp), either 8 or 32. |
| palette | Colour palette (for 8bpp images). |
Definition at line 256 of file screenshot.cpp.
References _grfconfig, Colour::b, BSWAP32(), Clamp(), FormatArrayAsHex(), BaseMedia< GraphicsSet >::GetUsedSet(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Iterate(), GRFConfig::next, and FileHandle::Open().
| bool MakeScreenshot | ( | ScreenshotType | t, |
| std::string | name, | ||
| uint32_t | width, | ||
| uint32_t | height | ||
| ) |
Schedule making a screenshot.
Unconditionally take a screenshot of the requested type.
| t | the type of screenshot to make. |
| name | the name to give to the screenshot. |
| width | the width of the screenshot of, or 0 for current viewport width (only works for SC_ZOOMEDIN and SC_DEFAULTZOOM). |
| height | the height of the screenshot of, or 0 for current viewport height (only works for SC_ZOOMEDIN and SC_DEFAULTZOOM). |
Definition at line 949 of file screenshot.cpp.
References VideoDriver::GetInstance(), lock, VideoDriver::QueueOnMainThread(), RealMakeScreenshot(), and SC_CRASHLOG.
Referenced by MakeScreenshotWithConfirm(), ScreenshotConfirmationCallback(), and CrashLog::WriteScreenshot().
|
static |
Construct a pathname for a screenshot file.
| default_fn | Default filename. |
| ext | Extension to use. |
| crashlog | Create path for crash.png |
Definition at line 643 of file screenshot.cpp.
References _full_screenshot_path, _local_company, _personal_dir, _screenshot_name, COMPANY_SPECTATOR, FileExists(), FiosGetScreenshotDir(), and GenerateDefaultSaveName().
Referenced by MakeLargeWorldScreenshot(), MakeMinimapWorldScreenshot(), MakeSmallScreenshot(), and RealMakeScreenshot().
| void MakeScreenshotWithConfirm | ( | ScreenshotType | t | ) |
Make a screenshot.
Ask for confirmation first if the screenshot will be huge.
| t | Screenshot type: World, defaultzoom, heightmap or viewport screenshot |
Definition at line 847 of file screenshot.cpp.
References _confirmed_screenshot_type, Viewport::height, MakeScreenshot(), SC_HEIGHTMAP, SC_MINIMAP, ScreenshotConfirmationCallback(), SetDParam(), SetupScreenshotViewport(), ShowQuery(), Map::SizeX(), Map::SizeY(), and Viewport::width.
Referenced by ScreenshotWindow::OnClick(), MainToolbarWindow::OnHotkey(), and ScenarioEditorToolbarWindow::OnHotkey().
|
static |
Make a screenshot of the current screen.
Definition at line 681 of file screenshot.cpp.
References _cur_palette, CurrentScreenCallback(), ScreenshotFormat::extension, BlitterFactory::GetCurrentBlitter(), Blitter::GetScreenDepth(), MakeScreenshotName(), Palette::palette, ScreenshotFormat::proc, and SCREENSHOT_NAME.
Referenced by RealMakeScreenshot().
|
static |
Definition at line 966 of file screenshot.cpp.
|
static |
Definition at line 233 of file screenshot.cpp.
|
static |
Definition at line 239 of file screenshot.cpp.
|
static |
Make a screenshot.
| t | the type of screenshot to make. |
| name | the name to give to the screenshot. |
| width | the width of the screenshot of, or 0 for current viewport width (only works for SC_ZOOMEDIN and SC_DEFAULTZOOM). |
| height | the height of the screenshot of, or 0 for current viewport height (only works for SC_ZOOMEDIN and SC_DEFAULTZOOM). |
Definition at line 876 of file screenshot.cpp.
References _heightmap_highest_peak, _screenshot_name, DrawDirtyBlocks(), ScreenshotFormat::extension, HEIGHTMAP_NAME, INVALID_STRING_ID, MakeHeightmapScreenshot(), MakeLargeWorldScreenshot(), MakeMinimapWorldScreenshot(), MakeScreenshotName(), MakeSmallScreenshot(), SC_CRASHLOG, SC_DEFAULTZOOM, SC_HEIGHTMAP, SC_MINIMAP, SC_VIEWPORT, SC_WORLD, SC_ZOOMEDIN, SetDParam(), SetDParamStr(), SetScreenshotWindowVisibility(), ShowErrorMessage(), WL_ERROR, and WL_WARNING.
Referenced by MakeScreenshot().
|
static |
Callback on the confirmation window for huge screenshots.
| confirmed | true on confirmation |
Definition at line 836 of file screenshot.cpp.
References _confirmed_screenshot_type, and MakeScreenshot().
Referenced by MakeScreenshotWithConfirm().
| void SetupScreenshotViewport | ( | ScreenshotType | t, |
| Viewport * | vp, | ||
| uint32_t | width, | ||
| uint32_t | height | ||
| ) |
Configure a Viewport for rendering (a part of) the map into a screenshot.
| t | Screenshot type | |
| width | the width of the screenshot, or 0 for current viewport width (needs to be 0 with SC_VIEWPORT, SC_CRASHLOG, and SC_WORLD). | |
| height | the height of the screenshot, or 0 for current viewport height (needs to be 0 with SC_VIEWPORT, SC_CRASHLOG, and SC_WORLD). | |
| [out] | vp | Result viewport |
Definition at line 694 of file screenshot.cpp.
References _settings_client, _settings_game, GameSettings::construction, ConstructionSettings::freeform_edges, GetMainWindow(), ClientSettings::gui, Viewport::height, Viewport::left, RemapCoords(), SC_CRASHLOG, SC_VIEWPORT, SC_WORLD, SC_ZOOMEDIN, Map::Size(), TILE_SIZE, TilePixelHeight(), TileX(), TileXY(), TileY(), Viewport::top, UnScaleByZoom(), Window::viewport, Viewport::virtual_height, Viewport::virtual_left, Viewport::virtual_top, Viewport::virtual_width, Viewport::width, Viewport::zoom, ZOOM_LVL_VIEWPORT, ZOOM_LVL_WORLD_SCREENSHOT, and GUISettings::zoom_min.
Referenced by MakeLargeWorldScreenshot(), and MakeScreenshotWithConfirm().
|
static |
Screenshot type the current query is about to confirm.
Definition at line 830 of file screenshot.cpp.
Referenced by MakeScreenshotWithConfirm(), and ScreenshotConfirmationCallback().
|
static |
Definition at line 551 of file screenshot.cpp.
| std::string _full_screenshot_path |
Pathname of the screenshot file.
Definition at line 42 of file screenshot.cpp.
Referenced by MakeScreenshotName(), and CrashLog::WriteScreenshot().
| uint _heightmap_highest_peak |
When saving a heightmap, this contains the highest peak on the map.
Definition at line 43 of file screenshot.cpp.
Referenced by HeightmapCallback(), MakeHeightmapScreenshot(), and RealMakeScreenshot().
| std::string _screenshot_format_name |
Extension of the current screenshot format (corresponds with _cur_screenshot_format).
Definition at line 40 of file screenshot.cpp.
Referenced by InitializeScreenshotFormats().
|
static |
Available screenshot formats.
Definition at line 542 of file screenshot.cpp.
Referenced by InitializeScreenshotFormats().
|
static |
Filename of the screenshot file.
Definition at line 41 of file screenshot.cpp.
Referenced by MakeScreenshotName(), and RealMakeScreenshot().
|
static |
Default filename of a saved heightmap.
Definition at line 38 of file screenshot.cpp.
Referenced by RealMakeScreenshot().
|
static |
Default filename of a saved screenshot.
Definition at line 37 of file screenshot.cpp.
Referenced by MakeLargeWorldScreenshot(), MakeMinimapWorldScreenshot(), and MakeSmallScreenshot().