1
0
Fork 0

Codechange: introduce GetMainWindow() to properly account for nullptr checks

Some nullptr checks have been removed as they were not triggered with nullptr
with the null video driver and in dedicated server mode.
pull/10299/head
Rubidium 2023-01-06 23:24:38 +01:00 committed by rubidium42
parent 9c70c38c5e
commit bcfe0fb076
16 changed files with 47 additions and 40 deletions

View File

@ -295,7 +295,7 @@ DEF_CONSOLE_CMD(ConZoomToLevel)
} else if (level > _settings_client.gui.zoom_max) { } else if (level > _settings_client.gui.zoom_max) {
IConsolePrint(CC_ERROR, "Current client settings do not allow zooming out beyond level {}.", _settings_client.gui.zoom_max); IConsolePrint(CC_ERROR, "Current client settings do not allow zooming out beyond level {}.", _settings_client.gui.zoom_max);
} else { } else {
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
Viewport *vp = w->viewport; Viewport *vp = w->viewport;
while (vp->zoom > level) DoZoomInOutWindow(ZOOM_IN, w); while (vp->zoom > level) DoZoomInOutWindow(ZOOM_IN, w);
while (vp->zoom < level) DoZoomInOutWindow(ZOOM_OUT, w); while (vp->zoom < level) DoZoomInOutWindow(ZOOM_OUT, w);

View File

@ -235,7 +235,7 @@ public:
int scr_bot = GetMainViewBottom() - 20; int scr_bot = GetMainViewBottom() - 20;
Point pt = RemapCoords(this->position.x, this->position.y, GetSlopePixelZOutsideMap(this->position.x, this->position.y)); Point pt = RemapCoords(this->position.x, this->position.y, GetSlopePixelZOutsideMap(this->position.x, this->position.y));
const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; const Viewport *vp = GetMainWindow()->viewport;
if (this->face == INVALID_COMPANY) { if (this->face == INVALID_COMPANY) {
/* move x pos to opposite corner */ /* move x pos to opposite corner */
pt.x = UnScaleByZoom(pt.x - vp->virtual_left, vp->zoom) + vp->left; pt.x = UnScaleByZoom(pt.x - vp->virtual_left, vp->zoom) + vp->left;

View File

@ -321,9 +321,7 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti
ShowGenerateWorldProgress(); ShowGenerateWorldProgress();
/* Centre the view on the map */ /* Centre the view on the map */
if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) { ScrollMainWindowToTile(TileXY(MapSizeX() / 2, MapSizeY() / 2), true);
ScrollMainWindowToTile(TileXY(MapSizeX() / 2, MapSizeY() / 2), true);
}
_GenerateWorld(); _GenerateWorld();
} }

View File

@ -222,7 +222,7 @@ struct SelectGameWindow : public Window {
} }
IntroGameViewportCommand &vc = intro_viewport_commands[this->cur_viewport_command_index]; IntroGameViewportCommand &vc = intro_viewport_commands[this->cur_viewport_command_index];
Window *mw = FindWindowByClass(WC_MAIN_WINDOW); Window *mw = GetMainWindow();
Viewport *vp = mw->viewport; Viewport *vp = mw->viewport;
/* Early exit if the current command hasn't elapsed and isn't animated. */ /* Early exit if the current command hasn't elapsed and isn't animated. */

View File

@ -553,7 +553,7 @@ LinkGraphLegendWindow::LinkGraphLegendWindow(WindowDesc *desc, int window_number
{ {
this->InitNested(window_number); this->InitNested(window_number);
this->InvalidateData(0); this->InvalidateData(0);
this->SetOverlay(FindWindowById(WC_MAIN_WINDOW, 0)->viewport->overlay); this->SetOverlay(GetMainWindow()->viewport->overlay);
} }
/** /**

View File

@ -157,7 +157,7 @@ void FixTitleGameZoom(int zoom_adjust)
{ {
if (_game_mode != GM_MENU) return; if (_game_mode != GM_MENU) return;
Viewport *vp = FindWindowByClass(WC_MAIN_WINDOW)->viewport; Viewport *vp = GetMainWindow()->viewport;
/* Adjust the zoom in/out. /* Adjust the zoom in/out.
* Can't simply add, since operator+ is not defined on the ZoomLevel type. */ * Can't simply add, since operator+ is not defined on the ZoomLevel type. */

View File

@ -1264,7 +1264,7 @@ static WindowDesc _query_desc(
*/ */
void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback) void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback)
{ {
if (parent == nullptr) parent = FindWindowById(WC_MAIN_WINDOW, 0); if (parent == nullptr) parent = GetMainWindow();
for (Window *w : Window::Iterate()) { for (Window *w : Window::Iterate()) {
if (w->window_class != WC_CONFIRM_POPUP_QUERY) continue; if (w->window_class != WC_CONFIRM_POPUP_QUERY) continue;

View File

@ -2517,6 +2517,6 @@ void ShowNetworkAskRelay(const std::string &server_connection_string, const std:
{ {
CloseWindowByClass(WC_NETWORK_ASK_RELAY); CloseWindowByClass(WC_NETWORK_ASK_RELAY);
Window *parent = FindWindowById(WC_MAIN_WINDOW, 0); Window *parent = GetMainWindow();
new NetworkAskRelayWindow(&_network_ask_relay_desc, parent, server_connection_string, relay_connection_string, token); new NetworkAskRelayWindow(&_network_ask_relay_desc, parent, server_connection_string, relay_connection_string, token);
} }

View File

@ -34,18 +34,16 @@ ZoomLevel _saved_scrollpos_zoom;
void SaveViewportBeforeSaveGame() void SaveViewportBeforeSaveGame()
{ {
const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); const Window *w = GetMainWindow();
if (w != nullptr) { _saved_scrollpos_x = w->viewport->scrollpos_x;
_saved_scrollpos_x = w->viewport->scrollpos_x; _saved_scrollpos_y = w->viewport->scrollpos_y;
_saved_scrollpos_y = w->viewport->scrollpos_y; _saved_scrollpos_zoom = w->viewport->zoom;
_saved_scrollpos_zoom = w->viewport->zoom;
}
} }
void ResetViewportAfterLoadGame() void ResetViewportAfterLoadGame()
{ {
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
w->viewport->scrollpos_x = _saved_scrollpos_x; w->viewport->scrollpos_x = _saved_scrollpos_x;
w->viewport->scrollpos_y = _saved_scrollpos_y; w->viewport->scrollpos_y = _saved_scrollpos_y;

View File

@ -732,7 +732,7 @@ void SetupScreenshotViewport(ScreenshotType t, Viewport *vp, uint32 width, uint3
case SC_CRASHLOG: { case SC_CRASHLOG: {
assert(width == 0 && height == 0); assert(width == 0 && height == 0);
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
vp->virtual_left = w->viewport->virtual_left; vp->virtual_left = w->viewport->virtual_left;
vp->virtual_top = w->viewport->virtual_top; vp->virtual_top = w->viewport->virtual_top;
vp->virtual_width = w->viewport->virtual_width; vp->virtual_width = w->viewport->virtual_width;
@ -776,7 +776,7 @@ void SetupScreenshotViewport(ScreenshotType t, Viewport *vp, uint32 width, uint3
default: { default: {
vp->zoom = (t == SC_ZOOMEDIN) ? _settings_client.gui.zoom_min : ZOOM_LVL_VIEWPORT; vp->zoom = (t == SC_ZOOMEDIN) ? _settings_client.gui.zoom_min : ZOOM_LVL_VIEWPORT;
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
vp->virtual_left = w->viewport->virtual_left; vp->virtual_left = w->viewport->virtual_left;
vp->virtual_top = w->viewport->virtual_top; vp->virtual_top = w->viewport->virtual_top;

View File

@ -941,7 +941,7 @@ void SmallMapWindow::DrawTowns(const DrawPixelInfo *dpi) const
void SmallMapWindow::DrawMapIndicators() const void SmallMapWindow::DrawMapIndicators() const
{ {
/* Find main viewport. */ /* Find main viewport. */
const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; const Viewport *vp = GetMainWindow()->viewport;
Point upper_left_smallmap_coord = InverseRemapCoords2(vp->virtual_left, vp->virtual_top); Point upper_left_smallmap_coord = InverseRemapCoords2(vp->virtual_left, vp->virtual_top);
Point lower_right_smallmap_coord = InverseRemapCoords2(vp->virtual_left + vp->virtual_width - 1, vp->virtual_top + vp->virtual_height - 1); Point lower_right_smallmap_coord = InverseRemapCoords2(vp->virtual_left + vp->virtual_width - 1, vp->virtual_top + vp->virtual_height - 1);
@ -1433,7 +1433,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt)
if (click_count > 0) this->mouse_capture_widget = widget; if (click_count > 0) this->mouse_capture_widget = widget;
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_SM_MAP); const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_SM_MAP);
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
int sub; int sub;
pt = this->PixelToTile(pt.x - wid->pos_x, pt.y - wid->pos_y, &sub); pt = this->PixelToTile(pt.x - wid->pos_x, pt.y - wid->pos_y, &sub);
ScrollWindowTo(this->scroll_x + pt.x * TILE_SIZE, this->scroll_y + pt.y * TILE_SIZE, -1, w); ScrollWindowTo(this->scroll_x + pt.x * TILE_SIZE, this->scroll_y + pt.y * TILE_SIZE, -1, w);
@ -1665,7 +1665,7 @@ void SmallMapWindow::SetNewScroll(int sx, int sy, int sub)
*/ */
void SmallMapWindow::SmallMapCenterOnCurrentPos() void SmallMapWindow::SmallMapCenterOnCurrentPos()
{ {
const Viewport *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; const Viewport *vp = GetMainWindow()->viewport;
Point viewport_center = InverseRemapCoords2(vp->virtual_left + vp->virtual_width / 2, vp->virtual_top + vp->virtual_height / 2); Point viewport_center = InverseRemapCoords2(vp->virtual_left + vp->virtual_width / 2, vp->virtual_top + vp->virtual_height / 2);
int sub; int sub;
@ -1882,7 +1882,7 @@ void ShowSmallMap()
*/ */
bool ScrollMainWindowTo(int x, int y, int z, bool instant) bool ScrollMainWindowTo(int x, int y, int z, bool instant)
{ {
bool res = ScrollWindowTo(x, y, z, FindWindowById(WC_MAIN_WINDOW, 0), instant); bool res = ScrollWindowTo(x, y, z, GetMainWindow(), instant);
/* If a user scrolls to a tile (via what way what so ever) and already is on /* If a user scrolls to a tile (via what way what so ever) and already is on
* that tile (e.g.: pressed twice), move the smallmap to that location, * that tile (e.g.: pressed twice), move the smallmap to that location,

View File

@ -884,7 +884,7 @@ static CallBackFunction MenuClickShowAir(int index)
static CallBackFunction ToolbarZoomInClick(Window *w) static CallBackFunction ToolbarZoomInClick(Window *w)
{ {
if (DoZoomInOutWindow(ZOOM_IN, FindWindowById(WC_MAIN_WINDOW, 0))) { if (DoZoomInOutWindow(ZOOM_IN, GetMainWindow())) {
w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_IN : (byte)WID_TN_ZOOM_IN); w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_IN : (byte)WID_TN_ZOOM_IN);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
@ -895,7 +895,7 @@ static CallBackFunction ToolbarZoomInClick(Window *w)
static CallBackFunction ToolbarZoomOutClick(Window *w) static CallBackFunction ToolbarZoomOutClick(Window *w)
{ {
if (DoZoomInOutWindow(ZOOM_OUT, FindWindowById(WC_MAIN_WINDOW, 0))) { if (DoZoomInOutWindow(ZOOM_OUT, GetMainWindow())) {
w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_OUT : (byte)WID_TN_ZOOM_OUT); w->HandleButtonClick((_game_mode == GM_EDITOR) ? (byte)WID_TE_ZOOM_OUT : (byte)WID_TN_ZOOM_OUT);
if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP);
} }
@ -2146,7 +2146,7 @@ struct MainToolbarWindow : Window {
void OnInvalidateData(int data = 0, bool gui_scope = true) override void OnInvalidateData(int data = 0, bool gui_scope = true) override
{ {
if (!gui_scope) return; if (!gui_scope) return;
if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT); HandleZoomMessage(this, GetMainWindow()->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT);
} }
static HotkeyList hotkeys; static HotkeyList hotkeys;
@ -2520,7 +2520,7 @@ struct ScenarioEditorToolbarWindow : Window {
void OnInvalidateData(int data = 0, bool gui_scope = true) override void OnInvalidateData(int data = 0, bool gui_scope = true) override
{ {
if (!gui_scope) return; if (!gui_scope) return;
if (FindWindowById(WC_MAIN_WINDOW, 0) != nullptr) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT); HandleZoomMessage(this, GetMainWindow()->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT);
} }
void OnQueryTextFinished(char *str) override void OnQueryTextFinished(char *str) override

View File

@ -3118,7 +3118,7 @@ public:
if (_ctrl_pressed) { if (_ctrl_pressed) {
ShowExtraViewportWindow(TileVirtXY(v->x_pos, v->y_pos)); ShowExtraViewportWindow(TileVirtXY(v->x_pos, v->y_pos));
} else { } else {
const Window *mainwindow = FindWindowById(WC_MAIN_WINDOW, 0); const Window *mainwindow = GetMainWindow();
if (click_count > 1 && mainwindow->viewport->zoom <= ZOOM_LVL_OUT_4X) { if (click_count > 1 && mainwindow->viewport->zoom <= ZOOM_LVL_OUT_4X) {
/* main window 'follows' vehicle */ /* main window 'follows' vehicle */
mainwindow->viewport->follow_vehicle = v->index; mainwindow->viewport->follow_vehicle = v->index;
@ -3176,9 +3176,9 @@ public:
{ {
/* If the hotkey is not for any widget in the UI (i.e. for honking) */ /* If the hotkey is not for any widget in the UI (i.e. for honking) */
if (hotkey == WID_VV_HONK_HORN) { if (hotkey == WID_VV_HONK_HORN) {
const Window* mainwindow = FindWindowById(WC_MAIN_WINDOW, 0); const Window *mainwindow = GetMainWindow();
const Vehicle* v = Vehicle::Get(window_number); const Vehicle *v = Vehicle::Get(window_number);
/*Only play the sound if we're following this vehicle */ /* Only play the sound if we're following this vehicle */
if (mainwindow->viewport->follow_vehicle == v->index) { if (mainwindow->viewport->follow_vehicle == v->index) {
v->PlayLeaveStationSound(true); v->PlayLeaveStationSound(true);
} }
@ -3342,8 +3342,8 @@ bool VehicleClicked(const GUIVehicleGroup &vehgroup)
void StopGlobalFollowVehicle(const Vehicle *v) void StopGlobalFollowVehicle(const Vehicle *v)
{ {
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
if (w != nullptr && w->viewport->follow_vehicle == v->index) { if (w->viewport->follow_vehicle == v->index) {
ScrollMainWindowTo(v->x_pos, v->y_pos, v->z_pos, true); // lock the main view on the vehicle's last position ScrollMainWindowTo(v->x_pos, v->y_pos, v->z_pos, true); // lock the main view on the vehicle's last position
w->viewport->follow_vehicle = INVALID_VEHICLE; w->viewport->follow_vehicle = INVALID_VEHICLE;
} }

View File

@ -63,7 +63,7 @@ public:
Point pt; Point pt;
if (tile == INVALID_TILE) { if (tile == INVALID_TILE) {
/* No tile? Use center of main viewport. */ /* No tile? Use center of main viewport. */
const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); const Window *w = GetMainWindow();
/* center on same place as main window (zoom is maximum, no adjustment needed) */ /* center on same place as main window (zoom is maximum, no adjustment needed) */
pt.x = w->viewport->scrollpos_x + w->viewport->virtual_width / 2; pt.x = w->viewport->scrollpos_x + w->viewport->virtual_width / 2;
@ -95,7 +95,7 @@ public:
case WID_EV_ZOOM_OUT: DoZoomInOutWindow(ZOOM_OUT, this); break; case WID_EV_ZOOM_OUT: DoZoomInOutWindow(ZOOM_OUT, this); break;
case WID_EV_MAIN_TO_VIEW: { // location button (move main view to same spot as this view) 'Paste Location' case WID_EV_MAIN_TO_VIEW: { // location button (move main view to same spot as this view) 'Paste Location'
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
int x = this->viewport->scrollpos_x; // Where is the main looking at int x = this->viewport->scrollpos_x; // Where is the main looking at
int y = this->viewport->scrollpos_y; int y = this->viewport->scrollpos_y;
@ -107,7 +107,7 @@ public:
} }
case WID_EV_VIEW_TO_MAIN: { // inverse location button (move this view to same spot as main view) 'Copy Location' case WID_EV_VIEW_TO_MAIN: { // inverse location button (move this view to same spot as main view) 'Copy Location'
const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); const Window *w = GetMainWindow();
int x = w->viewport->scrollpos_x; int x = w->viewport->scrollpos_x;
int y = w->viewport->scrollpos_y; int y = w->viewport->scrollpos_y;

View File

@ -1178,6 +1178,18 @@ Window *FindWindowByClass(WindowClass cls)
return nullptr; return nullptr;
} }
/**
* Get the main window, i.e. FindWindowById(WC_MAIN_WINDOW, 0).
* If the main window is not available, this function will trigger an assert.
* @return Pointer to the main window.
*/
Window *GetMainWindow()
{
Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
assert(w != nullptr);
return w;
}
/** /**
* Close a window by its class and window number (if it is open). * Close a window by its class and window number (if it is open).
* @param cls Window class * @param cls Window class
@ -2431,7 +2443,7 @@ static EventState HandleViewportScroll()
return ES_NOT_HANDLED; return ES_NOT_HANDLED;
} }
if (_last_scroll_window == FindWindowById(WC_MAIN_WINDOW, 0) && _last_scroll_window->viewport->follow_vehicle != INVALID_VEHICLE) { if (_last_scroll_window == GetMainWindow() && _last_scroll_window->viewport->follow_vehicle != INVALID_VEHICLE) {
/* If the main window is following a vehicle, then first let go of it! */ /* If the main window is following a vehicle, then first let go of it! */
const Vehicle *veh = Vehicle::Get(_last_scroll_window->viewport->follow_vehicle); const Vehicle *veh = Vehicle::Get(_last_scroll_window->viewport->follow_vehicle);
ScrollMainWindowTo(veh->x_pos, veh->y_pos, veh->z_pos, true); // This also resets follow_vehicle ScrollMainWindowTo(veh->x_pos, veh->y_pos, veh->z_pos, true); // This also resets follow_vehicle
@ -2776,9 +2788,7 @@ const std::chrono::milliseconds TIME_BETWEEN_DOUBLE_CLICK(500); ///< Time betwee
static void ScrollMainViewport(int x, int y) static void ScrollMainViewport(int x, int y)
{ {
if (_game_mode != GM_MENU) { if (_game_mode != GM_MENU) {
Window *w = FindWindowById(WC_MAIN_WINDOW, 0); Window *w = GetMainWindow();
assert(w);
w->viewport->dest_scrollpos_x += ScaleByZoom(x, w->viewport->zoom); w->viewport->dest_scrollpos_x += ScaleByZoom(x, w->viewport->zoom);
w->viewport->dest_scrollpos_y += ScaleByZoom(y, w->viewport->zoom); w->viewport->dest_scrollpos_y += ScaleByZoom(y, w->viewport->zoom);
} }

View File

@ -16,6 +16,7 @@
Window *FindWindowById(WindowClass cls, WindowNumber number); Window *FindWindowById(WindowClass cls, WindowNumber number);
Window *FindWindowByClass(WindowClass cls); Window *FindWindowByClass(WindowClass cls);
Window *GetMainWindow();
void ChangeWindowOwner(Owner old_owner, Owner new_owner); void ChangeWindowOwner(Owner old_owner, Owner new_owner);
void ResizeWindow(Window *w, int x, int y, bool clamp_to_screen = true); void ResizeWindow(Window *w, int x, int y, bool clamp_to_screen = true);