OpenTTD Source  1.11.0-beta2
statusbar_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 "date_func.h"
12 #include "gfx_func.h"
13 #include "news_func.h"
14 #include "company_func.h"
15 #include "string_func.h"
16 #include "strings_func.h"
17 #include "company_base.h"
18 #include "tilehighlight_func.h"
19 #include "news_gui.h"
20 #include "company_gui.h"
21 #include "window_gui.h"
22 #include "saveload/saveload.h"
23 #include "window_func.h"
24 #include "statusbar_gui.h"
25 #include "toolbar_gui.h"
26 #include "core/geometry_func.hpp"
27 #include "guitimer_func.h"
28 #include "zoom_func.h"
29 
31 
32 #include "table/strings.h"
33 #include "table/sprites.h"
34 
35 #include "safeguards.h"
36 
37 static bool DrawScrollingStatusText(const NewsItem *ni, int scroll_pos, int left, int right, int top, int bottom)
38 {
39  CopyInDParam(0, ni->params, lengthof(ni->params));
40  StringID str = ni->string_id;
41 
42  char buf[512];
43  GetString(buf, str, lastof(buf));
44  const char *s = buf;
45 
46  char buffer[256];
47  char *d = buffer;
48  const char *last = lastof(buffer);
49 
50  for (;;) {
51  WChar c = Utf8Consume(&s);
52  if (c == 0) {
53  break;
54  } else if (c == '\n') {
55  if (d + 4 >= last) break;
56  d[0] = d[1] = d[2] = d[3] = ' ';
57  d += 4;
58  } else if (IsPrintable(c)) {
59  if (d + Utf8CharLen(c) >= last) break;
60  d += Utf8Encode(d, c);
61  }
62  }
63  *d = '\0';
64 
65  DrawPixelInfo tmp_dpi;
66  if (!FillDrawPixelInfo(&tmp_dpi, left, top, right - left, bottom)) return true;
67 
68  int width = GetStringBoundingBox(buffer).width;
69  int pos = (_current_text_dir == TD_RTL) ? (scroll_pos - width) : (right - scroll_pos - left);
70 
71  DrawPixelInfo *old_dpi = _cur_dpi;
72  _cur_dpi = &tmp_dpi;
73  DrawString(pos, INT16_MAX, 0, buffer, TC_LIGHT_BLUE, SA_LEFT | SA_FORCE);
74  _cur_dpi = old_dpi;
75 
76  return (_current_text_dir == TD_RTL) ? (pos < right - left) : (pos + width > 0);
77 }
78 
80  bool saving;
81  int ticker_scroll;
82  GUITimer ticker_timer;
83  GUITimer reminder_timeout;
84 
85  static const int TICKER_STOP = 1640;
86  static const int REMINDER_START = 1350;
87  static const int REMINDER_STOP = 0;
88  static const int COUNTER_STEP = 2;
89 
90  StatusBarWindow(WindowDesc *desc) : Window(desc)
91  {
92  this->ticker_scroll = TICKER_STOP;
93  this->ticker_timer.SetInterval(15);
94  this->reminder_timeout.SetInterval(REMINDER_STOP);
95 
96  this->InitNested();
98  PositionStatusbar(this);
99  }
100 
101  Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override
102  {
103  Point pt = { 0, _screen.height - sm_height };
104  return pt;
105  }
106 
107  void FindWindowPlacementAndResize(int def_width, int def_height) override
108  {
110  }
111 
112  void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
113  {
114  Dimension d;
115  switch (widget) {
116  case WID_S_LEFT:
118  d = GetStringBoundingBox(STR_WHITE_DATE_LONG);
119  break;
120 
121  case WID_S_RIGHT: {
122  int64 max_money = UINT32_MAX;
123  for (const Company *c : Company::Iterate()) max_money = std::max<int64>(c->money, max_money);
124  SetDParam(0, 100LL * max_money);
125  d = GetStringBoundingBox(STR_COMPANY_MONEY);
126  break;
127  }
128 
129  default:
130  return;
131  }
132 
133  d.width += padding.width;
134  d.height += padding.height;
135  *size = maxdim(d, *size);
136  }
137 
138  void DrawWidget(const Rect &r, int widget) const override
139  {
140  int text_offset = std::max(0, ((int)(r.bottom - r.top + 1) - FONT_HEIGHT_NORMAL) / 2); // Offset for rendering the text vertically centered
141  int text_top = r.top + text_offset;
142  switch (widget) {
143  case WID_S_LEFT:
144  /* Draw the date */
145  SetDParam(0, _date);
146  DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_WHITE_DATE_LONG, TC_FROMSTRING, SA_HOR_CENTER);
147  break;
148 
149  case WID_S_RIGHT: {
150  /* Draw company money, if any */
152  if (c != nullptr) {
153  SetDParam(0, c->money);
154  DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER);
155  }
156  break;
157  }
158 
159  case WID_S_MIDDLE:
160  /* Draw status bar */
161  if (this->saving) { // true when saving is active
162  DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_SAVING_GAME, TC_FROMSTRING, SA_HOR_CENTER | SA_VERT_CENTER);
163  } else if (_do_autosave) {
164  DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_AUTOSAVE, TC_FROMSTRING, SA_HOR_CENTER);
165  } else if (_pause_mode != PM_UNPAUSED) {
166  StringID msg = (_pause_mode & PM_PAUSED_LINK_GRAPH) ? STR_STATUSBAR_PAUSED_LINK_GRAPH : STR_STATUSBAR_PAUSED;
167  DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, msg, TC_FROMSTRING, SA_HOR_CENTER);
168  } else if (this->ticker_scroll < TICKER_STOP && _statusbar_news_item != nullptr && _statusbar_news_item->string_id != 0) {
169  /* Draw the scrolling news text */
170  if (!DrawScrollingStatusText(_statusbar_news_item, ScaleGUITrad(this->ticker_scroll), r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, r.bottom)) {
173  /* This is the default text */
175  DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER);
176  }
177  }
178  } else {
180  /* This is the default text */
182  DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_COMPANY_NAME, TC_FROMSTRING, SA_HOR_CENTER);
183  }
184  }
185 
186  if (!this->reminder_timeout.HasElapsed()) {
187  Dimension icon_size = GetSpriteSize(SPR_UNREAD_NEWS);
188  DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, r.top + std::max(0, ((int)(r.bottom - r.top + 1) - (int)icon_size.height) / 2));
189  }
190  break;
191  }
192  }
193 
199  void OnInvalidateData(int data = 0, bool gui_scope = true) override
200  {
201  if (!gui_scope) return;
202  switch (data) {
203  default: NOT_REACHED();
204  case SBI_SAVELOAD_START: this->saving = true; break;
205  case SBI_SAVELOAD_FINISH: this->saving = false; break;
206  case SBI_SHOW_TICKER: this->ticker_scroll = 0; break;
207  case SBI_SHOW_REMINDER: this->reminder_timeout.SetInterval(REMINDER_START); break;
208  case SBI_NEWS_DELETED:
209  this->ticker_scroll = TICKER_STOP; // reset ticker ...
210  this->reminder_timeout.SetInterval(REMINDER_STOP); // ... and reminder
211  break;
212  }
213  }
214 
215  void OnClick(Point pt, int widget, int click_count) override
216  {
217  switch (widget) {
218  case WID_S_MIDDLE: ShowLastNewsMessage(); break;
220  default: ResetObjectToPlace();
221  }
222  }
223 
224  void OnRealtimeTick(uint delta_ms) override
225  {
226  if (_pause_mode != PM_UNPAUSED) return;
227 
228  if (this->ticker_scroll < TICKER_STOP) { // Scrolling text
229  uint count = this->ticker_timer.CountElapsed(delta_ms);
230  if (count > 0) {
231  this->ticker_scroll += count;
233  }
234  }
235 
236  // Red blot to show there are new unread newsmessages
237  if (this->reminder_timeout.Elapsed(delta_ms)) {
239  }
240  }
241 };
242 
243 static const NWidgetPart _nested_main_status_widgets[] = {
245  NWidget(WWT_PANEL, COLOUR_GREY, WID_S_LEFT), SetMinimalSize(140, 12), EndContainer(),
246  NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_MIDDLE), SetMinimalSize(40, 12), SetDataTip(0x0, STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS), SetResize(1, 0),
247  NWidget(WWT_PUSHBTN, COLOUR_GREY, WID_S_RIGHT), SetMinimalSize(140, 12),
248  EndContainer(),
249 };
250 
251 static WindowDesc _main_status_desc(
252  WDP_MANUAL, nullptr, 0, 0,
254  WDF_NO_FOCUS,
255  _nested_main_status_widgets, lengthof(_nested_main_status_widgets)
256 );
257 
262 {
263  const StatusBarWindow *w = dynamic_cast<StatusBarWindow*>(FindWindowById(WC_STATUS_BAR, 0));
264  return w != nullptr && w->ticker_scroll < StatusBarWindow::TICKER_STOP;
265 }
266 
271 {
272  new StatusBarWindow(&_main_status_desc);
273 }
WD_FRAMERECT_TOP
@ WD_FRAMERECT_TOP
Offset at top to draw the frame rectangular area.
Definition: window_gui.h:62
InvalidateWindowData
void InvalidateWindowData(WindowClass cls, WindowNumber number, int data, bool gui_scope)
Mark window data of the window of a given class and specific window number as invalid (in need of re-...
Definition: window.cpp:3321
StatusBarWindow::OnRealtimeTick
void OnRealtimeTick(uint delta_ms) override
Called periodically.
Definition: statusbar_gui.cpp:224
StatusBarWindow::OnClick
void OnClick(Point pt, int widget, int click_count) override
A click with the left mouse button has been made on the window.
Definition: statusbar_gui.cpp:215
WChar
char32_t WChar
Type for wide characters, i.e.
Definition: string_type.h:35
Dimension
Dimensions (a width and height) of a rectangle in 2D.
Definition: geometry_type.hpp:27
Pool::PoolItem<&_company_pool >::GetIfValid
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
Definition: pool_type.hpp:340
statusbar_widget.h
toolbar_gui.h
guitimer_func.h
statusbar_gui.h
NewsItem
Information about a single item of news.
Definition: news_type.h:119
company_base.h
company_gui.h
SA_LEFT
@ SA_LEFT
Left align the text.
Definition: gfx_func.h:96
Utf8CharLen
static int8 Utf8CharLen(WChar c)
Return the length of a UTF-8 encoded character.
Definition: string_func.h:109
NWID_HORIZONTAL
@ NWID_HORIZONTAL
Horizontal container.
Definition: widget_type.h:73
maxdim
Dimension maxdim(const Dimension &d1, const Dimension &d2)
Compute bounding box of both dimensions.
Definition: geometry_func.cpp:22
FindWindowById
Window * FindWindowById(WindowClass cls, WindowNumber number)
Find a window by its class and window number.
Definition: window.cpp:1133
WID_S_RIGHT
@ WID_S_RIGHT
Right part; bank balance.
Definition: statusbar_widget.h:17
_do_autosave
bool _do_autosave
are we doing an autosave at the moment?
Definition: saveload.cpp:68
WDF_NO_FOCUS
@ WDF_NO_FOCUS
This window won't get focus/make any other window lose focus when click.
Definition: window_gui.h:210
Utf8Encode
size_t Utf8Encode(T buf, WChar c)
Encode a unicode character and place it in the buffer.
Definition: string.cpp:523
SetResize
static NWidgetPart SetResize(int16 dx, int16 dy)
Widget part function for setting the resize step.
Definition: widget_type.h:929
saveload.h
zoom_func.h
DrawString
int DrawString(int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
Definition: gfx.cpp:640
StatusBarWindow::OnInitialPosition
Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override
Compute the initial position of the window.
Definition: statusbar_gui.cpp:101
SA_FORCE
@ SA_FORCE
Force the alignment, i.e. don't swap for RTL languages.
Definition: gfx_func.h:108
IsNewsTickerShown
bool IsNewsTickerShown()
Checks whether the news ticker is currently being used.
Definition: statusbar_gui.cpp:261
SA_HOR_CENTER
@ SA_HOR_CENTER
Horizontally center the text.
Definition: gfx_func.h:97
StatusBarWindow
Definition: statusbar_gui.cpp:79
StatusBarWindow::REMINDER_STOP
static const int REMINDER_STOP
reminder disappears when counter reaches this value
Definition: statusbar_gui.cpp:87
SetDParam
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
Definition: strings_func.h:199
NWidgetPart
Partial widget specification to allow NWidgets to be written nested.
Definition: widget_type.h:909
SetDataTip
static NWidgetPart SetDataTip(uint32 data, StringID tip)
Widget part function for setting the data and tooltip.
Definition: widget_type.h:1013
GetStringBoundingBox
Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize)
Return the string dimension in pixels.
Definition: gfx.cpp:842
PM_UNPAUSED
@ PM_UNPAUSED
A normal unpaused game.
Definition: openttd.h:59
gfx_func.h
WindowDesc
High level window description.
Definition: window_gui.h:166
window_gui.h
StatusBarWindow::UpdateWidgetSize
void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override
Update size and resize step of a widget in the window.
Definition: statusbar_gui.cpp:112
PositionStatusbar
int PositionStatusbar(Window *w)
(Re)position statusbar window at the screen.
Definition: window.cpp:3518
ShowCompanyFinances
void ShowCompanyFinances(CompanyID company)
Open the finances window of a company.
Definition: company_gui.cpp:480
GUITimer
Definition: guitimer_func.h:13
WWT_PUSHBTN
@ WWT_PUSHBTN
Normal push-button (no toggle button) with custom drawing.
Definition: widget_type.h:101
Window::resize
ResizeInfo resize
Resize information.
Definition: window_gui.h:322
_date
Date _date
Current date in days (day counter)
Definition: date.cpp:28
SBI_SAVELOAD_FINISH
@ SBI_SAVELOAD_FINISH
finished saving
Definition: statusbar_gui.h:16
tilehighlight_func.h
Window::InitNested
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
Definition: window.cpp:1861
_toolbar_width
uint _toolbar_width
Width of the toolbar, shared by statusbar.
Definition: toolbar_gui.cpp:63
WF_WHITE_BORDER
@ WF_WHITE_BORDER
Window white border counter bit mask.
Definition: window_gui.h:240
WD_FRAMERECT_LEFT
@ WD_FRAMERECT_LEFT
Offset at left to draw the frame rectangular area.
Definition: window_gui.h:60
SBI_NEWS_DELETED
@ SBI_NEWS_DELETED
abort current news display (active news were deleted)
Definition: statusbar_gui.h:19
CompanyProperties::money
Money money
Money owned by the company.
Definition: company_base.h:66
WD_FRAMERECT_RIGHT
@ WD_FRAMERECT_RIGHT
Offset at right to draw the frame rectangular area.
Definition: window_gui.h:61
_pause_mode
PauseMode _pause_mode
The current pause mode.
Definition: gfx.cpp:47
SA_VERT_CENTER
@ SA_VERT_CENTER
Vertically center the text.
Definition: gfx_func.h:102
_local_company
CompanyID _local_company
Company controlled by the human player at this client. Can also be COMPANY_SPECTATOR.
Definition: company_cmd.cpp:46
safeguards.h
Window::flags
WindowFlags flags
Window flags.
Definition: window_gui.h:310
StatusBarWindow::REMINDER_START
static const int REMINDER_START
time in ms for reminder notification (red dot on the right) to stay
Definition: statusbar_gui.cpp:86
StatusBarWindow::TICKER_STOP
static const int TICKER_STOP
scrolling is finished when counter reaches this value
Definition: statusbar_gui.cpp:85
NewsItem::string_id
StringID string_id
Message text.
Definition: news_type.h:122
DrawSprite
void DrawSprite(SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom)
Draw a sprite, not in a viewport.
Definition: gfx.cpp:978
sprites.h
Point
Coordinates of a point in 2D.
Definition: geometry_type.hpp:21
SBI_SAVELOAD_START
@ SBI_SAVELOAD_START
started saving
Definition: statusbar_gui.h:15
date_func.h
stdafx.h
Window::window_number
WindowNumber window_number
Window number within the window class.
Definition: window_gui.h:312
SBI_SHOW_REMINDER
@ SBI_SHOW_REMINDER
show a reminder (dot on the right side of the statusbar)
Definition: statusbar_gui.h:18
WID_S_MIDDLE
@ WID_S_MIDDLE
Middle part; current news or company name or *** SAVING *** or *** PAUSED ***.
Definition: statusbar_widget.h:16
WC_NONE
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
Definition: window_type.h:38
FillDrawPixelInfo
bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height)
Set up a clipping area for only drawing into a certain area.
Definition: gfx.cpp:1638
GetSpriteSize
Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
Get the size of a sprite.
Definition: gfx.cpp:913
string_func.h
StringID
uint32 StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
StatusBarWindow::FindWindowPlacementAndResize
void FindWindowPlacementAndResize(int def_width, int def_height) override
Resize window towards the default size.
Definition: statusbar_gui.cpp:107
EndContainer
static NWidgetPart EndContainer()
Widget part function for denoting the end of a container (horizontal, vertical, WWT_FRAME,...
Definition: widget_type.h:998
Pool::PoolItem<&_company_pool >::Iterate
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Definition: pool_type.hpp:378
strings_func.h
WID_S_LEFT
@ WID_S_LEFT
Left part of the statusbar; date is shown there.
Definition: statusbar_widget.h:15
FONT_HEIGHT_NORMAL
#define FONT_HEIGHT_NORMAL
Height of characters in the normal (FS_NORMAL) font.
Definition: gfx_func.h:179
ScaleGUITrad
static int ScaleGUITrad(int value)
Scale traditional pixel dimensions to GUI zoom level.
Definition: zoom_func.h:76
NWidget
static NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx=-1)
Widget part function for starting a new 'real' widget.
Definition: widget_type.h:1113
COMPANY_SPECTATOR
@ COMPANY_SPECTATOR
The client is spectating.
Definition: company_type.h:35
StatusBarWindow::DrawWidget
void DrawWidget(const Rect &r, int widget) const override
Draw the contents of a nested widget.
Definition: statusbar_gui.cpp:138
geometry_func.hpp
SetDParamMaxValue
void SetDParamMaxValue(uint n, uint64 max_value, uint min_count, FontSize size)
Set DParam n to some number that is suitable for string size computations.
Definition: strings.cpp:104
SetMinimalSize
static NWidgetPart SetMinimalSize(int16 x, int16 y)
Widget part function for setting the minimal size.
Definition: widget_type.h:946
WWT_PANEL
@ WWT_PANEL
Simple depressed panel.
Definition: widget_type.h:48
ShowLastNewsMessage
void ShowLastNewsMessage()
Show previous news item.
Definition: news_gui.cpp:1037
news_gui.h
DAYS_IN_YEAR
static const int DAYS_IN_YEAR
days per year
Definition: date_type.h:29
GUITimer::CountElapsed
uint CountElapsed(uint delta)
Count how many times the interval has elapsed.
Definition: guitimer_func.h:40
company_func.h
PM_PAUSED_LINK_GRAPH
@ PM_PAUSED_LINK_GRAPH
A game paused due to the link graph schedule lagging.
Definition: openttd.h:66
GUITimer::Elapsed
bool Elapsed(uint delta)
Test if a timer has elapsed.
Definition: guitimer_func.h:55
window_func.h
lengthof
#define lengthof(x)
Return the length of an fixed size array.
Definition: stdafx.h:367
WDP_MANUAL
@ WDP_MANUAL
Manually align the window (so no automatic location finding)
Definition: window_gui.h:153
NewsItem::params
uint64 params[10]
Parameters for string resolving.
Definition: news_type.h:139
Window
Data structure for an opened window.
Definition: window_gui.h:276
Pool::PoolItem<&_company_pool >::IsValidID
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
Definition: pool_type.hpp:318
WC_STATUS_BAR
@ WC_STATUS_BAR
Statusbar (at the bottom of your screen); Window numbers:
Definition: window_type.h:57
StatusBarWindow::COUNTER_STEP
static const int COUNTER_STEP
this is subtracted from active counters every tick
Definition: statusbar_gui.cpp:88
Window::SetWidgetDirty
void SetWidgetDirty(byte widget_index) const
Invalidate a widget, i.e.
Definition: window.cpp:597
Rect
Specification of a rectangle with absolute coordinates of all edges.
Definition: geometry_type.hpp:47
Company
Definition: company_base.h:110
CLRBITS
#define CLRBITS(x, y)
Clears several bits in a variable.
Definition: bitmath_func.hpp:166
lastof
#define lastof(x)
Get the last element of an fixed size array.
Definition: stdafx.h:383
ResetObjectToPlace
void ResetObjectToPlace()
Reset the cursor and mouse mode handling back to default (normal cursor, only clicking in windows).
Definition: viewport.cpp:3421
ShowStatusBar
void ShowStatusBar()
Show our status bar.
Definition: statusbar_gui.cpp:270
TD_RTL
@ TD_RTL
Text is written right-to-left by default.
Definition: strings_type.h:24
_current_text_dir
TextDirection _current_text_dir
Text direction of the currently selected language.
Definition: strings.cpp:48
SBI_SHOW_TICKER
@ SBI_SHOW_TICKER
start scrolling news
Definition: statusbar_gui.h:17
CopyInDParam
void CopyInDParam(int offs, const uint64 *src, int num)
Copy num string parameters from array src into the global string parameter array.
Definition: strings.cpp:138
DrawPixelInfo
Data about how and where to blit pixels.
Definition: gfx_type.h:155
StatusBarWindow::OnInvalidateData
void OnInvalidateData(int data=0, bool gui_scope=true) override
Some data on this window has become invalid.
Definition: statusbar_gui.cpp:199
news_func.h
Window::FindWindowPlacementAndResize
virtual void FindWindowPlacementAndResize(int def_width, int def_height)
Resize window towards the default size.
Definition: window.cpp:1526
MAX_YEAR
static const Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date,...
Definition: date_type.h:94