OpenTTD Source
1.11.2
|
#include "stdafx.h"
#include "fileio_func.h"
#include "viewport_func.h"
#include "gfx_func.h"
#include "screenshot.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 "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_LE32X(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. More... | |
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. More... | |
Functions | |
PACK (struct BitmapFileHeader { uint16 type;uint32 size;uint32 reserved;uint32 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. More... | |
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. More... | |
static bool | MakePCXImage (const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) |
Generic .PCX file image writer. More... | |
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 *userdata, void *buf, uint y, uint pitch, uint n) |
Callback of the screenshot generator that dumps the current video buffer. More... | |
static void | LargeWorldCallback (void *userdata, void *buf, uint y, uint pitch, uint n) |
generate a large piece of the world More... | |
static const char * | MakeScreenshotName (const char *default_fn, const char *ext, bool crashlog=false) |
Construct a pathname for a screenshot file. More... | |
static bool | MakeSmallScreenshot (bool crashlog) |
Make a screenshot of the current screen. | |
void | SetupScreenshotViewport (ScreenshotType t, Viewport *vp, uint32 width, uint32 height) |
Configure a Viewport for rendering (a part of) the map into a screenshot. More... | |
static bool | MakeLargeWorldScreenshot (ScreenshotType t, uint32 width=0, uint32 height=0) |
Make a screenshot of the map. More... | |
static void | HeightmapCallback (void *userdata, void *buffer, uint y, uint pitch, uint n) |
Callback for generating a heightmap. More... | |
bool | MakeHeightmapScreenshot (const char *filename) |
Make a heightmap of the current map. More... | |
static void | ScreenshotConfirmationCallback (Window *w, bool confirmed) |
Callback on the confirmation window for huge screenshots. More... | |
void | MakeScreenshotWithConfirm (ScreenshotType t) |
Make a screenshot. More... | |
static bool | RealMakeScreenshot (ScreenshotType t, std::string name, uint32 width, uint32 height) |
Make a screenshot. More... | |
bool | MakeScreenshot (ScreenshotType t, std::string name, uint32 width, uint32 height) |
Schedule making a screenshot. More... | |
static Owner | GetMinimapOwner (TileIndex tile) |
Return the owner of a tile to display it with in the small map in mode "Owner". More... | |
static void | MinimapScreenCallback (void *userdata, 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. | |
char | _screenshot_format_name [8] |
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 char | _screenshot_name [128] |
Filename of the screenshot file. | |
char | _full_screenshot_name [MAX_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. More... | |
static ScreenshotType | _confirmed_screenshot_type |
Screenshot type the current query is about to confirm. | |
The creation of screenshots!
Definition in 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 52 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 65 of file screenshot.cpp.
|
static |
Callback of the screenshot generator that dumps the current video buffer.
Definition at line 600 of file screenshot.cpp.
Referenced by MakeSmallScreenshot().
Return the owner of a tile to display it with in the small map in mode "Owner".
tile | The tile of which we would like to get the colour. |
Definition at line 1001 of file screenshot.cpp.
References GetTileOwner(), GetTileType(), IsTileType(), MP_HOUSE, MP_INDUSTRY, MP_VOID, OWNER_DEITY, OWNER_END, and OWNER_TOWN.
|
static |
Callback for generating a heightmap.
Supports 8bpp grayscale only.
userdata | Pointer to user data. |
buffer | 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 818 of file screenshot.cpp.
Referenced by MakeHeightmapScreenshot().
|
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 615 of file screenshot.cpp.
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 115 of file screenshot.cpp.
bool MakeHeightmapScreenshot | ( | const char * | filename | ) |
Make a heightmap of the current map.
filename | Filename to use for saving. |
Definition at line 838 of file screenshot.cpp.
References _cur_screenshot_format, _heightmap_highest_peak, _screenshot_formats, Colour::a, HeightmapCallback(), lengthof, MapSize(), MapSizeX(), MapSizeY(), ScreenshotFormat::proc, and TileHeight().
|
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 799 of file screenshot.cpp.
References _cur_palette, _cur_screenshot_format, _screenshot_formats, ScreenshotFormat::extension, BlitterFactory::GetCurrentBlitter(), Blitter::GetScreenDepth(), Viewport::height, LargeWorldCallback(), MakeScreenshotName(), Palette::palette, ScreenshotFormat::proc, SCREENSHOT_NAME, SetupScreenshotViewport(), and Viewport::width.
|
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 438 of file screenshot.cpp.
|
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 261 of file screenshot.cpp.
bool MakeScreenshot | ( | ScreenshotType | t, |
std::string | name, | ||
uint32 | width, | ||
uint32 | 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 978 of file screenshot.cpp.
References VideoDriver::GetInstance(), lock, VideoDriver::QueueOnMainThread(), RealMakeScreenshot(), and SC_CRASHLOG.
Referenced by MakeScreenshotWithConfirm(), and ScreenshotConfirmationCallback().
|
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 670 of file screenshot.cpp.
References _screenshot_name, and StrEmpty().
Referenced by MakeLargeWorldScreenshot(), MakeMinimapWorldScreenshot(), and MakeSmallScreenshot().
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 876 of file screenshot.cpp.
References _confirmed_screenshot_type, Viewport::height, MakeScreenshot(), MapSizeX(), MapSizeY(), SC_HEIGHTMAP, SC_MINIMAP, ScreenshotConfirmationCallback(), SetDParam(), SetupScreenshotViewport(), ShowQuery(), and Viewport::width.
Referenced by ScreenshotWindow::OnClick().
|
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 905 of file screenshot.cpp.
References SC_VIEWPORT.
Referenced by MakeScreenshot().
|
static |
Callback on the confirmation window for huge screenshots.
w | Window with viewport |
confirmed | true on confirmation |
Definition at line 865 of file screenshot.cpp.
References _confirmed_screenshot_type, and MakeScreenshot().
Referenced by MakeScreenshotWithConfirm().
void SetupScreenshotViewport | ( | ScreenshotType | t, |
Viewport * | vp, | ||
uint32 | width, | ||
uint32 | 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 718 of file screenshot.cpp.
References FindWindowById(), Viewport::left, SC_CRASHLOG, SC_VIEWPORT, Viewport::top, Window::viewport, Viewport::virtual_height, Viewport::virtual_left, Viewport::virtual_top, Viewport::virtual_width, WC_MAIN_WINDOW, and Viewport::width.
Referenced by MakeLargeWorldScreenshot(), and MakeScreenshotWithConfirm().
|
static |
Available screenshot formats.
Definition at line 568 of file screenshot.cpp.
Referenced by GetCurrentScreenshotExtension(), InitializeScreenshotFormats(), MakeHeightmapScreenshot(), MakeLargeWorldScreenshot(), MakeMinimapWorldScreenshot(), and MakeSmallScreenshot().