OpenTTD Source  20241108-master-g80f628063a
screenshot_gui.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #include "stdafx.h"
11 #include "window_func.h"
12 #include "window_gui.h"
13 #include "screenshot.h"
14 #include "gfx_func.h"
15 
17 
18 #include "table/strings.h"
19 
20 #include "safeguards.h"
21 
23  ScreenshotWindow(WindowDesc &desc) : Window(desc)
24  {
25  this->CreateNestedTree();
26  this->FinishInitNested();
27  }
28 
29  void OnPaint() override
30  {
31  this->DrawWidgets();
32  }
33 
34  void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
35  {
36  ScreenshotType st;
37  switch (widget) {
38  default: return;
39  case WID_SC_TAKE: st = SC_VIEWPORT; break;
40  case WID_SC_TAKE_ZOOMIN: st = SC_ZOOMEDIN; break;
41  case WID_SC_TAKE_DEFAULTZOOM: st = SC_DEFAULTZOOM; break;
42  case WID_SC_TAKE_WORLD: st = SC_WORLD; break;
43  case WID_SC_TAKE_HEIGHTMAP: st = SC_HEIGHTMAP; break;
44  case WID_SC_TAKE_MINIMAP: st = SC_MINIMAP; break;
45  }
47  }
48 };
49 
50 static constexpr NWidgetPart _nested_screenshot[] = {
52  NWidget(WWT_CLOSEBOX, COLOUR_GREY),
53  NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_SCREENSHOT_CAPTION, 0),
54  NWidget(WWT_SHADEBOX, COLOUR_GREY),
55  NWidget(WWT_STICKYBOX, COLOUR_GREY),
56  EndContainer(),
58  NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
59  NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_ZOOMIN), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_ZOOMIN_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
60  NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_DEFAULTZOOM), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
61  NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
62  NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_HEIGHTMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
63  NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_MINIMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_MINIMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0),
64  EndContainer(),
65 };
66 
67 static WindowDesc _screenshot_window_desc(
68  WDP_AUTO, "take_a_screenshot", 200, 100,
70  0,
71  _nested_screenshot
72 );
73 
74 void ShowScreenshotWindow()
75 {
77  new ScreenshotWindow(_screenshot_window_desc);
78 }
79 
85 {
87 
88  if (scw == nullptr) return;
89 
90  if (hide) {
91  /* Set dirty the screen area where the window is covering (not the window itself), then move window off screen. */
92  scw->SetDirty();
93  scw->left += 2 * _screen.width;
94  } else {
95  /* Return window to original position. */
96  scw->left -= 2 * _screen.width;
97  scw->SetDirty();
98  }
99 }
Functions related to the gfx engine.
constexpr NWidgetPart SetFill(uint16_t fill_x, uint16_t fill_y)
Widget part function for setting filling.
Definition: widget_type.h:1181
constexpr NWidgetPart SetDataTip(uint32_t data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1202
constexpr NWidgetPart NWidget(WidgetType tp, Colours col, WidgetID idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1309
constexpr NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:1191
constexpr NWidgetPart SetMinimalTextLines(uint8_t lines, uint8_t spacing, FontSize size=FS_NORMAL)
Widget part function for setting the minimal text lines.
Definition: widget_type.h:1149
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
Definition: window.cpp:940
A number of safeguards to prevent using unsafe methods.
void MakeScreenshotWithConfirm(ScreenshotType t)
Make a screenshot.
Definition: screenshot.cpp:847
Functions to make screenshots.
ScreenshotType
Type of requested screenshot.
Definition: screenshot.h:18
@ SC_VIEWPORT
Screenshot of viewport.
Definition: screenshot.h:19
@ SC_ZOOMEDIN
Fully zoomed in screenshot of the visible area.
Definition: screenshot.h:21
@ SC_HEIGHTMAP
Heightmap of the world.
Definition: screenshot.h:24
@ SC_WORLD
World screenshot.
Definition: screenshot.h:23
@ SC_MINIMAP
Minimap screenshot.
Definition: screenshot.h:25
@ SC_DEFAULTZOOM
Zoomed to default zoom level screenshot of the visible area.
Definition: screenshot.h:22
void SetScreenshotWindowVisibility(bool hide)
Set the visibility of the screenshot window when taking a screenshot.
Types related to the screenshot widgets.
@ WID_SC_TAKE
Button for taking a normal screenshot.
@ WID_SC_TAKE_WORLD
Button for taking a screenshot of the whole world.
@ WID_SC_TAKE_MINIMAP
Button for taking a minimap screenshot.
@ WID_SC_TAKE_ZOOMIN
Button for taking a zoomed in screenshot.
@ WID_SC_TAKE_DEFAULTZOOM
Button for taking a screenshot at normal zoom.
@ WID_SC_TAKE_HEIGHTMAP
Button for taking a heightmap "screenshot".
Definition of base types and functions in a cross-platform compatible way.
Partial widget specification to allow NWidgets to be written nested.
Definition: widget_type.h:1075
Coordinates of a point in 2D.
void OnPaint() override
The window must be repainted.
High level window description.
Definition: window_gui.h:159
Data structure for an opened window.
Definition: window_gui.h:273
void FinishInitNested(WindowNumber window_number=0)
Perform the second part of the initialization of a nested widget tree.
Definition: window.cpp:1733
void DrawWidgets() const
Paint all widgets of a window.
Definition: widget.cpp:731
void CreateNestedTree()
Perform the first part of the initialization of a nested widget tree.
Definition: window.cpp:1723
int left
x position of left edge of the window
Definition: window_gui.h:309
Window(WindowDesc &desc)
Empty constructor, initialization has been moved to InitNested() called from the constructor of the d...
Definition: window.cpp:1756
@ NC_EQUALSIZE
Value of the NCB_EQUALSIZE flag.
Definition: widget_type.h:524
@ WWT_PUSHTXTBTN
Normal push-button (no toggle button) with text caption.
Definition: widget_type.h:112
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:75
@ WWT_STICKYBOX
Sticky box (at top-right of a window, after WWT_DEFSIZEBOX)
Definition: widget_type.h:66
@ WWT_SHADEBOX
Shade box (at top-right of a window, between WWT_DEBUGBOX and WWT_DEFSIZEBOX)
Definition: widget_type.h:64
@ WWT_CAPTION
Window caption (window title between closebox and stickybox)
Definition: widget_type.h:61
@ NWID_VERTICAL
Vertical container.
Definition: widget_type.h:77
@ WWT_CLOSEBOX
Close box (at top-left of a window)
Definition: widget_type.h:69
void CloseWindowById(WindowClass cls, WindowNumber number, bool force, int data)
Close a window by its class and window number (if it is open).
Definition: window.cpp:1140
Window * FindWindowById(WindowClass cls, WindowNumber number)
Find a window by its class and window number.
Definition: window.cpp:1098
Window functions not directly related to making/drawing windows.
Functions, definitions and such used only by the GUI.
@ WDP_AUTO
Find a place automatically.
Definition: window_gui.h:147
int WidgetID
Widget ID.
Definition: window_type.h:18
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
Definition: window_type.h:45
@ WC_SCREENSHOT
Screenshot window; Window numbers:
Definition: window_type.h:716