OpenTTD Source 20241224-master-gf74b0cf984
window.cpp File Reference

Windowing system, widgets and events. More...

#include "stdafx.h"
#include "company_func.h"
#include "gfx_func.h"
#include "console_func.h"
#include "console_gui.h"
#include "viewport_func.h"
#include "progress.h"
#include "blitter/factory.hpp"
#include "zoom_func.h"
#include "vehicle_base.h"
#include "depot_func.h"
#include "window_func.h"
#include "tilehighlight_func.h"
#include "network/network.h"
#include "querystring_gui.h"
#include "strings_func.h"
#include "settings_type.h"
#include "settings_func.h"
#include "ini_type.h"
#include "newgrf_debug.h"
#include "hotkeys.h"
#include "toolbar_gui.h"
#include "statusbar_gui.h"
#include "error.h"
#include "game/game.hpp"
#include "video/video_driver.hpp"
#include "framerate_type.h"
#include "network/network_func.h"
#include "news_func.h"
#include "timer/timer.h"
#include "timer/timer_window.h"
#include "safeguards.h"

Go to the source code of this file.

Enumerations

enum  ViewportAutoscrolling { VA_DISABLED , VA_MAIN_VIEWPORT_FULLSCREEN , VA_MAIN_VIEWPORT , VA_EVERY_VIEWPORT }
 Values for _settings_client.gui.auto_scrolling. More...
 
enum  PreventHideDirection { PHD_UP , PHD_DOWN }
 Direction for moving the window. More...
 
enum  MouseClick {
  MC_NONE = 0 , MC_LEFT , MC_RIGHT , MC_DOUBLE_LEFT ,
  MC_HOVER
}
 

Functions

static bool DescSorter (WindowDesc *const &a, WindowDesc *const &b)
 Sort WindowDesc by ini_key.
 
void SetFocusedWindow (Window *w)
 Set the window that has the focus.
 
bool EditBoxInGlobalFocus ()
 Check if an edit box is in global focus.
 
bool FocusedWindowIsConsole ()
 Check if a console is focused.
 
static void StartWindowDrag (Window *w)
 Start window dragging.
 
static void StartWindowSizing (Window *w, bool to_left)
 Start resizing a window.
 
static void DispatchLeftClickEvent (Window *w, int x, int y, int click_count)
 Dispatch left mouse-button (possibly double) click in window.
 
static void DispatchRightClickEvent (Window *w, int x, int y)
 Dispatch right mouse-button click in window.
 
static void DispatchHoverEvent (Window *w, int x, int y)
 Dispatch hover of the mouse over a window.
 
static void DispatchMouseWheelEvent (Window *w, NWidgetCore *nwid, int wheel)
 Dispatch the mousewheel-action to the window.
 
static bool MayBeShown (const Window *w)
 Returns whether a window may be shown or not.
 
static void DrawOverlappedWindow (Window *w, int left, int top, int right, int bottom)
 Generate repaint events for the visible part of window w within the rectangle.
 
void DrawOverlappedWindowForAll (int left, int top, int right, int bottom)
 From a rectangle that needs redrawing, find the windows that intersect with the rectangle.
 
WindowFindWindowById (WindowClass cls, WindowNumber number)
 Find a window by its class and window number.
 
WindowFindWindowByClass (WindowClass cls)
 Find any window by its class.
 
WindowGetMainWindow ()
 Get the main window, i.e.
 
void CloseWindowById (WindowClass cls, WindowNumber number, bool force, int data)
 Close a window by its class and window number (if it is open).
 
void CloseWindowByClass (WindowClass cls, int data)
 Close all windows of a given class.
 
void CloseCompanyWindows (CompanyID id)
 Close all windows of a company.
 
void ChangeWindowOwner (Owner old_owner, Owner new_owner)
 Change the owner of all the windows one company can take over from another company in the case of a company merger.
 
static void BringWindowToFront (Window *w, bool dirty)
 On clicking on a window, make it the frontmost window of all windows with an equal or lower z-priority.
 
WindowBringWindowToFrontById (WindowClass cls, WindowNumber number)
 Find a window and make it the relative top-window on the screen.
 
static bool IsVitalWindow (const Window *w)
 
static uint GetWindowZPriority (WindowClass wc)
 Get the z-priority for a given window.
 
static bool IsGoodAutoPlace1 (int left, int top, int width, int height, int toolbar_y, Point &pos)
 Decide whether a given rectangle is a good place to open a completely visible new window.
 
static bool IsGoodAutoPlace2 (int left, int top, int width, int height, int toolbar_y, Point &pos)
 Decide whether a given rectangle is a good place to open a mostly visible new window.
 
static Point GetAutoPlacePosition (int width, int height)
 Find a good place for opening a new window of a given width and height.
 
Point GetToolbarAlignedWindowPosition (int window_width)
 Computer the position of the top-left corner of a window to be opened right under the toolbar.
 
static Point LocalGetWindowPlacement (const WindowDesc &desc, int16_t sm_width, int16_t sm_height, int window_number)
 Compute the position of the top-left corner of a new window that is opened.
 
WindowFindWindowFromPt (int x, int y)
 Do a search for a window at specific coordinates.
 
void InitWindowSystem ()
 (re)initialize the windowing system
 
void UnInitWindowSystem ()
 Close down the windowing system.
 
void ResetWindowSystem ()
 Reset the windowing system, by means of shutting it down followed by re-initialization.
 
static void DecreaseWindowCounters ()
 
static void HandlePlacePresize ()
 
static EventState HandleMouseDragDrop ()
 Handle dragging and dropping in mouse dragging mode (WSM_DRAGDROP).
 
static void HandleMouseOver ()
 Report position of the mouse to the underlying window.
 
static void PreventHiding (int *nx, int *ny, const Rect &rect, const Window *v, int px, PreventHideDirection dir)
 Do not allow hiding of the rectangle with base coordinates nx and ny behind window v.
 
static void EnsureVisibleCaption (Window *w, int nx, int ny)
 Make sure at least a part of the caption bar is still visible by moving the window if necessary.
 
void ResizeWindow (Window *w, int delta_x, int delta_y, bool clamp_to_screen, bool schedule_resize)
 Resize the window.
 
int GetMainViewTop ()
 Return the top of the main view available for general use.
 
int GetMainViewBottom ()
 Return the bottom of the main view available for general use.
 
static EventState HandleWindowDragging ()
 Handle dragging/resizing of a window.
 
static void HandleScrollbarScrolling (Window *w)
 Handle scrollbar scrolling with the mouse.
 
static EventState HandleActiveWidget ()
 Handle active widget (mouse draggin on widget) with the mouse.
 
static EventState HandleViewportScroll ()
 Handle viewport scrolling with the mouse.
 
static bool MaybeBringWindowToFront (Window *w)
 Check if a window can be made relative top-most window, and if so do it.
 
void HandleToolbarHotkey (int hotkey)
 Handle Toolbar hotkey events - can come from a source like the MacBook Touch Bar.
 
void HandleKeypress (uint keycode, char32_t key)
 Handle keyboard input.
 
void HandleCtrlChanged ()
 State of CONTROL key has changed.
 
void HandleTextInput (const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end)
 Handle text input.
 
static void HandleAutoscroll ()
 If needed and switched on, perform auto scrolling (automatically moving window contents when mouse is near edge of the window).
 
EventState VpHandlePlaceSizingDrag ()
 Handle the mouse while dragging for placement/resizing.
 
const std::chrono::milliseconds TIME_BETWEEN_DOUBLE_CLICK (500)
 Time between 2 left clicks before it becoming a double click.
 
static void ScrollMainViewport (int x, int y)
 
static void HandleKeyScrolling ()
 
static void MouseLoop (MouseClick click, int mousewheel)
 
void HandleMouseEvents ()
 Handle a mouse event from the video driver.
 
static void CheckSoftLimit ()
 Check the soft limit of deletable (non vital, non sticky) windows.
 
void InputLoop ()
 Regular call from the global game loop.
 
void CallWindowRealtimeTickEvent (uint delta_ms)
 Dispatch OnRealtimeTick event over all windows.
 
void UpdateWindows ()
 Update the continuously changing contents of the windows, such as the viewports.
 
void SetWindowDirty (WindowClass cls, WindowNumber number)
 Mark window as dirty (in need of repainting)
 
void SetWindowWidgetDirty (WindowClass cls, WindowNumber number, WidgetID widget_index)
 Mark a particular widget in a particular window as dirty (in need of repainting)
 
void SetWindowClassesDirty (WindowClass cls)
 Mark all windows of a particular class as dirty (in need of repainting)
 
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-computing)
 
void InvalidateWindowClassesData (WindowClass cls, int data, bool gui_scope)
 Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by default the invalidation is not considered to be called from GUI scope.
 
void CallWindowGameTickEvent ()
 Dispatch OnGameTick event over all windows.
 
void CloseNonVitalWindows ()
 Try to close a non-vital window.
 
void CloseAllNonVitalWindows ()
 It is possible that a stickied window gets to a position where the 'close' button is outside the gaming area.
 
void DeleteAllMessages ()
 Delete all messages and close their corresponding window (if any).
 
void CloseConstructionWindows ()
 Close all windows that are used for construction of vehicle etc.
 
void HideVitalWindows ()
 Close all always on-top windows to get an empty screen.
 
void ReInitWindow (Window *w, bool zoom_changed)
 
void ReInitAllWindows (bool zoom_changed)
 Re-initialize all windows.
 
static int PositionWindow (Window *w, WindowClass clss, int setting)
 (Re)position a window at the screen.
 
int PositionMainToolbar (Window *w)
 (Re)position main toolbar window at the screen.
 
int PositionStatusbar (Window *w)
 (Re)position statusbar window at the screen.
 
int PositionNewsMessage (Window *w)
 (Re)position news message window at the screen.
 
int PositionNetworkChatWindow (Window *w)
 (Re)position network chat window at the screen.
 
void ChangeVehicleViewports (VehicleID from_index, VehicleID to_index)
 Switches viewports following vehicles, which get autoreplaced.
 
void RelocateAllWindows (int neww, int newh)
 Relocate all windows to fit the new size of the game application screen.
 

Variables

static Point _drag_delta
 delta between mouse cursor and upper left corner of dragged window
 
static Window_mouseover_last_w = nullptr
 Window of the last OnMouseOver event.
 
static Window_last_scroll_window = nullptr
 Window of the last scroll event.
 
WindowList _z_windows
 List of windows opened at the screen sorted from the front to back.
 
bool _window_highlight_colour = false
 If false, highlight is white, otherwise the by the widget defined colour.
 
Window_focused_window
 
Point _cursorpos_drag_start
 
int _scrollbar_start_pos
 
int _scrollbar_size
 
uint8_t _scroller_click_timeout = 0
 
bool _scrolling_viewport
 A viewport is being scrolled with the mouse.
 
bool _mouse_hovering
 The mouse is hovering over the same point.
 
SpecialMouseMode _special_mouse_mode
 Mode of the mouse.
 
std::vector< WindowDesc * > * _window_descs = nullptr
 List of all WindowDescs.
 
std::string _windows_file
 Config file to store WindowDesc.
 
static bool _dragging_window
 A window is being dragged or resized.
 
static int _input_events_this_tick = 0
 Local counter that is incremented each time an mouse input event is detected.
 
static constexpr int MAX_OFFSET_DOUBLE_CLICK = 5
 How much the mouse is allowed to move to call it a double click.
 
static constexpr int MAX_OFFSET_HOVER = 5
 Maximum mouse movement before stopping a hover event.
 
static const int8_t scrollamt [16][2]
 Describes all the different arrow key combinations the game allows when it is in scrolling mode.
 
static IntervalTimer< TimerWindowwindow_interval (std::chrono::milliseconds(30), [](auto) { extern int _caret_timer;_caret_timer+=3;CursorTick();HandleKeyScrolling();HandleAutoscroll();DecreaseWindowCounters();})
 Update various of window-related information on a regular interval.
 
static IntervalTimer< TimerWindowhighlight_interval (std::chrono::milliseconds(450), [](auto) { _window_highlight_colour=!_window_highlight_colour;})
 Blink the window highlight colour constantly.
 
static IntervalTimer< TimerWindowwhite_border_interval (std::chrono::milliseconds(30), [](auto) { if(_network_dedicated) return;for(Window *w :Window::Iterate()) { if((w->flags &WF_WHITE_BORDER) &&--w->white_border_timer==0) { CLRBITS(w->flags, WF_WHITE_BORDER);w->SetDirty();} } })
 Blink all windows marked with a white border.
 

Detailed Description

Windowing system, widgets and events.

Definition in file window.cpp.

Enumeration Type Documentation

◆ MouseClick

enum MouseClick

Definition at line 2711 of file window.cpp.

◆ PreventHideDirection

Direction for moving the window.

Enumerator
PHD_UP 

Above v is a safe position.

PHD_DOWN 

Below v is a safe position.

Definition at line 1930 of file window.cpp.

◆ ViewportAutoscrolling

Values for _settings_client.gui.auto_scrolling.

Enumerator
VA_DISABLED 

Do not autoscroll when mouse is at edge of viewport.

VA_MAIN_VIEWPORT_FULLSCREEN 

Scroll main viewport at edge when using fullscreen.

VA_MAIN_VIEWPORT 

Scroll main viewport at edge.

VA_EVERY_VIEWPORT 

Scroll all viewports at their edges.

Definition at line 45 of file window.cpp.

Function Documentation

◆ BringWindowToFront()

static void BringWindowToFront ( Window w,
bool  dirty 
)
static

On clicking on a window, make it the frontmost window of all windows with an equal or lower z-priority.

The window is marked dirty for a repaint

Parameters
wwindow that is put into the relative foreground
dirtywhether to mark the window dirty

Definition at line 1344 of file window.cpp.

References _z_windows, GetWindowZPriority(), Window::SetDirty(), and Window::window_class.

Referenced by BringWindowToFrontById(), Window::InitializeData(), MaybeBringWindowToFront(), StartWindowDrag(), and StartWindowSizing().

◆ BringWindowToFrontById()

Window * BringWindowToFrontById ( WindowClass  cls,
WindowNumber  number 
)

Find a window and make it the relative top-window on the screen.

The window gets unshaded if it was shaded, and a white border is drawn at its edges for a brief period of time to visualize its "activation".

Parameters
clsWindowClass of the window to activate
numberWindowNumber of the window to activate
Returns
a pointer to the window thus activated

Definition at line 1223 of file window.cpp.

References BringWindowToFront(), FindWindowById(), Window::IsShaded(), Window::SetDirty(), Window::SetShaded(), and Window::SetWhiteBorder().

Referenced by AllocateWindowDescFront(), DoSelectCompanyManagerFace(), NetworkContentListWindow::OnClick(), ShowBuyCompanyDialog(), ShowCompanyFinances(), ShowDepotWindow(), ShowGenerateWorldProgress(), ShowIndustryCargoesWindow(), and ShowScriptDebugWindow().

◆ CallWindowGameTickEvent()

void CallWindowGameTickEvent ( )

Dispatch OnGameTick event over all windows.

Definition at line 3248 of file window.cpp.

References Window::OnGameTick().

Referenced by StateGameLoop().

◆ CallWindowRealtimeTickEvent()

void CallWindowRealtimeTickEvent ( uint  delta_ms)

Dispatch OnRealtimeTick event over all windows.

Definition at line 3018 of file window.cpp.

References Window::OnRealtimeTick().

Referenced by UpdateWindows().

◆ ChangeVehicleViewports()

void ChangeVehicleViewports ( VehicleID  from_index,
VehicleID  to_index 
)

Switches viewports following vehicles, which get autoreplaced.

Parameters
from_indexthe old vehicle ID
to_indexthe new vehicle ID

Definition at line 3435 of file window.cpp.

References ViewportData::follow_vehicle, Window::SetDirty(), and Window::viewport.

Referenced by CopyHeadSpecificThings().

◆ ChangeWindowOwner()

void ChangeWindowOwner ( Owner  old_owner,
Owner  new_owner 
)

Change the owner of all the windows one company can take over from another company in the case of a company merger.

Do not change ownership of windows that need to be deleted once takeover is complete

Parameters
old_owneroriginal owner of the window
new_ownerthe new owner of the window

Definition at line 1188 of file window.cpp.

References WC_AIRCRAFT_LIST, WC_BUY_COMPANY, WC_COMPANY, WC_COMPANY_COLOUR, WC_COMPANY_INFRASTRUCTURE, WC_FINANCES, WC_ROADVEH_LIST, WC_SHIPS_LIST, WC_STATION_LIST, WC_TRAINS_LIST, and WC_VEHICLE_ORDERS.

Referenced by ChangeOwnershipOfCompanyItems().

◆ CheckSoftLimit()

static void CheckSoftLimit ( )
static

Check the soft limit of deletable (non vital, non sticky) windows.

Definition at line 2968 of file window.cpp.

References _settings_client, Window::Close(), Window::flags, ClientSettings::gui, WC_MAIN_WINDOW, WF_STICKY, Window::window_class, and GUISettings::window_soft_limit.

Referenced by InputLoop().

◆ CloseAllNonVitalWindows()

void CloseAllNonVitalWindows ( )

It is possible that a stickied window gets to a position where the 'close' button is outside the gaming area.

You cannot close it then; except with this function. It closes all windows calling the standard function, then, does a little hacked loop of closing all stickied windows. Note that standard windows (status bar, etc.) are not stickied, so these aren't affected

Definition at line 3280 of file window.cpp.

References Window::Close(), WindowDesc::flags, WDF_NO_CLOSE, and Window::window_desc.

Referenced by GenerateWorld(), and MainWindow::OnHotkey().

◆ CloseCompanyWindows()

void CloseCompanyWindows ( CompanyID  id)

Close all windows of a company.

We identify windows of a company by looking at the caption colour. If it is equal to the company ID then we say the window belongs to the company and should be closed

Parameters
idcompany identifier

Definition at line 1168 of file window.cpp.

References CloseWindowById(), and WC_BUY_COMPANY.

Referenced by Company::~Company().

◆ CloseConstructionWindows()

void CloseConstructionWindows ( )

Close all windows that are used for construction of vehicle etc.

Once done with that invalidate the others to ensure they get refreshed too.

Definition at line 3305 of file window.cpp.

References Window::Close(), WindowDesc::flags, Window::SetDirty(), WDF_CONSTRUCTION, and Window::window_desc.

Referenced by SetLocalCompany().

◆ CloseNonVitalWindows()

void CloseNonVitalWindows ( )

Try to close a non-vital window.

Non-vital windows are windows other than the game selection, main toolbar, status bar, toolbar menu, and tooltip windows. Stickied windows are also considered vital.

Definition at line 3261 of file window.cpp.

References Window::Close(), WindowDesc::flags, Window::flags, WDF_NO_CLOSE, WF_STICKY, and Window::window_desc.

Referenced by MainWindow::OnHotkey().

◆ CloseWindowByClass()

void CloseWindowByClass ( WindowClass  cls,
int  data 
)

◆ CloseWindowById()

void CloseWindowById ( WindowClass  cls,
WindowNumber  number,
bool  force,
int  data 
)

Close a window by its class and window number (if it is open).

Parameters
clsWindow class
numberNumber of the window within the window class
forceforce closing; if false don't close when stickied

Definition at line 1140 of file window.cpp.

References Window::Close(), FindWindowById(), Window::flags, and WF_STICKY.

Referenced by ClientNetworkContentSocketHandler::BeforeDownload(), ClientNetworkGameSocketHandler::ClientError(), BuildAirToolbarWindow::Close(), BuildAirportWindow::Close(), DepotWindow::Close(), BuildDocksToolbarWindow::Close(), BuildDocksStationWindow::Close(), BuildRailToolbarWindow::Close(), BuildRailStationWindow::Close(), BuildRoadToolbarWindow::Close(), BuildRoadStationWindow::Close(), GameOptionsWindow::Close(), StationViewWindow::Close(), VehicleViewWindow::Close(), WaypointWindow::Close(), CloseCompanyWindows(), CmdCompanyCtrl(), CmdDeleteGroup(), CmdGoalQuestionAnswer(), CmdMoveRailVehicle(), DeleteAllMessages(), DeleteNewGRFInspectWindow(), GuiShowTooltips(), HideVitalWindows(), IConsoleSwitch(), MoveToNextNewsItem(), NetworkDisconnect(), NewVehicleAvailable(), NetworkContentDownloadStatusWindow::OnClick(), NetworkGameWindow::OnClick(), PickerWindow::OnClick(), BuildRailStationWindow::OnClick(), BuildRoadToolbarWindow::OnClick(), BuildRoadStationWindow::OnClick(), SelectStationWindow< T >::OnClick(), BuildAirToolbarWindow::OnInvalidateData(), BuildDocksToolbarWindow::OnInvalidateData(), BuildRailToolbarWindow::OnInvalidateData(), BuildRoadToolbarWindow::OnInvalidateData(), BuildAirToolbarWindow::OnPlaceObjectAbort(), BuildDocksToolbarWindow::OnPlaceObjectAbort(), BuildRailToolbarWindow::OnPlaceObjectAbort(), BuildRoadToolbarWindow::OnPlaceObjectAbort(), Vehicle::PreDestructor(), ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT(), RemoveAirport(), Vehicle::RemoveFromShared(), ShowBaseSetTextfileWindow(), ShowBuildRoadScenToolbar(), ShowCheatWindow(), ShowCustCurrency(), ShowLandInfo(), ShowMessageHistory(), ShowNetworkContentListWindow(), ShowNewsMessage(), ShowOnScreenKeyboard(), ShowReplaceGroupVehicleWindow(), ShowSaveLoadDialog(), ShowScriptTextfileWindow(), ShowTerraformToolbar(), ShowTimetableWindow(), ShowVehicleDetailsWindow(), ShowVehicleRefitWindow(), ToggleRailButton_Remove(), Depot::~Depot(), Station::~Station(), and Town::~Town().

◆ DecreaseWindowCounters()

static void DecreaseWindowCounters ( )
static

Definition at line 1825 of file window.cpp.

◆ DeleteAllMessages()

void DeleteAllMessages ( )

Delete all messages and close their corresponding window (if any).

Definition at line 3293 of file window.cpp.

References CloseWindowById(), InitNewsItemStructs(), InvalidateWindowData(), SBI_NEWS_DELETED, WC_MESSAGE_HISTORY, WC_NEWS_WINDOW, and WC_STATUS_BAR.

Referenced by MenuClickNewspaper(), and MainWindow::OnHotkey().

◆ DescSorter()

static bool DescSorter ( WindowDesc *const &  a,
WindowDesc *const &  b 
)
static

Sort WindowDesc by ini_key.

Definition at line 168 of file window.cpp.

References WindowDesc::ini_key.

Referenced by WindowDesc::SaveToConfig().

◆ DispatchHoverEvent()

static void DispatchHoverEvent ( Window w,
int  x,
int  y 
)
static

Dispatch hover of the mouse over a window.

Parameters
wWindow to dispatch event in.
xX coordinate of the click.
yY coordinate of the click.

Definition at line 770 of file window.cpp.

References GuiShowTooltips(), NWidgetCore::index, Window::nested_root, Window::OnHover(), Window::OnTooltip(), and NWidgetCore::tool_tip.

◆ DispatchLeftClickEvent()

static void DispatchLeftClickEvent ( Window w,
int  x,
int  y,
int  click_count 
)
static

◆ DispatchMouseWheelEvent()

static void DispatchMouseWheelEvent ( Window w,
NWidgetCore nwid,
int  wheel 
)
static

Dispatch the mousewheel-action to the window.

The window will scroll any compatible scrollbars if the mouse is pointed over the bar or its contents

Parameters
wWindow
nwidthe widget where the scrollwheel was used
wheelscroll up or down

Definition at line 798 of file window.cpp.

References Scrollbar::GetCapacity(), Scrollbar::GetCount(), Window::GetScrollbar(), NWID_VSCROLLBAR, NWidgetCore::scrollbar_index, Window::SetDirty(), Window::SetShaded(), NWidgetBase::type, Scrollbar::UpdatePosition(), WWT_CAPTION, and WWT_SHADEBOX.

◆ DispatchRightClickEvent()

static void DispatchRightClickEvent ( Window w,
int  x,
int  y 
)
static

Dispatch right mouse-button click in window.

Parameters
wWindow to dispatch event in
xX coordinate of the click
yY coordinate of the click

Definition at line 741 of file window.cpp.

References _settings_client, Window::Close(), WindowDesc::flags, Window::flags, ClientSettings::gui, GuiShowTooltips(), GUISettings::hover_delay_ms, NWidgetCore::index, Window::nested_root, Window::OnRightClick(), Window::OnTooltip(), GUISettings::right_click_wnd_close, NWidgetCore::tool_tip, WDF_NO_CLOSE, WF_STICKY, and Window::window_desc.

◆ DrawOverlappedWindow()

static void DrawOverlappedWindow ( Window w,
int  left,
int  top,
int  right,
int  bottom 
)
static

Generate repaint events for the visible part of window w within the rectangle.

The function goes recursively upwards in the window stack, and splits the rectangle into multiple pieces at the window edges, so obscured parts are not redrawn.

Parameters
wWindow that needs to be repainted
leftLeft edge of the rectangle that should be repainted
topTop edge of the rectangle that should be repainted
rightRight edge of the rectangle that should be repainted
bottomBottom edge of the rectangle that should be repainted

Definition at line 857 of file window.cpp.

References DrawOverlappedWindow(), BlitterFactory::GetCurrentBlitter(), Window::height, Window::left, MayBeShown(), Blitter::MoveTo(), Window::OnPaint(), Window::top, Window::width, and ZOOM_LVL_MIN.

Referenced by DrawOverlappedWindow(), and DrawOverlappedWindowForAll().

◆ DrawOverlappedWindowForAll()

void DrawOverlappedWindowForAll ( int  left,
int  top,
int  right,
int  bottom 
)

From a rectangle that needs redrawing, find the windows that intersect with the rectangle.

These windows should be re-painted.

Parameters
leftLeft edge of the rectangle that should be repainted
topTop edge of the rectangle that should be repainted
rightRight edge of the rectangle that should be repainted
bottomBottom edge of the rectangle that should be repainted

Definition at line 919 of file window.cpp.

References DrawOverlappedWindow(), and MayBeShown().

Referenced by RedrawScreenRect().

◆ EditBoxInGlobalFocus()

bool EditBoxInGlobalFocus ( )

Check if an edit box is in global focus.

That is if focused window has a edit box as focused widget, or if a console is focused.

Returns
returns true if an edit box is in global focus or if the focused window is a console, else false

Definition at line 448 of file window.cpp.

References Window::nested_focus, NWidgetBase::type, WC_CONSOLE, Window::window_class, and WWT_EDITBOX.

Referenced by HandleKeypress(), HandleTextInput(), Window::InitializeData(), VideoDriver_Win32Base::PollEvent(), SetCandidatePos(), and SetCompositionPos().

◆ EnsureVisibleCaption()

static void EnsureVisibleCaption ( Window w,
int  nx,
int  ny 
)
static

Make sure at least a part of the caption bar is still visible by moving the window if necessary.

Parameters
wThe window to check.
nxThe proposed new x-location of the window.
nyThe proposed new y-location of the window.

Definition at line 1985 of file window.cpp.

References Clamp(), FindWindowById(), Rect::Height(), Viewport::left, Window::left, Window::nested_root, PHD_DOWN, PHD_UP, PreventHiding(), Viewport::top, Window::top, Window::viewport, WC_MAIN_TOOLBAR, WC_STATUS_BAR, and WWT_CAPTION.

Referenced by HandleWindowDragging(), RelocateAllWindows(), and ResizeWindow().

◆ FindWindowByClass()

Window * FindWindowByClass ( WindowClass  cls)

Find any window by its class.

Useful when searching for a window that uses the window number as a WindowClass, like WC_SEND_NETWORK_MSG.

Parameters
clsWindow class
Returns
Pointer to the found window, or nullptr if not available

Definition at line 1113 of file window.cpp.

Referenced by GetAutoPlacePosition(), NetworkDrawChatMessage(), IndustryCargoesWindow::OnClick(), ShowScriptDebugWindow(), and UpdateNewGRFScanStatus().

◆ FindWindowById()

Window * FindWindowById ( WindowClass  cls,
WindowNumber  number 
)

Find a window by its class and window number.

Parameters
clsWindow class
numberNumber of the window within the window class
Returns
Pointer to the found window, or nullptr if not available

Definition at line 1098 of file window.cpp.

Referenced by BringWindowToFrontById(), BuildRailStationWindow::BuildRailStationGlobalHotkeys(), ChangeVehicleWindow(), CloseWindowById(), DeleteDepotHighlightOfVehicle(), DeleteRenameSignWindow(), EnsureVisibleCaption(), FindVehicleGroupWindow(), Window::FindWindowPlacementAndResize(), GenericPlaceSignals(), TileHighlightData::GetCallbackWnd(), GetMainViewBottom(), GetMainViewTop(), GetMainWindow(), GetToolbarAlignedWindowPosition(), HandleAutoSignalPlacement(), HandleKeypress(), HandleToolbarHotkey(), HideActiveErrorMessage(), HideActiveNewsMessage(), InitializeRoadGUI(), IsNewsTickerShown(), IsOSKOpenedFor(), LoadFromConfig(), LocalGetWindowPlacement(), MoveToNextNewsItem(), MoveToNextTickerItem(), NetworkContentDownloadStatusWindow::NetworkContentDownloadStatusWindow(), SavePresetWindow::OnClick(), BuildSignalWindow::OnClick(), NetworkChatWindow::OnInitialPosition(), NetworkContentListWindow::OnInvalidateData(), BuildRailToolbarWindow::OnPlaceDrag(), PositionWindow(), ReadyForNextNewsItem(), ReInitAllWindows(), ReinitGuiAfterToggleElrail(), RelocateAllWindows(), ResetSignalVariant(), ScrollMainWindowTo(), SetDefaultRailGui(), SetScreenshotWindowVisibility(), ShowErrorMessage(), ShowExtraViewportWindow(), ShowLastNewsMessage(), ShowScriptDebugWindow(), StationJoinerNeeded(), UnshowCriticalError(), and UpdateOSKOriginalText().

◆ FindWindowFromPt()

Window * FindWindowFromPt ( int  x,
int  y 
)

Do a search for a window at specific coordinates.

For this we start at the topmost window, obviously and work our way down to the bottom

Parameters
xposition x to query
yposition y to query
Returns
a pointer to the found window if any, nullptr otherwise

Definition at line 1768 of file window.cpp.

References Window::height, IsInsideBS(), Window::left, MayBeShown(), Window::top, and Window::width.

Referenced by HandleAutoscroll(), HandleMouseOver(), HandleViewportScroll(), and TooltipsWindow::OnMouseLoop().

◆ FocusedWindowIsConsole()

bool FocusedWindowIsConsole ( )

Check if a console is focused.

Returns
returns true if the focused window is a console, else false

Definition at line 462 of file window.cpp.

References WC_CONSOLE, and Window::window_class.

Referenced by VideoDriver_SDL_Base::PollEvent().

◆ GetAutoPlacePosition()

static Point GetAutoPlacePosition ( int  width,
int  height 
)
static

Find a good place for opening a new window of a given width and height.

Parameters
widthWidth of the new window
heightHeight of the new window
Returns
Top-left coordinate of the new window

Definition at line 1559 of file window.cpp.

References _current_text_dir, NWidgetLeaf::closebox_dimension, FindWindowByClass(), FS_NORMAL, GetCharacterHeight(), Window::height, IsGoodAutoPlace1(), IsGoodAutoPlace2(), Window::left, WidgetDimensions::scaled, TD_RTL, Window::top, WC_MAIN_TOOLBAR, WC_MAIN_WINDOW, Window::width, and Window::window_class.

Referenced by LocalGetWindowPlacement().

◆ GetMainViewBottom()

int GetMainViewBottom ( )

Return the bottom of the main view available for general use.

Returns
The vertical coordinate of the first unusable row, so 'top + height <= bottom' gives the correct result.
Note
At and below the bottom y coordinate is often the status bar.

Definition at line 2073 of file window.cpp.

References FindWindowById(), Window::top, and WC_STATUS_BAR.

Referenced by BuildBridgeWindow::OnInitialPosition(), TooltipsWindow::OnInitialPosition(), and DropdownWindow::UpdateSizeAndPosition().

◆ GetMainViewTop()

int GetMainViewTop ( )

Return the top of the main view available for general use.

Returns
Uppermost vertical coordinate available.
Note
Above the upper y coordinate is often the main toolbar.

Definition at line 2062 of file window.cpp.

References FindWindowById(), Window::height, Window::top, and WC_MAIN_TOOLBAR.

Referenced by BuildBridgeWindow::OnInitialPosition(), ErrmsgWindow::OnInitialPosition(), TooltipsWindow::OnInitialPosition(), and DropdownWindow::UpdateSizeAndPosition().

◆ GetMainWindow()

◆ GetToolbarAlignedWindowPosition()

Point GetToolbarAlignedWindowPosition ( int  window_width)

Computer the position of the top-left corner of a window to be opened right under the toolbar.

Parameters
window_widththe width of the window to get the position for
Returns
Coordinate of the top-left corner of the new window.

Definition at line 1627 of file window.cpp.

References _current_text_dir, FindWindowById(), Window::height, Window::left, TD_RTL, Window::top, WC_MAIN_TOOLBAR, and Window::width.

Referenced by LocalGetWindowPlacement(), TerraformToolbarWindow::OnInitialPosition(), and TransparenciesWindow::OnInitialPosition().

◆ GetWindowZPriority()

static uint GetWindowZPriority ( WindowClass  wc)
static

Get the z-priority for a given window.

This is used in comparison with other z-priority values; a window with a given z-priority will appear above other windows with a lower value, and below those with a higher one (the ordering within z-priorities is arbitrary).

Parameters
wcThe window class of window to get the z-priority for
Precondition
wc != WC_INVALID
Returns
The window's z-priority

Definition at line 1260 of file window.cpp.

References WC_CONFIRM_POPUP_QUERY, WC_CONSOLE, WC_CUSTOM_CURRENCY, WC_DROPDOWN_MENU, WC_ENDSCREEN, WC_ERRMSG, WC_GAME_OPTIONS, WC_GENERATE_LANDSCAPE, WC_GRF_PARAMETERS, WC_HIGHSCORE, WC_INVALID, WC_MAIN_TOOLBAR, WC_MAIN_WINDOW, WC_MODAL_PROGRESS, WC_NETWORK_ASK_RELAY, WC_NETWORK_STATUS_WINDOW, WC_NETWORK_WINDOW, WC_NEWS_WINDOW, WC_OSK, WC_QUERY_STRING, WC_SAVE_PRESET, WC_SAVELOAD, WC_SCRIPT_LIST, WC_SCRIPT_SETTINGS, WC_SEND_NETWORK_MSG, WC_STATUS_BAR, WC_TEXTFILE, and WC_TOOLTIPS.

Referenced by BringWindowToFront().

◆ HandleActiveWidget()

static EventState HandleActiveWidget ( )
static

Handle active widget (mouse draggin on widget) with the mouse.

Returns
State of handling the event.

Definition at line 2323 of file window.cpp.

References _left_button_down, CursorVars::delta, ES_HANDLED, ES_NOT_HANDLED, Window::GetWidget(), HandleScrollbarScrolling(), Window::left, Window::mouse_capture_widget, NWID_HSCROLLBAR, NWID_VSCROLLBAR, Window::OnClick(), CursorVars::pos, Window::SetWidgetDirty(), and Window::top.

◆ HandleAutoscroll()

◆ HandleCtrlChanged()

void HandleCtrlChanged ( )

State of CONTROL key has changed.

Definition at line 2625 of file window.cpp.

References ES_HANDLED, and Window::OnCTRLStateChange().

Referenced by VideoDriver_SDL_Base::InputLoop(), VideoDriver_SDL::InputLoop(), and VideoDriver_Win32Base::InputLoop().

◆ HandleKeypress()

void HandleKeypress ( uint  keycode,
char32_t  key 
)

◆ HandleKeyScrolling()

static void HandleKeyScrolling ( )
static

Definition at line 2763 of file window.cpp.

◆ HandleMouseDragDrop()

static EventState HandleMouseDragDrop ( )
static

◆ HandleMouseEvents()

◆ HandleMouseOver()

static void HandleMouseOver ( )
static

Report position of the mouse to the underlying window.

Definition at line 1907 of file window.cpp.

References _mouseover_last_w, FindWindowFromPt(), NWidgetCore::index, Window::left, Window::nested_root, Window::OnMouseOver(), CursorVars::pos, and Window::top.

◆ HandlePlacePresize()

static void HandlePlacePresize ( )
static

Definition at line 1863 of file window.cpp.

◆ HandleScrollbarScrolling()

static void HandleScrollbarScrolling ( Window w)
static

◆ HandleTextInput()

void HandleTextInput ( const char *  str,
bool  marked,
const char *  caret,
const char *  insert_location,
const char *  replacement_end 
)

Handle text input.

Parameters
strText string to input.
markedIs the input a marked composition string from an IME?
caretMove the caret to this point in the insertion string.

Definition at line 2655 of file window.cpp.

References EditBoxInGlobalFocus(), NWidgetCore::index, Window::InsertTextString(), Window::nested_focus, WC_CONSOLE, and Window::window_class.

Referenced by CancelIMEComposition(), HandleIMEComposition(), and VideoDriver_SDL_Base::PollEvent().

◆ HandleToolbarHotkey()

void HandleToolbarHotkey ( int  hotkey)

Handle Toolbar hotkey events - can come from a source like the MacBook Touch Bar.

Parameters
hotkeyHotkey code

Definition at line 2552 of file window.cpp.

References ES_HANDLED, FindWindowById(), HasModalProgress(), WindowDesc::hotkeys, IsLocalCompany(), Window::OnHotkey(), WC_MAIN_TOOLBAR, and Window::window_desc.

◆ HandleViewportScroll()

◆ HandleWindowDragging()

◆ HideVitalWindows()

void HideVitalWindows ( )

Close all always on-top windows to get an empty screen.

Definition at line 3318 of file window.cpp.

References CloseWindowById(), WC_MAIN_TOOLBAR, and WC_STATUS_BAR.

Referenced by GenerateWorld(), and ShowEndGameChart().

◆ InitWindowSystem()

◆ InputLoop()

void InputLoop ( )

Regular call from the global game loop.

Definition at line 2993 of file window.cpp.

References _input_events_this_tick, CheckSoftLimit(), Window::DeleteClosedWindows(), HandleMouseEvents(), HasModalProgress(), and IsLocalCompany().

◆ InvalidateWindowClassesData()

void InvalidateWindowClassesData ( WindowClass  cls,
int  data,
bool  gui_scope 
)

Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by default the invalidation is not considered to be called from GUI scope.

See InvalidateWindowData() for details on GUI-scope vs. command-scope.

Parameters
clsWindow class
dataThe data to invalidate with
gui_scopeWhether the call is done from GUI scope

Definition at line 3236 of file window.cpp.

References Window::InvalidateData(), and Window::window_class.

Referenced by AddRemoveEngineFromAutoreplaceAndBuildWindows(), SmallMapWindow::BreakIndustryChainLink(), CalendarEnginesMonthlyLoop(), CcBuildWagon(), ChangeMinutesPerYear(), ScriptListWindow::ChangeScript(), ChangeTimekeepingUnits(), ClickChangeDateCheat(), ClickChangeMaxHlCheat(), ClickSetProdCheat(), CmdAlterGroup(), CmdBuildVehicle(), CmdCloneOrder(), CmdCompanyCtrl(), CmdCreateGoal(), CmdCreateStoryPage(), CmdCreateStoryPageElement(), CmdMoveOrder(), CmdMoveRailVehicle(), CmdRefitVehicle(), CmdRemoveGoal(), CmdRemoveStoryPage(), CmdRemoveStoryPageElement(), CmdRenamePresident(), CmdRenameVehicle(), CmdSellRailWagon(), CmdSetGoalCompleted(), CmdSetGoalProgress(), CmdSetGoalText(), CmdSetStoryPageDate(), CmdSetStoryPageTitle(), CmdUpdateStoryPageElement(), Vehicle::Crash(), DecloneOrder(), DeleteOrder(), OrderBackup::DoRestore(), DoScanNewGRFFiles(), GenerateDesertArea(), Vehicle::HandlePathfindingResult(), InsertOrder(), OrderList::InsertOrderAt(), InvalidateNewGRFChangeWindows(), MenuClickSettings(), NetworkAfterNewGRFScan(), IndustryCargoesWindow::NotifySmallmap(), ReplaceVehicleWindow::OnClick(), BuildVehicleWindow::OnClick(), Vehicle::PreDestructor(), ReadLanguagePack(), ReloadNewGRFData(), AI::Rescan(), RoadVehAccelerationModelChanged(), SetLocalCompany(), SetNewLandscapeType(), Game::StartNew(), AI::StartNew(), StartupEngines(), AI::Stop(), VideoDriver_SDL_Base::ToggleFullscreen(), VideoDriver_SDL::ToggleFullscreen(), VideoDriver_Win32Base::ToggleFullscreen(), Order::~Order(), and Station::~Station().

◆ 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-computing)

Note that by default the invalidation is not considered to be called from GUI scope. That means only a part of invalidation is executed immediately. The rest is scheduled for the next redraw. The asynchronous execution is important to prevent GUI code being executed from command scope. When not in GUI-scope:

  • OnInvalidateData() may not do test-runs on commands, as they might affect the execution of the command which triggered the invalidation. (town rating and such)
  • OnInvalidateData() may not rely on _current_company == _local_company. This implies that no NewGRF callbacks may be run.

However, when invalidations are scheduled, then multiple calls may be scheduled before execution starts. Earlier scheduled invalidations may be called with invalidation-data, which is already invalid at the point of execution. That means some stuff requires to be executed immediately in command scope, while not everything may be executed in command scope. While GUI-scope calls have no restrictions on what they may do, they cannot assume the game to still be in the state when the invalidation was scheduled; passed IDs may have got invalid in the mean time.

Finally, note that invalidations triggered from commands or the game loop result in OnInvalidateData() being called twice. Once in command-scope, once in GUI-scope. So make sure to not process differential-changes twice.

Parameters
clsWindow class
numberWindow number within the class
dataThe data to invalidate with
gui_scopeWhether the call is done from GUI scope

Definition at line 3219 of file window.cpp.

References Window::InvalidateData(), Window::window_class, and Window::window_number.

Referenced by ServerNetworkGameSocketHandler::AcceptConnection(), AcceptEnginePreview(), AddNewsItem(), AddRemoveEngineFromAutoreplaceAndBuildWindows(), Station::AfterStationTileSetChange(), AircraftLeaveHangar(), Subsidy::AwardTo(), MusicSystem::ChangeMusicSet(), MusicSystem::ChangePlaylist(), ChangePopulation(), ScriptListWindow::ChangeScript(), ChangeSoundSet(), CheckTrainStayInDepot(), NetworkChatWindow::Close(), NetworkContentDownloadStatusWindow::Close(), CmdAddSharedVehicleGroup(), CmdAddVehicleGroup(), CmdAlterGroup(), CmdBuildAirport(), CmdBuildBuoy(), CmdBuildRailWagon(), CmdBuildVehicle(), CmdCompanyAllowListCtrl(), CmdCompanyCtrl(), CmdConvertRail(), CmdConvertRoad(), CmdCreateGoal(), CmdCreateGroup(), CmdCreateLeagueTableElement(), CmdCreateStoryPage(), CmdDeleteGroup(), CmdIndustrySetText(), CmdMoveRailVehicle(), CmdPlaceSign(), CmdRefitVehicle(), CmdRemoveAllVehiclesGroup(), CmdRemoveGoal(), CmdRemoveLeagueTableElement(), CmdRemoveStoryPage(), CmdRenameSign(), CmdRenameStation(), CmdRenameTown(), CmdSellRailWagon(), CmdSetCompanyColour(), CmdSetGoalCompleted(), CmdSetGoalProgress(), CmdSetGoalText(), CmdSetGroupFlag(), CmdStartStopVehicle(), CmdTownCargoGoal(), CmdTownGrowthRate(), CmdTownRating(), CmdTownSetText(), CmdUpdateLeagueTableElementData(), CmdUpdateLeagueTableElementScore(), Company::Company(), Train::ConsistChanged(), CreateSubsidy(), DeleteAllMessages(), DeleteNewGRFInspectWindow(), DeleteNews(), DeleteNewsItem(), DeleteStationIfEmpty(), DeleteSubsidyWith(), DoCreateNewIndustry(), DoCreateTown(), DoScanNewGRFFiles(), DoStartupNewCompany(), StatusBarWindow::DrawWidget(), EnableEngineForCompany(), HandleMouseEvents(), InvalidateAutoreplaceWindow(), InvalidateNewGRFInspectWindow(), InvalidateVehicleOrder(), MoveToNextTickerItem(), NetworkChatWindow::NetworkChatWindow(), NetworkServerDoMove(), NewVehicleAvailable(), MusicSystem::Next(), NormaliseTrainHead(), ReplaceVehicleWindow::OnClick(), BuildVehicleWindow::OnClick(), GraphLegendWindow::OnClick(), MainWindow::OnInvalidateData(), MusicSystem::Play(), MusicSystem::PlaylistAdd(), MusicSystem::PlaylistRemove(), BaseStation::PostDestructor(), Company::PostDestructor(), Industry::PostDestructor(), Town::PostDestructor(), Vehicle::PreDestructor(), MusicSystem::Prev(), ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(), ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(), ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(), ClientNetworkGameSocketHandler::Receive_SERVER_ERROR_QUIT(), ClientNetworkGameSocketHandler::Receive_SERVER_JOIN(), ClientNetworkGameSocketHandler::Receive_SERVER_QUIT(), RecomputePrices(), ReloadNewGRFData(), RemoveAirport(), RemoveBuoy(), Vehicle::RemoveFromShared(), AI::Rescan(), ReverseTrainDirection(), SaveFileDone(), SaveFileStart(), SetLocalCompany(), ShowTicker(), MusicSystem::Shuffle(), MusicSystem::Stop(), MusicSystem::Unshuffle(), UpdateClientConfigValues(), UpdateNetworkGameWindow(), Waypoint::UpdateVirtCoord(), VehicleEnter_Track(), VehicleEnterDepot(), LinkGraphJob::~LinkGraphJob(), NetworkClientInfo::~NetworkClientInfo(), ServerNetworkGameSocketHandler::~ServerNetworkGameSocketHandler(), and Station::~Station().

◆ IsGoodAutoPlace1()

static bool IsGoodAutoPlace1 ( int  left,
int  top,
int  width,
int  height,
int  toolbar_y,
Point pos 
)
static

Decide whether a given rectangle is a good place to open a completely visible new window.

The new window should be within screen borders, and not overlap with another already existing window (except for the main window in the background).

Parameters
leftLeft edge of the rectangle
topTop edge of the rectangle
widthWidth of the rectangle
heightHeight of the rectangle
toolbar_yHeight of main toolbar
posIf rectangle is good, use this parameter to return the top-left corner of the new window
Returns
Boolean indication that the rectangle is a good place for the new window

Definition at line 1484 of file window.cpp.

References Window::height, Window::left, Window::top, WC_MAIN_WINDOW, Window::width, and Window::window_class.

Referenced by GetAutoPlacePosition().

◆ IsGoodAutoPlace2()

static bool IsGoodAutoPlace2 ( int  left,
int  top,
int  width,
int  height,
int  toolbar_y,
Point pos 
)
static

Decide whether a given rectangle is a good place to open a mostly visible new window.

The new window should be mostly within screen borders, and not overlap with another already existing window (except for the main window in the background).

Parameters
leftLeft edge of the rectangle
topTop edge of the rectangle
widthWidth of the rectangle
heightHeight of the rectangle
toolbar_yHeight of main toolbar
posIf rectangle is good, use this parameter to return the top-left corner of the new window
Returns
Boolean indication that the rectangle is a good place for the new window

Definition at line 1520 of file window.cpp.

References _current_text_dir, Window::height, Window::left, TD_RTL, Window::top, WC_MAIN_WINDOW, Window::width, and Window::window_class.

Referenced by GetAutoPlacePosition().

◆ IsVitalWindow()

static bool IsVitalWindow ( const Window w)
inlinestatic

Definition at line 1238 of file window.cpp.

◆ LocalGetWindowPlacement()

static Point LocalGetWindowPlacement ( const WindowDesc desc,
int16_t  sm_width,
int16_t  sm_height,
int  window_number 
)
static

Compute the position of the top-left corner of a new window that is opened.

By default position a child window at an offset of 10/10 of its parent. With the exception of WC_BUILD_TOOLBAR (build railway/roads/ship docks/airports) and WC_SCEN_LAND_GEN (landscaping). Whose child window has an offset of 0/toolbar-height of its parent. So it's exactly under the parent toolbar and no buttons will be covered. However if it falls too extremely outside window positions, reposition it to an automatic place.

Parameters
*descThe pointer to the WindowDesc to be created.
sm_widthSmallest width of the window.
sm_heightSmallest height of the window.
window_numberThe window number of the new window.
Returns
Coordinate of the top-left corner of the new window.

Definition at line 1652 of file window.cpp.

References _current_text_dir, NWidgetLeaf::closebox_dimension, WindowDesc::default_pos, FindWindowById(), FS_NORMAL, GetAutoPlacePosition(), GetCharacterHeight(), WindowDesc::GetDefaultHeight(), WindowDesc::GetDefaultWidth(), GetToolbarAlignedWindowPosition(), Window::height, Window::left, WindowDesc::parent_cls, NWidgetLeaf::resizebox_dimension, WidgetDimensions::scaled, TD_RTL, Window::top, WC_BUILD_TOOLBAR, WC_NONE, WC_SCEN_LAND_GEN, WDP_ALIGN_TOOLBAR, WDP_AUTO, WDP_CENTER, WDP_MANUAL, and Window::width.

Referenced by Window::OnInitialPosition().

◆ MaybeBringWindowToFront()

static bool MaybeBringWindowToFront ( Window w)
static

Check if a window can be made relative top-most window, and if so do it.

If a window does not obscure any other windows, it will not be brought to the foreground. Also if the only obscuring windows are so-called system-windows, the window will not be moved. The function will return false when a child window of this window is a modal-popup; function returns a false and child window gets a white border

Parameters
wWindow to bring relatively on-top
Returns
false if the window has an active modal child, true otherwise

Definition at line 2420 of file window.cpp.

References BringWindowToFront(), WindowDesc::flags, Window::height, Window::IsShaded(), Window::left, Window::parent, Window::SetDirty(), Window::SetWhiteBorder(), Window::top, Window::unshaded_size, WC_DROPDOWN_MENU, WC_MAIN_WINDOW, WC_TOOLTIPS, WDF_MODAL, Window::width, Window::window_class, and Window::window_desc.

◆ MayBeShown()

static bool MayBeShown ( const Window w)
static

Returns whether a window may be shown or not.

Parameters
wThe window to consider.
Returns
True iff it may be shown, otherwise false.

< The background, i.e. the game.

< The actual progress window.

< The abort window.

Definition at line 829 of file window.cpp.

References HasModalProgress(), WC_CONFIRM_POPUP_QUERY, WC_MAIN_WINDOW, WC_MODAL_PROGRESS, and Window::window_class.

Referenced by DrawOverlappedWindow(), DrawOverlappedWindowForAll(), and FindWindowFromPt().

◆ MouseLoop()

static void MouseLoop ( MouseClick  click,
int  mousewheel 
)
static

Definition at line 2781 of file window.cpp.

◆ PositionMainToolbar()

int PositionMainToolbar ( Window w)

(Re)position main toolbar window at the screen.

Parameters
wWindow structure of the main toolbar window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned toolbar window.

Definition at line 3390 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::toolbar_pos, and WC_MAIN_TOOLBAR.

Referenced by RelocateAllWindows(), and v_PositionMainToolbar().

◆ PositionNetworkChatWindow()

int PositionNetworkChatWindow ( Window w)

(Re)position network chat window at the screen.

Parameters
wWindow structure of the network chat window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned network chat window.

Definition at line 3423 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::statusbar_pos, and WC_SEND_NETWORK_MSG.

Referenced by NetworkChatWindow::NetworkChatWindow(), RelocateAllWindows(), and v_PositionStatusbar().

◆ PositionNewsMessage()

int PositionNewsMessage ( Window w)

(Re)position news message window at the screen.

Parameters
wWindow structure of the news message window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned news message.

Definition at line 3412 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::statusbar_pos, and WC_NEWS_WINDOW.

Referenced by RelocateAllWindows(), and v_PositionStatusbar().

◆ PositionStatusbar()

int PositionStatusbar ( Window w)

(Re)position statusbar window at the screen.

Parameters
wWindow structure of the statusbar window, may also be nullptr.
Returns
X coordinate of left edge of the repositioned statusbar.

Definition at line 3401 of file window.cpp.

References _settings_client, Debug, ClientSettings::gui, PositionWindow(), GUISettings::statusbar_pos, and WC_STATUS_BAR.

Referenced by RelocateAllWindows(), and v_PositionStatusbar().

◆ PositionWindow()

static int PositionWindow ( Window w,
WindowClass  clss,
int  setting 
)
static

(Re)position a window at the screen.

Parameters
wWindow structure of the window, may also be nullptr.
clssThe class of the window to position.
settingThe actual setting used for the window's position.
Returns
X coordinate of left edge of the repositioned window.

Definition at line 3367 of file window.cpp.

References AddDirtyBlock(), FindWindowById(), Window::height, Viewport::left, Window::left, Window::top, Window::viewport, Window::width, and Window::window_class.

Referenced by PositionMainToolbar(), PositionNetworkChatWindow(), PositionNewsMessage(), and PositionStatusbar().

◆ PreventHiding()

static void PreventHiding ( int *  nx,
int *  ny,
const Rect rect,
const Window v,
int  px,
PreventHideDirection  dir 
)
static

Do not allow hiding of the rectangle with base coordinates nx and ny behind window v.

If needed, move the window base coordinates to keep it visible.

Parameters
nxBase horizontal coordinate of the rectangle.
nyBase vertical coordinate of the rectangle.
rectRectangle that must stay visible (horizontally, vertically, or both)
vWindow lying in front of the rectangle.
pxPrevious horizontal base coordinate.
dirIf no room horizontally, move the rectangle to the indicated position.

Definition at line 1945 of file window.cpp.

References Rect::Height(), Window::height, Window::left, PHD_UP, Window::top, and Window::width.

Referenced by EnsureVisibleCaption().

◆ ReInitAllWindows()

◆ ReInitWindow()

void ReInitWindow ( Window w,
bool  zoom_changed 
)

Definition at line 3324 of file window.cpp.

◆ RelocateAllWindows()

void RelocateAllWindows ( int  neww,
int  newh 
)

◆ ResetWindowSystem()

void ResetWindowSystem ( )

Reset the windowing system, by means of shutting it down followed by re-initialization.

Definition at line 1818 of file window.cpp.

References InitWindowSystem(), TileHighlightData::Reset(), and UnInitWindowSystem().

Referenced by GenerateWorld(), InitializeWindowsAndCaches(), and LoadIntroGame().

◆ ResizeWindow()

void ResizeWindow ( Window w,
int  delta_x,
int  delta_y,
bool  clamp_to_screen,
bool  schedule_resize 
)

Resize the window.

Update all the widgets of a window based on their resize flags Both the areas of the old window and the new sized window are set dirty ensuring proper redrawal.

Parameters
wWindow to resize
delta_xDelta x-size of changed window (positive if larger, etc.)
delta_yDelta y-size of changed window
clamp_to_screenWhether to make sure the whole window stays visible

Definition at line 2022 of file window.cpp.

References _current_text_dir, Ceil(), EnsureVisibleCaption(), Window::height, Window::left, Window::nested_root, Window::OnResize(), Window::ScheduleResize(), Window::SetDirty(), ST_RESIZE, TD_RTL, Window::top, and Window::width.

Referenced by DispatchLeftClickEvent(), TownAuthorityWindow::DrawRatings(), Window::FindWindowPlacementAndResize(), HandleWindowDragging(), BuildAirportWindow::OnPaint(), BuildDocksStationWindow::OnPaint(), Window::ReInit(), and RelocateAllWindows().

◆ ScrollMainViewport()

static void ScrollMainViewport ( int  x,
int  y 
)
static

Definition at line 2726 of file window.cpp.

◆ SetFocusedWindow()

◆ SetWindowClassesDirty()

◆ SetWindowDirty()

void SetWindowDirty ( WindowClass  cls,
WindowNumber  number 
)

Mark window as dirty (in need of repainting)

Parameters
clsWindow class
numberWindow number in that class

Definition at line 3101 of file window.cpp.

References Window::SetDirty(), Window::window_class, and Window::window_number.

Referenced by AgeVehicle(), AircraftEventHandler_AtTerminal(), Vehicle::BeginLoading(), ChangeIndustryProduction(), ChangeTimetable(), ChangeTownRating(), CheckTrainStayInDepot(), ClickChangeDateCheat(), NetworkContentDownloadStatusWindow::Close(), ClientNetworkCoordinatorSocketHandler::CloseConnection(), CmdAddVehicleGroup(), CmdAutofillTimetable(), CmdBuildAirport(), CmdBuildObject(), CmdBuildVehicle(), CmdChangeServiceInt(), CmdCompanyAllowListCtrl(), CmdDoTownAction(), CmdForceTrainProceed(), CmdMoveRailVehicle(), CmdPause(), CmdRefitVehicle(), CmdRenameDepot(), CmdReverseTrainDirection(), CmdSetAutoReplace(), CmdSetGroupFlag(), CmdSetTimetableStart(), CmdSetVehicleOnTime(), CmdStartStopVehicle(), CompaniesGenStatistics(), Train::ConsistChanged(), Vehicle::Crash(), DecreaseVehicleValue(), DeleteLastWagon(), DirtyCompanyInfrastructureWindows(), DoCreateNewIndustry(), DoStartupNewCompany(), Vehicle::HandleBreakdown(), IConsoleGUIPrint(), IndustryProductionCallback(), InvalidateCompanyWindows(), InvalidateVehicleOrder(), Vehicle::LeaveUnbunchingDepot(), LoadUnloadVehicle(), NewGRFParametersWindow::OnClick(), BuildSignalWindow::OnClick(), GenerateLandscapeWindow::OnDropdownSelect(), Aircraft::OnNewEconomyDay(), RoadVehicle::OnNewEconomyDay(), Ship::OnNewEconomyDay(), Train::OnNewEconomyDay(), Industry::PostDestructor(), GroundVehicle< T, Type >::PowerChanged(), Vehicle::PreDestructor(), ClientNetworkCoordinatorSocketHandler::Receive_GC_REGISTER_ACK(), ClientNetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN(), ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DATA(), ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(), ClientNetworkGameSocketHandler::Receive_SERVER_MAP_SIZE(), ClientNetworkGameSocketHandler::Receive_SERVER_WAIT(), ClientNetworkCoordinatorSocketHandler::Register(), RemoveAirport(), RemoveOrderFromAllVehicles(), ClientNetworkGameSocketHandler::SendJoin(), SetTrainGroupID(), GRFConfig::SetValue(), SetViewportCatchmentStation(), SetViewportCatchmentTown(), SetViewportCatchmentWaypoint(), TownActionBribe(), TownActionFundBuildings(), TrainController(), TrainEnterStation(), TriggerIndustryProduction(), UpdateCompanyRatingAndValue(), UpdateTownGrowth(), UpdateTownGrowthRate(), UpdateTrainGroupID(), UpdateVehicleTimetable(), Town::UpdateVirtCoord(), Station::UpdateVirtCoord(), VehicleEnterDepot(), and VehicleServiceInDepot().

◆ SetWindowWidgetDirty()

◆ StartWindowDrag()

static void StartWindowDrag ( Window w)
static

Start window dragging.

Parameters
wWindow to start dragging

Definition at line 2256 of file window.cpp.

References _drag_delta, _dragging_window, BringWindowToFront(), Window::flags, Window::left, CursorVars::pos, Window::top, and WF_DRAGGING.

Referenced by DispatchLeftClickEvent().

◆ StartWindowSizing()

static void StartWindowSizing ( Window w,
bool  to_left 
)
static

Start resizing a window.

Parameters
wWindow to start resizing.
to_leftWhether to drag towards the left or not

Definition at line 2273 of file window.cpp.

References _drag_delta, _dragging_window, BringWindowToFront(), Window::flags, CursorVars::pos, WF_SIZING_LEFT, and WF_SIZING_RIGHT.

Referenced by DispatchLeftClickEvent().

◆ UnInitWindowSystem()

void UnInitWindowSystem ( )

Close down the windowing system.

Definition at line 1804 of file window.cpp.

References _z_windows, Window::Close(), Window::DeleteClosedWindows(), and UnshowCriticalError().

Referenced by ResetWindowSystem(), and ShutdownGame().

◆ UpdateWindows()

◆ VpHandlePlaceSizingDrag()

Variable Documentation

◆ _cursorpos_drag_start

Point _cursorpos_drag_start

Definition at line 84 of file window.cpp.

◆ _drag_delta

Point _drag_delta
static

delta between mouse cursor and upper left corner of dragged window

Definition at line 52 of file window.cpp.

Referenced by HandleWindowDragging(), StartWindowDrag(), and StartWindowSizing().

◆ _dragging_window

bool _dragging_window
static

A window is being dragged or resized.

Definition at line 2079 of file window.cpp.

Referenced by HandleWindowDragging(), StartWindowDrag(), and StartWindowSizing().

◆ _focused_window

Window* _focused_window

Definition at line 82 of file window.cpp.

◆ _input_events_this_tick

int _input_events_this_tick = 0
static

Local counter that is incremented each time an mouse input event is detected.

The counter is used to stop auto-scrolling.

See also
HandleAutoscroll()
HandleMouseEvents()

Definition at line 2668 of file window.cpp.

Referenced by HandleMouseEvents(), and InputLoop().

◆ _last_scroll_window

Window* _last_scroll_window = nullptr
static

Window of the last scroll event.

Definition at line 54 of file window.cpp.

Referenced by Window::Close(), HandleViewportScroll(), and InitWindowSystem().

◆ _mouse_hovering

bool _mouse_hovering

The mouse is hovering over the same point.

Definition at line 91 of file window.cpp.

Referenced by HandleMouseEvents(), InitWindowSystem(), and TooltipsWindow::OnMouseLoop().

◆ _mouseover_last_w

Window* _mouseover_last_w = nullptr
static

Window of the last OnMouseOver event.

Definition at line 53 of file window.cpp.

Referenced by Window::Close(), HandleMouseOver(), and InitWindowSystem().

◆ _scrollbar_size

int _scrollbar_size

Definition at line 87 of file window.cpp.

◆ _scrollbar_start_pos

int _scrollbar_start_pos

Definition at line 86 of file window.cpp.

◆ _scroller_click_timeout

uint8_t _scroller_click_timeout = 0

Definition at line 88 of file window.cpp.

◆ _scrolling_viewport

bool _scrolling_viewport

A viewport is being scrolled with the mouse.

Definition at line 90 of file window.cpp.

Referenced by HandleViewportScroll(), InitWindowSystem(), and SmallMapWindow::OnRightClick().

◆ _special_mouse_mode

◆ _window_descs

std::vector<WindowDesc*>* _window_descs = nullptr

List of all WindowDescs.

List of WindowDescs.

This is a pointer to ensure initialisation order with the various static WindowDesc instances.

Definition at line 99 of file window.cpp.

Referenced by WindowDesc::LoadFromConfig(), WindowDesc::SaveToConfig(), and WindowDesc::WindowDesc().

◆ _window_highlight_colour

bool _window_highlight_colour = false

If false, highlight is white, otherwise the by the widget defined colour.

Definition at line 75 of file window.cpp.

Referenced by Window::DrawWidgets().

◆ _windows_file

std::string _windows_file

Config file to store WindowDesc.

Definition at line 102 of file window.cpp.

Referenced by DeterminePaths(), WindowDesc::LoadFromConfig(), and WindowDesc::SaveToConfig().

◆ _z_windows

WindowList _z_windows

List of windows opened at the screen sorted from the front to back.

Definition at line 57 of file window.cpp.

Referenced by BringWindowToFront(), Window::DeleteClosedWindows(), UnInitWindowSystem(), and Window::Window().

◆ MAX_OFFSET_DOUBLE_CLICK

constexpr int MAX_OFFSET_DOUBLE_CLICK = 5
staticconstexpr

How much the mouse is allowed to move to call it a double click.

Definition at line 2719 of file window.cpp.

Referenced by HandleMouseEvents().

◆ MAX_OFFSET_HOVER

constexpr int MAX_OFFSET_HOVER = 5
staticconstexpr

Maximum mouse movement before stopping a hover event.

Definition at line 2720 of file window.cpp.

Referenced by HandleMouseEvents().

◆ scrollamt

const int8_t scrollamt[16][2]
static
Initial value:
= {
{ 0, 0},
{-2, 0},
{ 0, -2},
{-2, -1},
{ 2, 0},
{ 0, 0},
{ 2, -1},
{ 0, -2},
{ 0, 2},
{-2, 1},
{ 0, 0},
{-2, 0},
{ 2, 1},
{ 0, 2},
{ 2, 0},
{ 0, 0},
}

Describes all the different arrow key combinations the game allows when it is in scrolling mode.

The real arrow keys are bitwise numbered as 1 = left 2 = up 4 = right 8 = down

Definition at line 2744 of file window.cpp.