From d27e14f45b5f112cdcf9710139962d257a8ae0ed Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Mon, 28 Sep 2020 20:36:15 +0200 Subject: [PATCH] Compact, statically initialized syntax for event lists (#12973) --- src/openrct2-ui/scripting/CustomWindow.cpp | 43 +- src/openrct2-ui/windows/About.cpp | 71 +-- src/openrct2-ui/windows/Banner.cpp | 40 +- src/openrct2-ui/windows/Changelog.cpp | 40 +- src/openrct2-ui/windows/Cheats.cpp | 148 ++----- src/openrct2-ui/windows/ClearScenery.cpp | 40 +- src/openrct2-ui/windows/CustomCurrency.cpp | 38 +- src/openrct2-ui/windows/DebugPaint.cpp | 36 +- .../windows/DemolishRidePrompt.cpp | 69 +-- src/openrct2-ui/windows/Dropdown.cpp | 34 +- .../windows/EditorBottomToolbar.cpp | 36 +- .../windows/EditorInventionsList.cpp | 80 +--- src/openrct2-ui/windows/EditorMain.cpp | 35 +- .../windows/EditorObjectSelection.cpp | 47 +- .../windows/EditorObjectiveOptions.cpp | 83 +--- .../windows/EditorScenarioOptions.cpp | 118 ++--- src/openrct2-ui/windows/Error.cpp | 35 +- src/openrct2-ui/windows/Finances.cpp | 221 ++-------- src/openrct2-ui/windows/Footpath.cpp | 44 +- src/openrct2-ui/windows/GameBottomToolbar.cpp | 39 +- src/openrct2-ui/windows/Guest.cpp | 276 +++--------- src/openrct2-ui/windows/GuestList.cpp | 45 +- src/openrct2-ui/windows/InstallTrack.cpp | 38 +- src/openrct2-ui/windows/Land.cpp | 41 +- src/openrct2-ui/windows/LandRights.cpp | 44 +- src/openrct2-ui/windows/LoadSave.cpp | 76 +--- src/openrct2-ui/windows/Main.cpp | 34 +- src/openrct2-ui/windows/Map.cpp | 49 +-- src/openrct2-ui/windows/MapGen.cpp | 159 ++----- src/openrct2-ui/windows/MapTooltip.cpp | 35 +- src/openrct2-ui/windows/MazeConstruction.cpp | 42 +- src/openrct2-ui/windows/Multiplayer.cpp | 163 ++----- src/openrct2-ui/windows/MusicCredits.cpp | 37 +- src/openrct2-ui/windows/Network.cpp | 38 +- src/openrct2-ui/windows/NetworkStatus.cpp | 39 +- src/openrct2-ui/windows/NewCampaign.cpp | 38 +- src/openrct2-ui/windows/NewRide.cpp | 42 +- src/openrct2-ui/windows/News.cpp | 39 +- src/openrct2-ui/windows/NewsOptions.cpp | 37 +- src/openrct2-ui/windows/ObjectLoadError.cpp | 41 +- src/openrct2-ui/windows/Options.cpp | 41 +- src/openrct2-ui/windows/Park.cpp | 272 +++--------- src/openrct2-ui/windows/Player.cpp | 80 +--- src/openrct2-ui/windows/Research.cpp | 76 +--- src/openrct2-ui/windows/Ride.cpp | 412 +++++------------- src/openrct2-ui/windows/RideConstruction.cpp | 43 +- src/openrct2-ui/windows/RideList.cpp | 44 +- src/openrct2-ui/windows/SavePrompt.cpp | 36 +- src/openrct2-ui/windows/ScenarioSelect.cpp | 42 +- src/openrct2-ui/windows/Scenery.cpp | 47 +- src/openrct2-ui/windows/SceneryScatter.cpp | 39 +- src/openrct2-ui/windows/ServerList.cpp | 45 +- src/openrct2-ui/windows/ServerStart.cpp | 39 +- src/openrct2-ui/windows/ShortcutKeyChange.cpp | 35 +- src/openrct2-ui/windows/ShortcutKeys.cpp | 41 +- src/openrct2-ui/windows/Sign.cpp | 80 +--- src/openrct2-ui/windows/Staff.cpp | 128 ++---- src/openrct2-ui/windows/StaffFirePrompt.cpp | 35 +- src/openrct2-ui/windows/StaffList.cpp | 47 +- src/openrct2-ui/windows/TextInput.cpp | 38 +- src/openrct2-ui/windows/Themes.cpp | 45 +- src/openrct2-ui/windows/TileInspector.cpp | 47 +- .../windows/TitleCommandEditor.cpp | 42 +- src/openrct2-ui/windows/TitleEditor.cpp | 46 +- src/openrct2-ui/windows/TitleExit.cpp | 35 +- src/openrct2-ui/windows/TitleLogo.cpp | 35 +- src/openrct2-ui/windows/TitleMenu.cpp | 39 +- src/openrct2-ui/windows/TitleOptions.cpp | 35 +- src/openrct2-ui/windows/Tooltip.cpp | 35 +- src/openrct2-ui/windows/TopToolbar.cpp | 43 +- src/openrct2-ui/windows/TrackDesignManage.cpp | 72 +-- src/openrct2-ui/windows/TrackDesignPlace.cpp | 42 +- src/openrct2-ui/windows/TrackList.cpp | 43 +- src/openrct2-ui/windows/ViewClipping.cpp | 44 +- src/openrct2-ui/windows/Viewport.cpp | 38 +- src/openrct2-ui/windows/Water.cpp | 40 +- src/openrct2/interface/Window.h | 6 + 77 files changed, 1199 insertions(+), 3718 deletions(-) diff --git a/src/openrct2-ui/scripting/CustomWindow.cpp b/src/openrct2-ui/scripting/CustomWindow.cpp index 1efbfe225d..ded4780b90 100644 --- a/src/openrct2-ui/scripting/CustomWindow.cpp +++ b/src/openrct2-ui/scripting/CustomWindow.cpp @@ -64,34 +64,21 @@ namespace OpenRCT2::Ui::Windows static void window_custom_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32_t scrollIndex); static void window_custom_update_viewport(rct_window* w); - static rct_window_event_list window_custom_events = { window_custom_close, - window_custom_mouseup, - window_custom_resize, - window_custom_mousedown, - window_custom_dropdown, - nullptr, - window_custom_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_custom_scrollgetsize, - window_custom_scrollmousedown, - window_custom_scrollmousedrag, - window_custom_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_custom_invalidate, - window_custom_paint, - window_custom_scrollpaint }; + static rct_window_event_list window_custom_events([](auto& events) { + events.close = &window_custom_close; + events.mouse_up = &window_custom_mouseup; + events.resize = &window_custom_resize; + events.mouse_down = &window_custom_mousedown; + events.dropdown = &window_custom_dropdown; + events.update = &window_custom_update; + events.get_scroll_size = &window_custom_scrollgetsize; + events.scroll_mousedown = &window_custom_scrollmousedown; + events.scroll_mousedrag = &window_custom_scrollmousedrag; + events.scroll_mouseover = &window_custom_scrollmouseover; + events.invalidate = &window_custom_invalidate; + events.paint = &window_custom_paint; + events.scroll_paint = &window_custom_scrollpaint; + }); struct CustomWidgetDesc { diff --git a/src/openrct2-ui/windows/About.cpp b/src/openrct2-ui/windows/About.cpp index 971ea6b87e..73c3f14598 100644 --- a/src/openrct2-ui/windows/About.cpp +++ b/src/openrct2-ui/windows/About.cpp @@ -89,67 +89,18 @@ static void window_about_rct2_mouseup(rct_window *w, rct_widgetindex widgetIndex static void window_about_rct2_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_about_openrct2_common_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_about_openrct2_events = { - nullptr, - window_about_openrct2_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_about_openrct2_invalidate, - window_about_openrct2_paint, - nullptr -}; +static rct_window_event_list window_about_openrct2_events([](auto& events) +{ + events.mouse_up = &window_about_openrct2_mouseup; + events.invalidate = &window_about_openrct2_invalidate; + events.paint = &window_about_openrct2_paint; +}); -static rct_window_event_list window_about_rct2_events = { - nullptr, - window_about_rct2_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_about_rct2_paint, - nullptr -}; +static rct_window_event_list window_about_rct2_events([](auto& events) +{ + events.mouse_up = &window_about_rct2_mouseup; + events.paint = &window_about_rct2_paint; +}); static rct_window_event_list *window_about_page_events[] = { &window_about_openrct2_events, diff --git a/src/openrct2-ui/windows/Banner.cpp b/src/openrct2-ui/windows/Banner.cpp index 5511313dd3..1cb7f3a3c5 100644 --- a/src/openrct2-ui/windows/Banner.cpp +++ b/src/openrct2-ui/windows/Banner.cpp @@ -77,36 +77,16 @@ static void window_banner_viewport_rotate(rct_window *w); static void window_banner_invalidate(rct_window *w); static void window_banner_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_banner_events = { - nullptr, - window_banner_mouseup, - nullptr, - window_banner_mousedown, - window_banner_dropdown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_banner_textinput, - window_banner_viewport_rotate, - nullptr, - nullptr, - nullptr, - nullptr, - window_banner_invalidate, - window_banner_paint, - nullptr -}; +static rct_window_event_list window_banner_events([](auto& events) +{ + events.mouse_up = &window_banner_mouseup; + events.mouse_down = &window_banner_mousedown; + events.dropdown = &window_banner_dropdown; + events.text_input = &window_banner_textinput; + events.viewport_rotate = &window_banner_viewport_rotate; + events.invalidate = &window_banner_invalidate; + events.paint = &window_banner_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/Changelog.cpp b/src/openrct2-ui/windows/Changelog.cpp index 8b37c59454..67fdab47ff 100644 --- a/src/openrct2-ui/windows/Changelog.cpp +++ b/src/openrct2-ui/windows/Changelog.cpp @@ -57,36 +57,16 @@ static void window_changelog_invalidate(rct_window *w); static void window_changelog_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_changelog_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_changelog_events = { - window_changelog_close, - window_changelog_mouseup, - window_changelog_resize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_changelog_scrollgetsize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_changelog_invalidate, - window_changelog_paint, - window_changelog_scrollpaint -}; +static rct_window_event_list window_changelog_events([](auto& events) +{ + events.close = &window_changelog_close; + events.mouse_up = &window_changelog_mouseup; + events.resize = &window_changelog_resize; + events.get_scroll_size = &window_changelog_scrollgetsize; + events.invalidate = &window_changelog_invalidate; + events.paint = &window_changelog_paint; + events.scroll_paint = &window_changelog_scrollpaint; +}); // clang-format on static void window_new_version_process_info(); diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index 72c108df9d..f2d551179e 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -333,133 +333,41 @@ static void window_cheats_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_cheats_set_page(rct_window *w, int32_t page); static void window_cheats_text_input(rct_window *w, rct_widgetindex widgetIndex, char *text); -static rct_window_event_list window_cheats_money_events = +static rct_window_event_list window_cheats_money_events([](auto& events) { - nullptr, - window_cheats_money_mouseup, - nullptr, - window_cheats_money_mousedown, - nullptr, - nullptr, - window_cheats_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_cheats_text_input, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_cheats_invalidate, - window_cheats_paint, - nullptr -}; + events.mouse_up = &window_cheats_money_mouseup; + events.mouse_down = &window_cheats_money_mousedown; + events.update = &window_cheats_update; + events.text_input = &window_cheats_text_input; + events.invalidate = &window_cheats_invalidate; + events.paint = &window_cheats_paint; +}); -static rct_window_event_list window_cheats_guests_events = +static rct_window_event_list window_cheats_guests_events([](auto& events) { - nullptr, - window_cheats_guests_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_cheats_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_cheats_invalidate, - window_cheats_paint, - nullptr -}; + events.mouse_up = &window_cheats_guests_mouseup; + events.update = &window_cheats_update; + events.invalidate = &window_cheats_invalidate; + events.paint = &window_cheats_paint; +}); -static rct_window_event_list window_cheats_misc_events = +static rct_window_event_list window_cheats_misc_events([](auto& events) { - nullptr, - window_cheats_misc_mouseup, - nullptr, - window_cheats_misc_mousedown, - window_cheats_misc_dropdown, - nullptr, - window_cheats_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_cheats_invalidate, - window_cheats_paint, - nullptr -}; + events.mouse_up = &window_cheats_misc_mouseup; + events.mouse_down = &window_cheats_misc_mousedown; + events.dropdown = &window_cheats_misc_dropdown; + events.update = &window_cheats_update; + events.invalidate = &window_cheats_invalidate; + events.paint = &window_cheats_paint; +}); -static rct_window_event_list window_cheats_rides_events = +static rct_window_event_list window_cheats_rides_events([](auto& events) { - nullptr, - window_cheats_rides_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_cheats_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_cheats_invalidate, - window_cheats_paint, - nullptr -}; + events.mouse_up = &window_cheats_rides_mouseup; + events.update = &window_cheats_update; + events.invalidate = &window_cheats_invalidate; + events.paint = &window_cheats_paint; +}); static rct_window_event_list *window_cheats_page_events[] = diff --git a/src/openrct2-ui/windows/ClearScenery.cpp b/src/openrct2-ui/windows/ClearScenery.cpp index 0f1aa49808..49f547fdfa 100644 --- a/src/openrct2-ui/windows/ClearScenery.cpp +++ b/src/openrct2-ui/windows/ClearScenery.cpp @@ -53,36 +53,16 @@ static void window_clear_scenery_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_clear_scenery_textinput(rct_window *w, rct_widgetindex widgetIndex, char *text); static void window_clear_scenery_inputsize(rct_window *w); -static rct_window_event_list window_clear_scenery_events = { - window_clear_scenery_close, - window_clear_scenery_mouseup, - nullptr, - window_clear_scenery_mousedown, - nullptr, - nullptr, - window_clear_scenery_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_clear_scenery_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_clear_scenery_invalidate, - window_clear_scenery_paint, - nullptr -}; +static rct_window_event_list window_clear_scenery_events([](auto& events) +{ + events.close = &window_clear_scenery_close; + events.mouse_up = &window_clear_scenery_mouseup; + events.mouse_down = &window_clear_scenery_mousedown; + events.update = &window_clear_scenery_update; + events.text_input = &window_clear_scenery_textinput; + events.invalidate = &window_clear_scenery_invalidate; + events.paint = &window_clear_scenery_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/CustomCurrency.cpp b/src/openrct2-ui/windows/CustomCurrency.cpp index 0895b72da4..efc6b878e0 100644 --- a/src/openrct2-ui/windows/CustomCurrency.cpp +++ b/src/openrct2-ui/windows/CustomCurrency.cpp @@ -50,36 +50,14 @@ static void custom_currency_window_text_input(struct rct_window *w, rct_widgetin static void custom_currency_window_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list _windowCustomCurrencyEvents = { - nullptr, - custom_currency_window_mouseup, - nullptr, - custom_currency_window_mousedown, - custom_currency_window_dropdown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - custom_currency_window_text_input, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - custom_currency_window_paint, - nullptr -}; +static rct_window_event_list _windowCustomCurrencyEvents([](auto& events) +{ + events.mouse_up = &custom_currency_window_mouseup; + events.mouse_down = &custom_currency_window_mousedown; + events.dropdown = &custom_currency_window_dropdown; + events.text_input = &custom_currency_window_text_input; + events.paint = &custom_currency_window_paint; +}); // clang-format on rct_window* custom_currency_window_open() diff --git a/src/openrct2-ui/windows/DebugPaint.cpp b/src/openrct2-ui/windows/DebugPaint.cpp index bfb98a245d..a387f8dacb 100644 --- a/src/openrct2-ui/windows/DebugPaint.cpp +++ b/src/openrct2-ui/windows/DebugPaint.cpp @@ -49,36 +49,12 @@ static void window_debug_paint_mouseup(rct_window * w, rct_widgetindex widgetInd static void window_debug_paint_invalidate(rct_window * w); static void window_debug_paint_paint(rct_window * w, rct_drawpixelinfo * dpi); -static rct_window_event_list window_debug_paint_events = { - nullptr, - window_debug_paint_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_debug_paint_invalidate, - window_debug_paint_paint, - nullptr -}; +static rct_window_event_list window_debug_paint_events([](auto& events) +{ + events.mouse_up = &window_debug_paint_mouseup; + events.invalidate = &window_debug_paint_invalidate; + events.paint = &window_debug_paint_paint; +}); // clang-format on rct_window* window_debug_paint_open() diff --git a/src/openrct2-ui/windows/DemolishRidePrompt.cpp b/src/openrct2-ui/windows/DemolishRidePrompt.cpp index 891e40cc8b..1fd2e10ba8 100644 --- a/src/openrct2-ui/windows/DemolishRidePrompt.cpp +++ b/src/openrct2-ui/windows/DemolishRidePrompt.cpp @@ -52,68 +52,17 @@ static void window_ride_refurbish_mouseup(rct_window *w, rct_widgetindex widgetI static void window_ride_refurbish_paint(rct_window *w, rct_drawpixelinfo *dpi); //0x0098E2E4 -static rct_window_event_list window_ride_demolish_events = { - nullptr, - window_ride_demolish_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_demolish_paint, - nullptr, -}; +static rct_window_event_list window_ride_demolish_events([](auto& events) +{ + events.mouse_up = &window_ride_demolish_mouseup; + events.paint = &window_ride_demolish_paint; +}); // clang-format on -static rct_window_event_list window_ride_refurbish_events = { - nullptr, - window_ride_refurbish_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_refurbish_paint, - nullptr, -}; +static rct_window_event_list window_ride_refurbish_events([](auto& events) { + events.mouse_up = &window_ride_refurbish_mouseup; + events.paint = &window_ride_refurbish_paint; +}); /** Based off of rct2: 0x006B486A */ rct_window* window_ride_demolish_prompt_open(Ride* ride) diff --git a/src/openrct2-ui/windows/Dropdown.cpp b/src/openrct2-ui/windows/Dropdown.cpp index eef7049af8..03a0f8d658 100644 --- a/src/openrct2-ui/windows/Dropdown.cpp +++ b/src/openrct2-ui/windows/Dropdown.cpp @@ -91,36 +91,10 @@ void dropdown_set_disabled(int32_t index, bool value) static void window_dropdown_paint(rct_window* w, rct_drawpixelinfo* dpi); // clang-format off -static rct_window_event_list window_dropdown_events = { - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_dropdown_paint, - nullptr -}; +static rct_window_event_list window_dropdown_events([](auto& events) +{ + events.paint = &window_dropdown_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/EditorBottomToolbar.cpp b/src/openrct2-ui/windows/EditorBottomToolbar.cpp index 18c81a0acf..27d1d9bd7a 100644 --- a/src/openrct2-ui/windows/EditorBottomToolbar.cpp +++ b/src/openrct2-ui/windows/EditorBottomToolbar.cpp @@ -58,36 +58,12 @@ static void window_editor_bottom_toolbar_jump_forward_to_options_selection(); static void window_editor_bottom_toolbar_jump_forward_to_objective_selection(); static void window_editor_bottom_toolbar_jump_forward_to_save_scenario(); -static rct_window_event_list window_editor_bottom_toolbar_events = { - nullptr, - window_editor_bottom_toolbar_mouseup, // 0x0066f5ae, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_bottom_toolbar_invalidate, // 0x0066f1c9, - window_editor_bottom_toolbar_paint, // 0x0066f25c, - nullptr -}; +static rct_window_event_list window_editor_bottom_toolbar_events([](auto& events) +{ + events.mouse_up = &window_editor_bottom_toolbar_mouseup; + events.invalidate = &window_editor_bottom_toolbar_invalidate; + events.paint = &window_editor_bottom_toolbar_paint; +}); static EMPTY_ARGS_VOID_POINTER *previous_button_mouseup_events[] = { nullptr, diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 799309bab8..fb4e77e5f6 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -86,68 +86,28 @@ static void window_editor_inventions_list_drag_paint(rct_window *w, rct_drawpixe static std::pair window_editor_inventions_list_prepare_name(const ResearchItem * researchItem, bool withGap); // 0x0098177C -static rct_window_event_list window_editor_inventions_list_events = { - window_editor_inventions_list_close, - window_editor_inventions_list_mouseup, - window_editor_inventions_list_resize, - nullptr, - nullptr, - nullptr, - window_editor_inventions_list_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_inventions_list_scrollgetheight, - window_editor_inventions_list_scrollmousedown, - nullptr, - window_editor_inventions_list_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_inventions_list_cursor, - nullptr, - window_editor_inventions_list_invalidate, - window_editor_inventions_list_paint, - window_editor_inventions_list_scrollpaint -}; +static rct_window_event_list window_editor_inventions_list_events([](auto& events) +{ + events.close = &window_editor_inventions_list_close; + events.mouse_up = &window_editor_inventions_list_mouseup; + events.resize = &window_editor_inventions_list_resize; + events.update = &window_editor_inventions_list_update; + events.get_scroll_size = &window_editor_inventions_list_scrollgetheight; + events.scroll_mousedown = &window_editor_inventions_list_scrollmousedown; + events.scroll_mouseover = &window_editor_inventions_list_scrollmouseover; + events.cursor = &window_editor_inventions_list_cursor; + events.invalidate = &window_editor_inventions_list_invalidate; + events.paint = &window_editor_inventions_list_paint; + events.scroll_paint = &window_editor_inventions_list_scrollpaint; +}); // 0x009817EC -static rct_window_event_list window_editor_inventions_list_drag_events = { - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_inventions_list_drag_cursor, - window_editor_inventions_list_drag_moved, - nullptr, - window_editor_inventions_list_drag_paint, - nullptr -}; +static rct_window_event_list window_editor_inventions_list_drag_events([](auto& events) +{ + events.cursor = &window_editor_inventions_list_drag_cursor; + events.moved = &window_editor_inventions_list_drag_moved; + events.paint = &window_editor_inventions_list_drag_paint; +}); #pragma endregion diff --git a/src/openrct2-ui/windows/EditorMain.cpp b/src/openrct2-ui/windows/EditorMain.cpp index 12943fcb3a..c210b7ea04 100644 --- a/src/openrct2-ui/windows/EditorMain.cpp +++ b/src/openrct2-ui/windows/EditorMain.cpp @@ -17,36 +17,11 @@ static void window_editor_main_paint(rct_window* w, rct_drawpixelinfo* dpi); -static rct_window_event_list window_editor_main_events = { - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_main_paint, // 0x0066FC97, // window_editor_main_paint, - nullptr, -}; +// clang-format off +static rct_window_event_list window_editor_main_events([](auto& events) { + events.paint = &window_editor_main_paint; +}); +// clang-format on static rct_widget window_editor_main_widgets[] = { MakeWidget({ 0, 0 }, { 0, 0 }, WWT_VIEWPORT, WindowColour::Primary, STR_VIEWPORT), diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 827b2d76e0..e61b9f3714 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -186,36 +186,23 @@ static void window_editor_object_selection_paint(rct_window *w, rct_drawpixelinf static void window_editor_object_selection_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); static void window_editor_object_selection_textinput(rct_window *w, rct_widgetindex widgetIndex, char *text); -static rct_window_event_list window_editor_object_selection_events = { - window_editor_object_selection_close, - window_editor_object_selection_mouseup, - window_editor_object_selection_resize, - window_editor_object_selection_mousedown, - window_editor_object_selection_dropdown, - nullptr, - window_editor_object_selection_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_object_selection_scrollgetsize, - window_editor_object_selection_scroll_mousedown, - nullptr, - window_editor_object_selection_scroll_mouseover, - window_editor_object_selection_textinput, - nullptr, - nullptr, - window_editor_object_selection_tooltip, - nullptr, - nullptr, - window_editor_object_selection_invalidate, - window_editor_object_selection_paint, - window_editor_object_selection_scrollpaint -}; +static rct_window_event_list window_editor_object_selection_events([](auto& events) +{ + events.close = &window_editor_object_selection_close; + events.mouse_up = &window_editor_object_selection_mouseup; + events.resize = &window_editor_object_selection_resize; + events.mouse_down = &window_editor_object_selection_mousedown; + events.dropdown = &window_editor_object_selection_dropdown; + events.update = &window_editor_object_selection_update; + events.get_scroll_size = &window_editor_object_selection_scrollgetsize; + events.scroll_mousedown = &window_editor_object_selection_scroll_mousedown; + events.scroll_mouseover = &window_editor_object_selection_scroll_mouseover; + events.text_input = &window_editor_object_selection_textinput; + events.tooltip = &window_editor_object_selection_tooltip; + events.invalidate = &window_editor_object_selection_invalidate; + events.paint = &window_editor_object_selection_paint; + events.scroll_paint = &window_editor_object_selection_scrollpaint; +}); // clang-format on #pragma endregion diff --git a/src/openrct2-ui/windows/EditorObjectiveOptions.cpp b/src/openrct2-ui/windows/EditorObjectiveOptions.cpp index 8ae7bce7df..e2b25a1295 100644 --- a/src/openrct2-ui/windows/EditorObjectiveOptions.cpp +++ b/src/openrct2-ui/windows/EditorObjectiveOptions.cpp @@ -140,68 +140,31 @@ static void window_editor_objective_options_rides_paint(rct_window *w, rct_drawp static void window_editor_objective_options_rides_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); // 0x009A9DF4 -static rct_window_event_list window_objective_options_main_events = { - nullptr, - window_editor_objective_options_main_mouseup, - window_editor_objective_options_main_resize, - window_editor_objective_options_main_mousedown, - window_editor_objective_options_main_dropdown, - nullptr, - window_editor_objective_options_main_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_objective_options_main_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_objective_options_main_invalidate, - window_editor_objective_options_main_paint, - nullptr -}; +static rct_window_event_list window_objective_options_main_events([](auto& events) +{ + events.mouse_up = &window_editor_objective_options_main_mouseup; + events.resize = &window_editor_objective_options_main_resize; + events.mouse_down = &window_editor_objective_options_main_mousedown; + events.dropdown = &window_editor_objective_options_main_dropdown; + events.update = &window_editor_objective_options_main_update; + events.text_input = &window_editor_objective_options_main_textinput; + events.invalidate = &window_editor_objective_options_main_invalidate; + events.paint = &window_editor_objective_options_main_paint; +}); // 0x009A9F58 -static rct_window_event_list window_objective_options_rides_events = { - nullptr, - window_editor_objective_options_rides_mouseup, - window_editor_objective_options_rides_resize, - nullptr, - nullptr, - nullptr, - window_editor_objective_options_rides_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_objective_options_rides_scrollgetheight, - window_editor_objective_options_rides_scrollmousedown, - nullptr, - window_editor_objective_options_rides_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_objective_options_rides_invalidate, - window_editor_objective_options_rides_paint, - window_editor_objective_options_rides_scrollpaint -}; +static rct_window_event_list window_objective_options_rides_events([](auto& events) +{ + events.mouse_up = &window_editor_objective_options_rides_mouseup; + events.resize = &window_editor_objective_options_rides_resize; + events.update = &window_editor_objective_options_rides_update; + events.get_scroll_size = &window_editor_objective_options_rides_scrollgetheight; + events.scroll_mousedown = &window_editor_objective_options_rides_scrollmousedown; + events.scroll_mouseover = &window_editor_objective_options_rides_scrollmouseover; + events.invalidate = &window_editor_objective_options_rides_invalidate; + events.paint = &window_editor_objective_options_rides_paint; + events.scroll_paint = &window_editor_objective_options_rides_scrollpaint; +}); static rct_window_event_list *window_editor_objective_options_page_events[] = { &window_objective_options_main_events, diff --git a/src/openrct2-ui/windows/EditorScenarioOptions.cpp b/src/openrct2-ui/windows/EditorScenarioOptions.cpp index 05ab369875..50e7f5933d 100644 --- a/src/openrct2-ui/windows/EditorScenarioOptions.cpp +++ b/src/openrct2-ui/windows/EditorScenarioOptions.cpp @@ -201,100 +201,38 @@ static void window_editor_scenario_options_park_invalidate(rct_window *w); static void window_editor_scenario_options_park_paint(rct_window *w, rct_drawpixelinfo *dpi); // 0x0097EB60 -static rct_window_event_list window_scenario_options_financial_events = { - nullptr, - window_editor_scenario_options_financial_mouseup, - window_editor_scenario_options_financial_resize, - window_editor_scenario_options_financial_mousedown, - nullptr, - nullptr, - window_editor_scenario_options_financial_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_scenario_options_financial_invalidate, - window_editor_scenario_options_financial_paint, - nullptr -}; +static rct_window_event_list window_scenario_options_financial_events([](auto& events) +{ + events.mouse_up = &window_editor_scenario_options_financial_mouseup; + events.resize = &window_editor_scenario_options_financial_resize; + events.mouse_down = &window_editor_scenario_options_financial_mousedown; + events.update = &window_editor_scenario_options_financial_update; + events.invalidate = &window_editor_scenario_options_financial_invalidate; + events.paint = &window_editor_scenario_options_financial_paint; +}); // 0x0097EBD0 -static rct_window_event_list window_scenario_options_guests_events = { - nullptr, - window_editor_scenario_options_guests_mouseup, - window_editor_scenario_options_guests_resize, - window_editor_scenario_options_guests_mousedown, - nullptr, - nullptr, - window_editor_scenario_options_guests_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_scenario_options_guests_invalidate, - window_editor_scenario_options_guests_paint, - nullptr -}; +static rct_window_event_list window_scenario_options_guests_events([](auto& events) +{ + events.mouse_up = &window_editor_scenario_options_guests_mouseup; + events.resize = &window_editor_scenario_options_guests_resize; + events.mouse_down = &window_editor_scenario_options_guests_mousedown; + events.update = &window_editor_scenario_options_guests_update; + events.invalidate = &window_editor_scenario_options_guests_invalidate; + events.paint = &window_editor_scenario_options_guests_paint; +}); // 0x0097EC40 -static rct_window_event_list window_scenario_options_park_events = { - nullptr, - window_editor_scenario_options_park_mouseup, - window_editor_scenario_options_park_resize, - window_editor_scenario_options_park_mousedown, - window_editor_scenario_options_park_dropdown, - nullptr, - window_editor_scenario_options_park_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_editor_scenario_options_park_invalidate, - window_editor_scenario_options_park_paint, - nullptr -}; +static rct_window_event_list window_scenario_options_park_events([](auto& events) +{ + events.mouse_up = &window_editor_scenario_options_park_mouseup; + events.resize = &window_editor_scenario_options_park_resize; + events.mouse_down = &window_editor_scenario_options_park_mousedown; + events.dropdown = &window_editor_scenario_options_park_dropdown; + events.update = &window_editor_scenario_options_park_update; + events.invalidate = &window_editor_scenario_options_park_invalidate; + events.paint = &window_editor_scenario_options_park_paint; +}); static rct_window_event_list *window_editor_scenario_options_page_events[] = { &window_scenario_options_financial_events, diff --git a/src/openrct2-ui/windows/Error.cpp b/src/openrct2-ui/windows/Error.cpp index afaf352147..2483bf179d 100644 --- a/src/openrct2-ui/windows/Error.cpp +++ b/src/openrct2-ui/windows/Error.cpp @@ -30,36 +30,11 @@ static rct_widget window_error_widgets[] = { static void window_error_unknown5(rct_window *w); static void window_error_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_error_events = { - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_error_unknown5, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_error_paint, - nullptr -}; +static rct_window_event_list window_error_events([](auto& events) +{ + events.unknown_05 = &window_error_unknown5; + events.paint = &window_error_paint; +}); // clang-format on static std::string _window_error_text; diff --git a/src/openrct2-ui/windows/Finances.cpp b/src/openrct2-ui/windows/Finances.cpp index 9a5c0e7df0..8daefc6024 100644 --- a/src/openrct2-ui/windows/Finances.cpp +++ b/src/openrct2-ui/windows/Finances.cpp @@ -213,202 +213,63 @@ static void window_finances_research_invalidate(rct_window *w); static void window_finances_research_paint(rct_window *w, rct_drawpixelinfo *dpi); // 0x00988EB8 -static rct_window_event_list _windowFinancesSummaryEvents = +static rct_window_event_list _windowFinancesSummaryEvents([](auto& events) { - nullptr, - window_finances_summary_mouseup, - nullptr, - window_finances_summary_mousedown, - nullptr, - nullptr, - window_finances_summary_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_summary_scrollgetsize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_summary_invalidate, - window_finances_summary_paint, - window_finances_summary_scrollpaint -}; + events.mouse_up = &window_finances_summary_mouseup; + events.mouse_down = &window_finances_summary_mousedown; + events.update = &window_finances_summary_update; + events.get_scroll_size = &window_finances_summary_scrollgetsize; + events.invalidate = &window_finances_summary_invalidate; + events.paint = &window_finances_summary_paint; + events.scroll_paint = &window_finances_summary_scrollpaint; +}); // 0x00988F28 -static rct_window_event_list _windowFinancesFinancialGraphEvents = +static rct_window_event_list _windowFinancesFinancialGraphEvents([](auto& events) { - nullptr, - window_finances_financial_graph_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_financial_graph_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_financial_graph_invalidate, - window_finances_financial_graph_paint, - nullptr -}; + events.mouse_up = &window_finances_financial_graph_mouseup; + events.update = &window_finances_financial_graph_update; + events.invalidate = &window_finances_financial_graph_invalidate; + events.paint = &window_finances_financial_graph_paint; +}); // 0x00988F98 -static rct_window_event_list _windowFinancesValueGraphEvents = +static rct_window_event_list _windowFinancesValueGraphEvents([](auto& events) { - nullptr, - window_finances_park_value_graph_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_park_value_graph_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_park_value_graph_invalidate, - window_finances_park_value_graph_paint, - nullptr -}; + events.mouse_up = &window_finances_park_value_graph_mouseup; + events.update = &window_finances_park_value_graph_update; + events.invalidate = &window_finances_park_value_graph_invalidate; + events.paint = &window_finances_park_value_graph_paint; +}); // 0x00989008 -static rct_window_event_list _windowFinancesProfitGraphEvents = +static rct_window_event_list _windowFinancesProfitGraphEvents([](auto& events) { - nullptr, - window_finances_profit_graph_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_profit_graph_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_profit_graph_invalidate, - window_finances_profit_graph_paint, - nullptr -}; + events.mouse_up = &window_finances_profit_graph_mouseup; + events.update = &window_finances_profit_graph_update; + events.invalidate = &window_finances_profit_graph_invalidate; + events.paint = &window_finances_profit_graph_paint; +}); // 0x00989078 -static rct_window_event_list _windowFinancesMarketingEvents = +static rct_window_event_list _windowFinancesMarketingEvents([](auto& events) { - nullptr, - window_finances_marketing_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_marketing_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_marketing_invalidate, - window_finances_marketing_paint, - nullptr -}; + events.mouse_up = &window_finances_marketing_mouseup; + events.update = &window_finances_marketing_update; + events.invalidate = &window_finances_marketing_invalidate; + events.paint = &window_finances_marketing_paint; +}); // 0x009890E8 -static rct_window_event_list _windowFinancesResearchEvents = +static rct_window_event_list _windowFinancesResearchEvents([](auto& events) { - nullptr, - window_finances_research_mouseup, - nullptr, - window_finances_research_mousedown, - window_finances_research_dropdown, - nullptr, - window_finances_research_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_finances_research_invalidate, - window_finances_research_paint, - nullptr -}; + events.mouse_up = &window_finances_research_mouseup; + events.mouse_down = &window_finances_research_mousedown; + events.dropdown = &window_finances_research_dropdown; + events.update = &window_finances_research_update; + events.invalidate = &window_finances_research_invalidate; + events.paint = &window_finances_research_paint; +}); static rct_window_event_list *const _windowFinancesPageEvents[] = { diff --git a/src/openrct2-ui/windows/Footpath.cpp b/src/openrct2-ui/windows/Footpath.cpp index d310621c1c..34f5c582ef 100644 --- a/src/openrct2-ui/windows/Footpath.cpp +++ b/src/openrct2-ui/windows/Footpath.cpp @@ -112,36 +112,20 @@ static void window_footpath_toolup(rct_window * w, rct_widgetindex widgetIndex, static void window_footpath_invalidate(rct_window * w); static void window_footpath_paint(rct_window * w, rct_drawpixelinfo * dpi); -static rct_window_event_list window_footpath_events = { - window_footpath_close, - window_footpath_mouseup, - nullptr, - window_footpath_mousedown, - window_footpath_dropdown, - nullptr, - window_footpath_update, - nullptr, - nullptr, - window_footpath_toolupdate, - window_footpath_tooldown, - window_footpath_tooldrag, - window_footpath_toolup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_footpath_invalidate, - window_footpath_paint, - nullptr -}; +static rct_window_event_list window_footpath_events([](auto& events) +{ + events.close = &window_footpath_close; + events.mouse_up = &window_footpath_mouseup; + events.mouse_down = &window_footpath_mousedown; + events.dropdown = &window_footpath_dropdown; + events.update = &window_footpath_update; + events.tool_update = &window_footpath_toolupdate; + events.tool_down = &window_footpath_tooldown; + events.tool_drag = &window_footpath_tooldrag; + events.tool_up = &window_footpath_toolup; + events.invalidate = &window_footpath_invalidate; + events.paint = &window_footpath_paint; +}); // clang-format on static money32 _window_footpath_cost; diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index 857d22840d..41d8119161 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -85,37 +85,16 @@ static void window_game_bottom_toolbar_draw_middle_panel(rct_drawpixelinfo *dpi, * * rct2: 0x0097BFDC */ -static rct_window_event_list window_game_bottom_toolbar_events = +static rct_window_event_list window_game_bottom_toolbar_events([](auto& events) { - nullptr, - window_game_bottom_toolbar_mouseup, - nullptr, - nullptr, - nullptr, - window_game_bottom_toolbar_unknown05, - window_game_bottom_toolbar_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_game_bottom_toolbar_tooltip, - window_game_bottom_toolbar_cursor, - nullptr, - window_game_bottom_toolbar_invalidate, - window_game_bottom_toolbar_paint, - nullptr -}; + events.mouse_up = &window_game_bottom_toolbar_mouseup; + events.unknown_05 = &window_game_bottom_toolbar_unknown05; + events.update = &window_game_bottom_toolbar_update; + events.tooltip = &window_game_bottom_toolbar_tooltip; + events.cursor = &window_game_bottom_toolbar_cursor; + events.invalidate = &window_game_bottom_toolbar_invalidate; + events.paint = &window_game_bottom_toolbar_paint; +}); // clang-format on static void window_game_bottom_toolbar_invalidate_dirty_widgets(rct_window* w); diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index 9daecb0b1e..f17ab8e30f 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -182,222 +182,78 @@ static void window_guest_inventory_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_guest_debug_update(rct_window *w); static void window_guest_debug_paint(rct_window *w, rct_drawpixelinfo* dpi); -static rct_window_event_list window_guest_overview_events = { - window_guest_overview_close, - window_guest_overview_mouse_up, - window_guest_overview_resize, - nullptr, - nullptr, - nullptr, - window_guest_overview_update, - nullptr, - nullptr, - window_guest_overview_tool_update, - window_guest_overview_tool_down, - nullptr, - nullptr, - window_guest_overview_tool_abort, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_overview_text_input, - window_guest_overview_viewport_rotate, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_overview_invalidate, - window_guest_overview_paint, - nullptr -}; +static rct_window_event_list window_guest_overview_events([](auto& events) +{ + events.close = &window_guest_overview_close; + events.mouse_up = &window_guest_overview_mouse_up; + events.resize = &window_guest_overview_resize; + events.update = &window_guest_overview_update; + events.tool_update = &window_guest_overview_tool_update; + events.tool_down = &window_guest_overview_tool_down; + events.tool_abort = &window_guest_overview_tool_abort; + events.text_input = &window_guest_overview_text_input; + events.viewport_rotate = &window_guest_overview_viewport_rotate; + events.invalidate = &window_guest_overview_invalidate; + events.paint = &window_guest_overview_paint; +}); -static rct_window_event_list window_guest_stats_events = { - nullptr, - window_guest_mouse_up, - window_guest_common_resize, - nullptr, - nullptr, - nullptr, - window_guest_stats_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_common_invalidate, - window_guest_stats_paint, - nullptr -}; +static rct_window_event_list window_guest_stats_events([](auto& events) +{ + events.mouse_up = &window_guest_mouse_up; + events.resize = &window_guest_common_resize; + events.update = &window_guest_stats_update; + events.invalidate = &window_guest_common_invalidate; + events.paint = &window_guest_stats_paint; +}); -static rct_window_event_list window_guest_rides_events = { - nullptr, - window_guest_mouse_up, - window_guest_common_resize, - nullptr, - nullptr, - nullptr, - window_guest_rides_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_rides_scroll_get_size, - window_guest_rides_scroll_mouse_down, - nullptr, - window_guest_rides_scroll_mouse_over, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_rides_invalidate, - window_guest_rides_paint, - window_guest_rides_scroll_paint -}; +static rct_window_event_list window_guest_rides_events([](auto& events) +{ + events.mouse_up = &window_guest_mouse_up; + events.resize = &window_guest_common_resize; + events.update = &window_guest_rides_update; + events.get_scroll_size = &window_guest_rides_scroll_get_size; + events.scroll_mousedown = &window_guest_rides_scroll_mouse_down; + events.scroll_mouseover = &window_guest_rides_scroll_mouse_over; + events.invalidate = &window_guest_rides_invalidate; + events.paint = &window_guest_rides_paint; + events.scroll_paint = &window_guest_rides_scroll_paint; +}); -static rct_window_event_list window_guest_finance_events = { - nullptr, - window_guest_mouse_up, - window_guest_common_resize, - nullptr, - nullptr, - nullptr, - window_guest_finance_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_common_invalidate, - window_guest_finance_paint, - nullptr -}; +static rct_window_event_list window_guest_finance_events([](auto& events) +{ + events.mouse_up = &window_guest_mouse_up; + events.resize = &window_guest_common_resize; + events.update = &window_guest_finance_update; + events.invalidate = &window_guest_common_invalidate; + events.paint = &window_guest_finance_paint; +}); -static rct_window_event_list window_guest_thoughts_events = { - nullptr, - window_guest_mouse_up, - window_guest_common_resize, - nullptr, - nullptr, - nullptr, - window_guest_thoughts_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_common_invalidate, - window_guest_thoughts_paint, - nullptr -}; +static rct_window_event_list window_guest_thoughts_events([](auto& events) +{ + events.mouse_up = &window_guest_mouse_up; + events.resize = &window_guest_common_resize; + events.update = &window_guest_thoughts_update; + events.invalidate = &window_guest_common_invalidate; + events.paint = &window_guest_thoughts_paint; +}); -static rct_window_event_list window_guest_inventory_events = { - nullptr, - window_guest_mouse_up, - window_guest_common_resize, - nullptr, - nullptr, - nullptr, - window_guest_inventory_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_common_invalidate, - window_guest_inventory_paint, - nullptr -}; +static rct_window_event_list window_guest_inventory_events([](auto& events) +{ + events.mouse_up = &window_guest_mouse_up; + events.resize = &window_guest_common_resize; + events.update = &window_guest_inventory_update; + events.invalidate = &window_guest_common_invalidate; + events.paint = &window_guest_inventory_paint; +}); -static rct_window_event_list window_guest_debug_events = { - nullptr, - window_guest_mouse_up, - window_guest_common_resize, - nullptr, - nullptr, - nullptr, - window_guest_debug_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_common_invalidate, - window_guest_debug_paint, - nullptr -}; +static rct_window_event_list window_guest_debug_events([](auto& events) +{ + events.mouse_up = &window_guest_mouse_up; + events.resize = &window_guest_common_resize; + events.update = &window_guest_debug_update; + events.invalidate = &window_guest_common_invalidate; + events.paint = &window_guest_debug_paint; +}); // 0x981D24 static rct_window_event_list *window_guest_page_events[] = { diff --git a/src/openrct2-ui/windows/GuestList.cpp b/src/openrct2-ui/windows/GuestList.cpp index 912c8ab47a..a24f5f00ce 100644 --- a/src/openrct2-ui/windows/GuestList.cpp +++ b/src/openrct2-ui/windows/GuestList.cpp @@ -102,36 +102,21 @@ static void window_guest_list_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_guest_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); static void window_guest_list_textinput(rct_window *w, rct_widgetindex widgetIndex, char *text); -static rct_window_event_list window_guest_list_events = { - nullptr, - window_guest_list_mouseup, - window_guest_list_resize, - window_guest_list_mousedown, - window_guest_list_dropdown, - nullptr, - window_guest_list_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_list_scrollgetsize, - window_guest_list_scrollmousedown, - nullptr, - window_guest_list_scrollmouseover, - window_guest_list_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_guest_list_invalidate, - window_guest_list_paint, - window_guest_list_scrollpaint -}; +static rct_window_event_list window_guest_list_events([](auto& events) +{ + events.mouse_up = &window_guest_list_mouseup; + events.resize = &window_guest_list_resize; + events.mouse_down = &window_guest_list_mousedown; + events.dropdown = &window_guest_list_dropdown; + events.update = &window_guest_list_update; + events.get_scroll_size = &window_guest_list_scrollgetsize; + events.scroll_mousedown = &window_guest_list_scrollmousedown; + events.scroll_mouseover = &window_guest_list_scrollmouseover; + events.text_input = &window_guest_list_textinput; + events.invalidate = &window_guest_list_invalidate; + events.paint = &window_guest_list_paint; + events.scroll_paint = &window_guest_list_scrollpaint; +}); // clang-format on struct FilterArguments diff --git a/src/openrct2-ui/windows/InstallTrack.cpp b/src/openrct2-ui/windows/InstallTrack.cpp index 5910330865..aa1ad8a8d0 100644 --- a/src/openrct2-ui/windows/InstallTrack.cpp +++ b/src/openrct2-ui/windows/InstallTrack.cpp @@ -57,36 +57,14 @@ static void window_install_track_invalidate(rct_window *w); static void window_install_track_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_install_track_text_input(rct_window *w, rct_widgetindex widgetIndex, char *text); -static rct_window_event_list window_install_track_events = { - window_install_track_close, - window_install_track_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_install_track_text_input, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_install_track_invalidate, - window_install_track_paint, - nullptr -}; +static rct_window_event_list window_install_track_events([](auto& events) +{ + events.close = &window_install_track_close; + events.mouse_up = &window_install_track_mouseup; + events.text_input = &window_install_track_text_input; + events.invalidate = &window_install_track_invalidate; + events.paint = &window_install_track_paint; +}); // clang-format on static std::unique_ptr _trackDesign; diff --git a/src/openrct2-ui/windows/Land.cpp b/src/openrct2-ui/windows/Land.cpp index a551f4253a..821dac2ddd 100644 --- a/src/openrct2-ui/windows/Land.cpp +++ b/src/openrct2-ui/windows/Land.cpp @@ -63,36 +63,17 @@ static void window_land_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_land_textinput(rct_window *w, rct_widgetindex widgetIndex, char *text); static void window_land_inputsize(rct_window *w); -static rct_window_event_list window_land_events = { - window_land_close, - window_land_mouseup, - nullptr, - window_land_mousedown, - window_land_dropdown, - nullptr, - window_land_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_land_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_land_invalidate, - window_land_paint, - nullptr -}; +static rct_window_event_list window_land_events([](auto& events) +{ + events.close = &window_land_close; + events.mouse_up = &window_land_mouseup; + events.mouse_down = &window_land_mousedown; + events.dropdown = &window_land_dropdown; + events.update = &window_land_update; + events.text_input = &window_land_textinput; + events.invalidate = &window_land_invalidate; + events.paint = &window_land_paint; +}); // clang-format on static int32_t _selectedFloorTexture; diff --git a/src/openrct2-ui/windows/LandRights.cpp b/src/openrct2-ui/windows/LandRights.cpp index 17e2888f62..0e123d2026 100644 --- a/src/openrct2-ui/windows/LandRights.cpp +++ b/src/openrct2-ui/windows/LandRights.cpp @@ -61,36 +61,20 @@ static void window_land_rights_toolabort(rct_window *w, rct_widgetindex widgetIn static bool land_rights_tool_is_active(); -static rct_window_event_list window_land_rights_events = { - window_land_rights_close, - window_land_rights_mouseup, - nullptr, - window_land_rights_mousedown, - nullptr, - nullptr, - window_land_rights_update, - nullptr, - nullptr, - window_land_rights_toolupdate, - window_land_rights_tooldown, - window_land_rights_tooldrag, - nullptr, - window_land_rights_toolabort, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_land_rights_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_land_rights_invalidate, - window_land_rights_paint, - nullptr -}; +static rct_window_event_list window_land_rights_events([](auto& events) +{ + events.close = &window_land_rights_close; + events.mouse_up = &window_land_rights_mouseup; + events.mouse_down = &window_land_rights_mousedown; + events.update = &window_land_rights_update; + events.tool_update = &window_land_rights_toolupdate; + events.tool_down = &window_land_rights_tooldown; + events.tool_drag = &window_land_rights_tooldrag; + events.tool_abort = &window_land_rights_toolabort; + events.text_input = &window_land_rights_textinput; + events.invalidate = &window_land_rights_invalidate; + events.paint = &window_land_rights_paint; +}); // clang-format on constexpr uint8_t LAND_RIGHTS_MODE_BUY_CONSTRUCTION_RIGHTS = 0; diff --git a/src/openrct2-ui/windows/LoadSave.cpp b/src/openrct2-ui/windows/LoadSave.cpp index 7e1a303aa3..3da867ee55 100644 --- a/src/openrct2-ui/windows/LoadSave.cpp +++ b/src/openrct2-ui/windows/LoadSave.cpp @@ -91,37 +91,19 @@ static void window_loadsave_invalidate(rct_window *w); static void window_loadsave_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_loadsave_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_loadsave_events = +static rct_window_event_list window_loadsave_events([](auto& events) { - window_loadsave_close, - window_loadsave_mouseup, - window_loadsave_resize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_loadsave_scrollgetsize, - window_loadsave_scrollmousedown, - nullptr, - window_loadsave_scrollmouseover, - window_loadsave_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_loadsave_invalidate, - window_loadsave_paint, - window_loadsave_scrollpaint -}; + events.close = &window_loadsave_close; + events.mouse_up = &window_loadsave_mouseup; + events.resize = &window_loadsave_resize; + events.get_scroll_size = &window_loadsave_scrollgetsize; + events.scroll_mousedown = &window_loadsave_scrollmousedown; + events.scroll_mouseover = &window_loadsave_scrollmouseover; + events.text_input = &window_loadsave_textinput; + events.invalidate = &window_loadsave_invalidate; + events.paint = &window_loadsave_paint; + events.scroll_paint = &window_loadsave_scrollpaint; +}); // clang-format on #pragma endregion @@ -1159,36 +1141,10 @@ static rct_widget window_overwrite_prompt_widgets[] = { static void window_overwrite_prompt_mouseup(rct_window* w, rct_widgetindex widgetIndex); static void window_overwrite_prompt_paint(rct_window* w, rct_drawpixelinfo* dpi); -static rct_window_event_list window_overwrite_prompt_events = { - nullptr, - window_overwrite_prompt_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_overwrite_prompt_paint, - nullptr, -}; +static rct_window_event_list window_overwrite_prompt_events([](auto& events) { + events.mouse_up = &window_overwrite_prompt_mouseup; + events.paint = &window_overwrite_prompt_paint; +}); static char _window_overwrite_prompt_name[256]; static char _window_overwrite_prompt_path[MAX_PATH]; diff --git a/src/openrct2-ui/windows/Main.cpp b/src/openrct2-ui/windows/Main.cpp index 68ec0c7b22..f98b5530a7 100644 --- a/src/openrct2-ui/windows/Main.cpp +++ b/src/openrct2-ui/windows/Main.cpp @@ -23,36 +23,10 @@ static rct_widget window_main_widgets[] = { void window_main_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_main_events = { - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_main_paint, - nullptr -}; +static rct_window_event_list window_main_events([](auto& events) +{ + events.paint = &window_main_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp index 5b1a9cb2ce..0eede9f5cf 100644 --- a/src/openrct2-ui/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -138,36 +138,25 @@ static void window_map_invalidate(rct_window *w); static void window_map_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_map_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_map_events = { - window_map_close, - window_map_mouseup, - window_map_resize, - window_map_mousedown, - nullptr, - nullptr, - window_map_update, - nullptr, - nullptr, - window_map_toolupdate, - window_map_tooldown, - window_map_tooldrag, - nullptr, - window_map_toolabort, - nullptr, - window_map_scrollgetsize, - window_map_scrollmousedown, - window_map_scrollmousedown, - nullptr, - window_map_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_map_invalidate, - window_map_paint, - window_map_scrollpaint -}; +static rct_window_event_list window_map_events([](auto& events) +{ + events.close = &window_map_close; + events.mouse_up = &window_map_mouseup; + events.resize = &window_map_resize; + events.mouse_down = &window_map_mousedown; + events.update = &window_map_update; + events.tool_update = &window_map_toolupdate; + events.tool_down = &window_map_tooldown; + events.tool_drag = &window_map_tooldrag; + events.tool_abort = &window_map_toolabort; + events.get_scroll_size = &window_map_scrollgetsize; + events.scroll_mousedown = &window_map_scrollmousedown; + events.scroll_mousedrag = &window_map_scrollmousedown; + events.text_input = &window_map_textinput; + events.invalidate = &window_map_invalidate; + events.paint = &window_map_paint; + events.scroll_paint = &window_map_scrollpaint; +}); // clang-format on /** rct2: 0x00F1AD61 */ diff --git a/src/openrct2-ui/windows/MapGen.cpp b/src/openrct2-ui/windows/MapGen.cpp index 4eb8945d9b..4edc937aaa 100644 --- a/src/openrct2-ui/windows/MapGen.cpp +++ b/src/openrct2-ui/windows/MapGen.cpp @@ -211,129 +211,48 @@ static void window_mapgen_heightmap_mousedown(rct_window *w, rct_widgetindex wid static void window_mapgen_heightmap_invalidate(rct_window *w); static void window_mapgen_heightmap_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list BaseEvents = { - window_mapgen_shared_close, - window_mapgen_base_mouseup, - nullptr, - window_mapgen_base_mousedown, - window_mapgen_base_dropdown, - nullptr, - window_mapgen_base_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_mapgen_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_mapgen_base_invalidate, - window_mapgen_base_paint, - nullptr -}; +static rct_window_event_list BaseEvents([](auto& events) +{ + events.close = &window_mapgen_shared_close; + events.mouse_up = &window_mapgen_base_mouseup; + events.mouse_down = &window_mapgen_base_mousedown; + events.dropdown = &window_mapgen_base_dropdown; + events.update = &window_mapgen_base_update; + events.text_input = &window_mapgen_textinput; + events.invalidate = &window_mapgen_base_invalidate; + events.paint = &window_mapgen_base_paint; +}); -static rct_window_event_list RandomEvents = { - window_mapgen_shared_close, - window_mapgen_random_mouseup, - nullptr, - window_mapgen_random_mousedown, - nullptr, - nullptr, - window_mapgen_random_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_mapgen_random_invalidate, - window_mapgen_random_paint, - nullptr -}; +static rct_window_event_list RandomEvents([](auto& events) +{ + events.close = &window_mapgen_shared_close; + events.mouse_up = &window_mapgen_random_mouseup; + events.mouse_down = &window_mapgen_random_mousedown; + events.update = &window_mapgen_random_update; + events.invalidate = &window_mapgen_random_invalidate; + events.paint = &window_mapgen_random_paint; +}); -static rct_window_event_list SimplexEvents = { - window_mapgen_shared_close, - window_mapgen_simplex_mouseup, - nullptr, - window_mapgen_simplex_mousedown, - window_mapgen_simplex_dropdown, - nullptr, - window_mapgen_simplex_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_mapgen_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_mapgen_simplex_invalidate, - window_mapgen_simplex_paint, - nullptr -}; +static rct_window_event_list SimplexEvents([](auto& events) +{ + events.close = &window_mapgen_shared_close; + events.mouse_up = &window_mapgen_simplex_mouseup; + events.mouse_down = &window_mapgen_simplex_mousedown; + events.dropdown = &window_mapgen_simplex_dropdown; + events.update = &window_mapgen_simplex_update; + events.text_input = &window_mapgen_textinput; + events.invalidate = &window_mapgen_simplex_invalidate; + events.paint = &window_mapgen_simplex_paint; +}); -static rct_window_event_list HeightmapEvents = { - window_mapgen_shared_close, - window_mapgen_heightmap_mouseup, - nullptr, - window_mapgen_heightmap_mousedown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_mapgen_heightmap_invalidate, - window_mapgen_heightmap_paint, - nullptr -}; +static rct_window_event_list HeightmapEvents([](auto& events) +{ + events.close = &window_mapgen_shared_close; + events.mouse_up = &window_mapgen_heightmap_mouseup; + events.mouse_down = &window_mapgen_heightmap_mousedown; + events.invalidate = &window_mapgen_heightmap_invalidate; + events.paint = &window_mapgen_heightmap_paint; +}); static rct_window_event_list *PageEvents[] = { &BaseEvents, diff --git a/src/openrct2-ui/windows/MapTooltip.cpp b/src/openrct2-ui/windows/MapTooltip.cpp index 2be36ff532..0f094637a8 100644 --- a/src/openrct2-ui/windows/MapTooltip.cpp +++ b/src/openrct2-ui/windows/MapTooltip.cpp @@ -25,36 +25,11 @@ static rct_widget window_map_tooltip_widgets[] = { static void window_map_tooltip_update(rct_window *w); static void window_map_tooltip_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_map_tooltip_events = { - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_map_tooltip_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_map_tooltip_paint, - nullptr -}; +static rct_window_event_list window_map_tooltip_events([](auto& events) +{ + events.update = &window_map_tooltip_update; + events.paint = &window_map_tooltip_paint; +}); // clang-format on #define MAP_TOOLTIP_ARGS diff --git a/src/openrct2-ui/windows/MazeConstruction.cpp b/src/openrct2-ui/windows/MazeConstruction.cpp index 362b92cd9d..6ba336fa6b 100644 --- a/src/openrct2-ui/windows/MazeConstruction.cpp +++ b/src/openrct2-ui/windows/MazeConstruction.cpp @@ -96,36 +96,18 @@ static void window_maze_construction_invalidate(rct_window *w); static void window_maze_construction_paint(rct_window *w, rct_drawpixelinfo *dpi); // 0x993F6C -static rct_window_event_list window_maze_construction_events = { - window_maze_construction_close, - window_maze_construction_mouseup, - window_maze_construction_resize, - window_maze_construction_mousedown, - nullptr, - nullptr, - window_maze_construction_update, - nullptr, - nullptr, - window_maze_construction_toolupdate, - window_maze_construction_tooldown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_maze_construction_invalidate, - window_maze_construction_paint, - nullptr -}; +static rct_window_event_list window_maze_construction_events([](auto& events) +{ + events.close = &window_maze_construction_close; + events.mouse_up = &window_maze_construction_mouseup; + events.resize = &window_maze_construction_resize; + events.mouse_down = &window_maze_construction_mousedown; + events.update = &window_maze_construction_update; + events.tool_update = &window_maze_construction_toolupdate; + events.tool_down = &window_maze_construction_tooldown; + events.invalidate = &window_maze_construction_invalidate; + events.paint = &window_maze_construction_paint; +}); // clang-format on #pragma endregion diff --git a/src/openrct2-ui/windows/Multiplayer.cpp b/src/openrct2-ui/windows/Multiplayer.cpp index 4ff29a729c..07119f0e3f 100644 --- a/src/openrct2-ui/windows/Multiplayer.cpp +++ b/src/openrct2-ui/windows/Multiplayer.cpp @@ -161,129 +161,52 @@ static void window_multiplayer_options_update(rct_window *w); static void window_multiplayer_options_invalidate(rct_window *w); static void window_multiplayer_options_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_multiplayer_information_events = { - nullptr, - window_multiplayer_information_mouseup, - window_multiplayer_information_resize, - nullptr, - nullptr, - nullptr, - window_multiplayer_information_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_multiplayer_information_invalidate, - window_multiplayer_information_paint, - nullptr -}; +static rct_window_event_list window_multiplayer_information_events([](auto& events) +{ + events.mouse_up = &window_multiplayer_information_mouseup; + events.resize = &window_multiplayer_information_resize; + events.update = &window_multiplayer_information_update; + events.invalidate = &window_multiplayer_information_invalidate; + events.paint = &window_multiplayer_information_paint; +}); -static rct_window_event_list window_multiplayer_players_events = { - nullptr, - window_multiplayer_players_mouseup, - window_multiplayer_players_resize, - nullptr, - nullptr, - nullptr, - window_multiplayer_players_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_multiplayer_players_scrollgetsize, - window_multiplayer_players_scrollmousedown, - nullptr, - window_multiplayer_players_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_multiplayer_players_invalidate, - window_multiplayer_players_paint, - window_multiplayer_players_scrollpaint -}; +static rct_window_event_list window_multiplayer_players_events([](auto& events) +{ + events.mouse_up = &window_multiplayer_players_mouseup; + events.resize = &window_multiplayer_players_resize; + events.update = &window_multiplayer_players_update; + events.get_scroll_size = &window_multiplayer_players_scrollgetsize; + events.scroll_mousedown = &window_multiplayer_players_scrollmousedown; + events.scroll_mouseover = &window_multiplayer_players_scrollmouseover; + events.invalidate = &window_multiplayer_players_invalidate; + events.paint = &window_multiplayer_players_paint; + events.scroll_paint = &window_multiplayer_players_scrollpaint; +}); -static rct_window_event_list window_multiplayer_groups_events = { - nullptr, - window_multiplayer_groups_mouseup, - window_multiplayer_groups_resize, - window_multiplayer_groups_mousedown, - window_multiplayer_groups_dropdown, - nullptr, - window_multiplayer_groups_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_multiplayer_groups_scrollgetsize, - window_multiplayer_groups_scrollmousedown, - nullptr, - window_multiplayer_groups_scrollmouseover, - window_multiplayer_groups_text_input, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_multiplayer_groups_invalidate, - window_multiplayer_groups_paint, - window_multiplayer_groups_scrollpaint -}; +static rct_window_event_list window_multiplayer_groups_events([](auto& events) +{ + events.mouse_up = &window_multiplayer_groups_mouseup; + events.resize = &window_multiplayer_groups_resize; + events.mouse_down = &window_multiplayer_groups_mousedown; + events.dropdown = &window_multiplayer_groups_dropdown; + events.update = &window_multiplayer_groups_update; + events.get_scroll_size = &window_multiplayer_groups_scrollgetsize; + events.scroll_mousedown = &window_multiplayer_groups_scrollmousedown; + events.scroll_mouseover = &window_multiplayer_groups_scrollmouseover; + events.text_input = &window_multiplayer_groups_text_input; + events.invalidate = &window_multiplayer_groups_invalidate; + events.paint = &window_multiplayer_groups_paint; + events.scroll_paint = &window_multiplayer_groups_scrollpaint; +}); -static rct_window_event_list window_multiplayer_options_events = { - nullptr, - window_multiplayer_options_mouseup, - window_multiplayer_options_resize, - nullptr, - nullptr, - nullptr, - window_multiplayer_options_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_multiplayer_options_invalidate, - window_multiplayer_options_paint, - nullptr -}; +static rct_window_event_list window_multiplayer_options_events([](auto& events) +{ + events.mouse_up = &window_multiplayer_options_mouseup; + events.resize = &window_multiplayer_options_resize; + events.update = &window_multiplayer_options_update; + events.invalidate = &window_multiplayer_options_invalidate; + events.paint = &window_multiplayer_options_paint; +}); static rct_window_event_list *window_multiplayer_page_events[] = { &window_multiplayer_information_events, diff --git a/src/openrct2-ui/windows/MusicCredits.cpp b/src/openrct2-ui/windows/MusicCredits.cpp index 4404887900..05b3a1ec5c 100644 --- a/src/openrct2-ui/windows/MusicCredits.cpp +++ b/src/openrct2-ui/windows/MusicCredits.cpp @@ -84,36 +84,13 @@ static void window_music_credits_scrollgetsize(rct_window *w, int32_t scrollInde static void window_music_credits_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_music_credits_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_music_credits_events = { - nullptr, - window_music_credits_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_music_credits_scrollgetsize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_music_credits_paint, - window_music_credits_scrollpaint -}; +static rct_window_event_list window_music_credits_events([](auto& events) +{ + events.mouse_up = &window_music_credits_mouseup; + events.get_scroll_size = &window_music_credits_scrollgetsize; + events.paint = &window_music_credits_paint; + events.scroll_paint = &window_music_credits_scrollpaint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/Network.cpp b/src/openrct2-ui/windows/Network.cpp index 62c51ab230..312ee04cdc 100644 --- a/src/openrct2-ui/windows/Network.cpp +++ b/src/openrct2-ui/windows/Network.cpp @@ -99,36 +99,14 @@ static constexpr int32_t NetworkTrafficGroupNames[NETWORK_STATISTICS_GROUP_MAX] STR_NETWORK_LEGEND_MAPDATA, }; -static rct_window_event_list window_network_information_events = { - nullptr, - window_network_information_mouseup, - window_network_information_resize, - nullptr, - nullptr, - nullptr, - window_network_information_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_network_information_invalidate, - window_network_information_paint, - nullptr -}; +static rct_window_event_list window_network_information_events([](auto& events) +{ + events.mouse_up = &window_network_information_mouseup; + events.resize = &window_network_information_resize; + events.update = &window_network_information_update; + events.invalidate = &window_network_information_invalidate; + events.paint = &window_network_information_paint; +}); static rct_window_event_list *window_network_page_events[] = { &window_network_information_events, diff --git a/src/openrct2-ui/windows/NetworkStatus.cpp b/src/openrct2-ui/windows/NetworkStatus.cpp index c30bb03da5..fbc712c9b9 100644 --- a/src/openrct2-ui/windows/NetworkStatus.cpp +++ b/src/openrct2-ui/windows/NetworkStatus.cpp @@ -40,36 +40,15 @@ static void window_network_status_textinput(rct_window *w, rct_widgetindex widge static void window_network_status_invalidate(rct_window *w); static void window_network_status_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_network_status_events = { - window_network_status_onclose, - window_network_status_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_network_status_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_network_status_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_network_status_invalidate, - window_network_status_paint, - nullptr -}; +static rct_window_event_list window_network_status_events([](auto& events) +{ + events.close = &window_network_status_onclose; + events.mouse_up = &window_network_status_mouseup; + events.update = &window_network_status_update; + events.text_input = &window_network_status_textinput; + events.invalidate = &window_network_status_invalidate; + events.paint = &window_network_status_paint; +}); // clang-format on static close_callback _onClose = nullptr; diff --git a/src/openrct2-ui/windows/NewCampaign.cpp b/src/openrct2-ui/windows/NewCampaign.cpp index 21570b43c3..e6e127455e 100644 --- a/src/openrct2-ui/windows/NewCampaign.cpp +++ b/src/openrct2-ui/windows/NewCampaign.cpp @@ -58,36 +58,14 @@ static void window_new_campaign_dropdown(rct_window *w, rct_widgetindex widgetIn static void window_new_campaign_invalidate(rct_window *w); static void window_new_campaign_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_new_campaign_events = { - nullptr, - window_new_campaign_mouseup, - nullptr, - window_new_campaign_mousedown, - window_new_campaign_dropdown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_new_campaign_invalidate, - window_new_campaign_paint, - nullptr -}; +static rct_window_event_list window_new_campaign_events([](auto& events) +{ + events.mouse_up = &window_new_campaign_mouseup; + events.mouse_down = &window_new_campaign_mousedown; + events.dropdown = &window_new_campaign_dropdown; + events.invalidate = &window_new_campaign_invalidate; + events.paint = &window_new_campaign_paint; +}); // clang-format on static std::vector window_new_campaign_rides; diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index 7bf0b18fd1..1bd39ad04b 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -219,36 +219,18 @@ static void window_new_ride_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, i static void window_new_ride_list_vehicles_for(uint8_t rideType, const rct_ride_entry* rideEntry, char* buffer, size_t bufferLen); // 0x0098E354 -static rct_window_event_list window_new_ride_events = { - nullptr, - window_new_ride_mouseup, - nullptr, - window_new_ride_mousedown, - nullptr, - nullptr, - window_new_ride_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_new_ride_scrollgetsize, - window_new_ride_scrollmousedown, - nullptr, - window_new_ride_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_new_ride_invalidate, - window_new_ride_paint, - window_new_ride_scrollpaint -}; +static rct_window_event_list window_new_ride_events([](auto& events) +{ + events.mouse_up = &window_new_ride_mouseup; + events.mouse_down = &window_new_ride_mousedown; + events.update = &window_new_ride_update; + events.get_scroll_size = &window_new_ride_scrollgetsize; + events.scroll_mousedown = &window_new_ride_scrollmousedown; + events.scroll_mouseover = &window_new_ride_scrollmouseover; + events.invalidate = &window_new_ride_invalidate; + events.paint = &window_new_ride_paint; + events.scroll_paint = &window_new_ride_scrollpaint; +}); #pragma endregion diff --git a/src/openrct2-ui/windows/News.cpp b/src/openrct2-ui/windows/News.cpp index cba2f3f139..0e0b1f5fd5 100644 --- a/src/openrct2-ui/windows/News.cpp +++ b/src/openrct2-ui/windows/News.cpp @@ -46,36 +46,15 @@ static void window_news_scrollmousedown(rct_window *w, int32_t scrollIndex, cons static void window_news_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_news_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_news_events = { - nullptr, - window_news_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_news_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_news_scrollgetsize, - window_news_scrollmousedown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_news_paint, - window_news_scrollpaint -}; +static rct_window_event_list window_news_events([](auto& events) +{ + events.mouse_up = &window_news_mouseup; + events.update = &window_news_update; + events.get_scroll_size = &window_news_scrollgetsize; + events.scroll_mousedown = &window_news_scrollmousedown; + events.paint = &window_news_paint; + events.scroll_paint = &window_news_scrollpaint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/NewsOptions.cpp b/src/openrct2-ui/windows/NewsOptions.cpp index f54227d23c..06e8048f3c 100644 --- a/src/openrct2-ui/windows/NewsOptions.cpp +++ b/src/openrct2-ui/windows/NewsOptions.cpp @@ -88,36 +88,13 @@ static void window_news_options_update(rct_window *w); static void window_news_options_invalidate(rct_window *w); static void window_news_options_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_news_options_events = { - nullptr, - window_news_options_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_news_options_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_news_options_invalidate, - window_news_options_paint, - nullptr -}; +static rct_window_event_list window_news_options_events([](auto& events) +{ + events.mouse_up = &window_news_options_mouseup; + events.update = &window_news_options_update; + events.invalidate = &window_news_options_invalidate; + events.paint = &window_news_options_paint; +}); // clang-format on static void window_news_options_set_page(rct_window* w, int32_t page); diff --git a/src/openrct2-ui/windows/ObjectLoadError.cpp b/src/openrct2-ui/windows/ObjectLoadError.cpp index ecca89381a..036fdd4261 100644 --- a/src/openrct2-ui/windows/ObjectLoadError.cpp +++ b/src/openrct2-ui/windows/ObjectLoadError.cpp @@ -295,36 +295,17 @@ static void window_object_load_error_download_all(rct_window* w); static void window_object_load_error_update_list(rct_window* w); #endif -static rct_window_event_list window_object_load_error_events = { - window_object_load_error_close, - window_object_load_error_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_object_load_error_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_object_load_error_scrollgetsize, - window_object_load_error_scrollmousedown, - nullptr, - window_object_load_error_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_object_load_error_paint, - window_object_load_error_scrollpaint -}; +static rct_window_event_list window_object_load_error_events([](auto& events) +{ + events.close = &window_object_load_error_close; + events.mouse_up = &window_object_load_error_mouseup; + events.update = &window_object_load_error_update; + events.get_scroll_size = &window_object_load_error_scrollgetsize; + events.scroll_mousedown = &window_object_load_error_scrollmousedown; + events.scroll_mouseover = &window_object_load_error_scrollmouseover; + events.paint = &window_object_load_error_paint; + events.scroll_paint = &window_object_load_error_scrollpaint; +}); // clang-format on static std::vector _invalid_entries; diff --git a/src/openrct2-ui/windows/Options.cpp b/src/openrct2-ui/windows/Options.cpp index 6734a6c84b..0c99fac51d 100644 --- a/src/openrct2-ui/windows/Options.cpp +++ b/src/openrct2-ui/windows/Options.cpp @@ -434,36 +434,17 @@ static void window_options_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_options_scrollgetsize(rct_window *w, int32_t scrollIndex, int32_t *width, int32_t *height); static void window_options_tooltip(rct_window *w, rct_widgetindex widgetIndex, rct_string_id *stringid); -static rct_window_event_list window_options_events = { - nullptr, - window_options_mouseup, - nullptr, - window_options_mousedown, - window_options_dropdown, - nullptr, - window_options_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_options_scrollgetsize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_options_tooltip, - nullptr, - nullptr, - window_options_invalidate, - window_options_paint, - nullptr -}; +static rct_window_event_list window_options_events([](auto& events) +{ + events.mouse_up = &window_options_mouseup; + events.mouse_down = &window_options_mousedown; + events.dropdown = &window_options_dropdown; + events.update = &window_options_update; + events.get_scroll_size = &window_options_scrollgetsize; + events.tooltip = &window_options_tooltip; + events.invalidate = &window_options_invalidate; + events.paint = &window_options_paint; +}); #pragma endregion diff --git a/src/openrct2-ui/windows/Park.cpp b/src/openrct2-ui/windows/Park.cpp index be8674815d..329e48e374 100644 --- a/src/openrct2-ui/windows/Park.cpp +++ b/src/openrct2-ui/windows/Park.cpp @@ -197,222 +197,74 @@ static void window_park_awards_update(rct_window *w); static void window_park_awards_invalidate(rct_window *w); static void window_park_awards_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_park_entrance_events = { - window_park_entrance_close, - window_park_entrance_mouseup, - window_park_entrance_resize, - window_park_entrance_mousedown, - window_park_entrance_dropdown, - nullptr, - window_park_entrance_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_entrance_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_entrance_invalidate, - window_park_entrance_paint, - nullptr -}; +static rct_window_event_list window_park_entrance_events([](auto& events) +{ + events.close = &window_park_entrance_close; + events.mouse_up = &window_park_entrance_mouseup; + events.resize = &window_park_entrance_resize; + events.mouse_down = &window_park_entrance_mousedown; + events.dropdown = &window_park_entrance_dropdown; + events.update = &window_park_entrance_update; + events.text_input = &window_park_entrance_textinput; + events.invalidate = &window_park_entrance_invalidate; + events.paint = &window_park_entrance_paint; +}); -static rct_window_event_list window_park_rating_events = { - nullptr, - window_park_rating_mouseup, - window_park_rating_resize, - nullptr, - nullptr, - nullptr, - window_park_rating_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_rating_invalidate, - window_park_rating_paint, - nullptr -}; +static rct_window_event_list window_park_rating_events([](auto& events) +{ + events.mouse_up = &window_park_rating_mouseup; + events.resize = &window_park_rating_resize; + events.update = &window_park_rating_update; + events.invalidate = &window_park_rating_invalidate; + events.paint = &window_park_rating_paint; +}); -static rct_window_event_list window_park_guests_events = { - nullptr, - window_park_guests_mouseup, - window_park_guests_resize, - nullptr, - nullptr, - nullptr, - window_park_guests_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_guests_invalidate, - window_park_guests_paint, - nullptr -}; +static rct_window_event_list window_park_guests_events([](auto& events) +{ + events.mouse_up = &window_park_guests_mouseup; + events.resize = &window_park_guests_resize; + events.update = &window_park_guests_update; + events.invalidate = &window_park_guests_invalidate; + events.paint = &window_park_guests_paint; +}); -static rct_window_event_list window_park_price_events = { - nullptr, - window_park_price_mouseup, - window_park_price_resize, - window_park_price_mousedown, - nullptr, - nullptr, - window_park_price_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_price_invalidate, - window_park_price_paint, - nullptr -}; +static rct_window_event_list window_park_price_events([](auto& events) +{ + events.mouse_up = &window_park_price_mouseup; + events.resize = &window_park_price_resize; + events.mouse_down = &window_park_price_mousedown; + events.update = &window_park_price_update; + events.invalidate = &window_park_price_invalidate; + events.paint = &window_park_price_paint; +}); -static rct_window_event_list window_park_stats_events = { - nullptr, - window_park_stats_mouseup, - window_park_stats_resize, - nullptr, - nullptr, - nullptr, - window_park_stats_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_stats_invalidate, - window_park_stats_paint, - nullptr -}; +static rct_window_event_list window_park_stats_events([](auto& events) +{ + events.mouse_up = &window_park_stats_mouseup; + events.resize = &window_park_stats_resize; + events.update = &window_park_stats_update; + events.invalidate = &window_park_stats_invalidate; + events.paint = &window_park_stats_paint; +}); -static rct_window_event_list window_park_objective_events = { - nullptr, - window_park_objective_mouseup, - window_park_objective_resize, - nullptr, - nullptr, - nullptr, - window_park_objective_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_objective_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_objective_invalidate, - window_park_objective_paint, - nullptr -}; +static rct_window_event_list window_park_objective_events([](auto& events) +{ + events.mouse_up = &window_park_objective_mouseup; + events.resize = &window_park_objective_resize; + events.update = &window_park_objective_update; + events.text_input = &window_park_objective_textinput; + events.invalidate = &window_park_objective_invalidate; + events.paint = &window_park_objective_paint; +}); -static rct_window_event_list window_park_awards_events = { - nullptr, - window_park_awards_mouseup, - window_park_awards_resize, - nullptr, - nullptr, - nullptr, - window_park_awards_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_park_awards_invalidate, - window_park_awards_paint, - nullptr -}; +static rct_window_event_list window_park_awards_events([](auto& events) +{ + events.mouse_up = &window_park_awards_mouseup; + events.resize = &window_park_awards_resize; + events.update = &window_park_awards_update; + events.invalidate = &window_park_awards_invalidate; + events.paint = &window_park_awards_paint; +}); static rct_window_event_list *window_park_page_events[] = { &window_park_entrance_events, diff --git a/src/openrct2-ui/windows/Player.cpp b/src/openrct2-ui/windows/Player.cpp index b40b87f2e7..a0356f5537 100644 --- a/src/openrct2-ui/windows/Player.cpp +++ b/src/openrct2-ui/windows/Player.cpp @@ -88,36 +88,17 @@ static void window_player_overview_update(rct_window* w); static void window_player_overview_invalidate(rct_window *w); static void window_player_overview_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_player_overview_events = { - window_player_overview_close, - window_player_overview_mouse_up, - window_player_overview_resize, - window_player_overview_mouse_down, - window_player_overview_dropdown, - nullptr, - window_player_overview_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_player_overview_invalidate, - window_player_overview_paint, - nullptr -}; +static rct_window_event_list window_player_overview_events([](auto& events) +{ + events.close = &window_player_overview_close; + events.mouse_up = &window_player_overview_mouse_up; + events.resize = &window_player_overview_resize; + events.mouse_down = &window_player_overview_mouse_down; + events.dropdown = &window_player_overview_dropdown; + events.update = &window_player_overview_update; + events.invalidate = &window_player_overview_invalidate; + events.paint = &window_player_overview_paint; +}); static void window_player_statistics_close(rct_window *w); static void window_player_statistics_mouse_up(rct_window *w, rct_widgetindex widgetIndex); @@ -126,36 +107,15 @@ static void window_player_statistics_update(rct_window* w); static void window_player_statistics_invalidate(rct_window *w); static void window_player_statistics_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_player_statistics_events = { - window_player_statistics_close, - window_player_statistics_mouse_up, - window_player_statistics_resize, - nullptr, - nullptr, - nullptr, - window_player_statistics_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_player_statistics_invalidate, - window_player_statistics_paint, - nullptr -}; +static rct_window_event_list window_player_statistics_events([](auto& events) +{ + events.close = &window_player_statistics_close; + events.mouse_up = &window_player_statistics_mouse_up; + events.resize = &window_player_statistics_resize; + events.update = &window_player_statistics_update; + events.invalidate = &window_player_statistics_invalidate; + events.paint = &window_player_statistics_paint; +}); static rct_window_event_list *window_player_page_events[] = { &window_player_overview_events, diff --git a/src/openrct2-ui/windows/Research.cpp b/src/openrct2-ui/windows/Research.cpp index 6e05c42e44..0c943a7602 100644 --- a/src/openrct2-ui/windows/Research.cpp +++ b/src/openrct2-ui/windows/Research.cpp @@ -112,68 +112,24 @@ static void window_research_funding_invalidate(rct_window *w); static void window_research_funding_paint(rct_window *w, rct_drawpixelinfo *dpi); // -static rct_window_event_list window_research_development_events = { - nullptr, - window_research_development_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_research_development_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_research_development_invalidate, - window_research_development_paint, - nullptr -}; +static rct_window_event_list window_research_development_events([](auto& events) +{ + events.mouse_up = &window_research_development_mouseup; + events.update = &window_research_development_update; + events.invalidate = &window_research_development_invalidate; + events.paint = &window_research_development_paint; +}); // 0x009890E8 -static rct_window_event_list window_research_funding_events = { - nullptr, - window_research_funding_mouseup, - nullptr, - window_research_funding_mousedown, - window_research_funding_dropdown, - nullptr, - window_research_funding_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_research_funding_invalidate, - window_research_funding_paint, - nullptr -}; +static rct_window_event_list window_research_funding_events([](auto& events) +{ + events.mouse_up = &window_research_funding_mouseup; + events.mouse_down = &window_research_funding_mousedown; + events.dropdown = &window_research_funding_dropdown; + events.update = &window_research_funding_update; + events.invalidate = &window_research_funding_invalidate; + events.paint = &window_research_funding_paint; +}); static rct_window_event_list *window_research_page_events[] = { &window_research_development_events, diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 08a289333d..9bde82554e 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -615,324 +615,136 @@ static void window_ride_customer_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_ride_set_page(rct_window *w, int32_t page); // 0x0098DFD4 -static rct_window_event_list window_ride_main_events = { - nullptr, - window_ride_main_mouseup, - window_ride_main_resize, - window_ride_main_mousedown, - window_ride_main_dropdown, - nullptr, - window_ride_main_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_main_textinput, - window_ride_main_viewport_rotate, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_main_invalidate, - window_ride_main_paint, - nullptr -}; +static rct_window_event_list window_ride_main_events([](auto& events) +{ + events.mouse_up = &window_ride_main_mouseup; + events.resize = &window_ride_main_resize; + events.mouse_down = &window_ride_main_mousedown; + events.dropdown = &window_ride_main_dropdown; + events.update = &window_ride_main_update; + events.text_input = &window_ride_main_textinput; + events.viewport_rotate = &window_ride_main_viewport_rotate; + events.invalidate = &window_ride_main_invalidate; + events.paint = &window_ride_main_paint; +}); // 0x0098E204 -static rct_window_event_list window_ride_vehicle_events = { - nullptr, - window_ride_vehicle_mouseup, - window_ride_vehicle_resize, - window_ride_vehicle_mousedown, - window_ride_vehicle_dropdown, - nullptr, - window_ride_vehicle_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_vehicle_invalidate, - window_ride_vehicle_paint, - window_ride_vehicle_scrollpaint -}; +static rct_window_event_list window_ride_vehicle_events([](auto& events) +{ + events.mouse_up = &window_ride_vehicle_mouseup; + events.resize = &window_ride_vehicle_resize; + events.mouse_down = &window_ride_vehicle_mousedown; + events.dropdown = &window_ride_vehicle_dropdown; + events.update = &window_ride_vehicle_update; + events.invalidate = &window_ride_vehicle_invalidate; + events.paint = &window_ride_vehicle_paint; + events.scroll_paint = &window_ride_vehicle_scrollpaint; +}); // 0x0098E0B4 -static rct_window_event_list window_ride_operating_events = { - nullptr, - window_ride_operating_mouseup, - window_ride_operating_resize, - window_ride_operating_mousedown, - window_ride_operating_dropdown, - nullptr, - window_ride_operating_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_operating_invalidate, - window_ride_operating_paint, - nullptr -}; +static rct_window_event_list window_ride_operating_events([](auto& events) +{ + events.mouse_up = &window_ride_operating_mouseup; + events.resize = &window_ride_operating_resize; + events.mouse_down = &window_ride_operating_mousedown; + events.dropdown = &window_ride_operating_dropdown; + events.update = &window_ride_operating_update; + events.invalidate = &window_ride_operating_invalidate; + events.paint = &window_ride_operating_paint; +}); // 0x0098E124 -static rct_window_event_list window_ride_maintenance_events = { - nullptr, - window_ride_maintenance_mouseup, - window_ride_maintenance_resize, - window_ride_maintenance_mousedown, - window_ride_maintenance_dropdown, - nullptr, - window_ride_maintenance_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_maintenance_invalidate, - window_ride_maintenance_paint, - nullptr -}; +static rct_window_event_list window_ride_maintenance_events([](auto& events) +{ + events.mouse_up = &window_ride_maintenance_mouseup; + events.resize = &window_ride_maintenance_resize; + events.mouse_down = &window_ride_maintenance_mousedown; + events.dropdown = &window_ride_maintenance_dropdown; + events.update = &window_ride_maintenance_update; + events.invalidate = &window_ride_maintenance_invalidate; + events.paint = &window_ride_maintenance_paint; +}); // 0x0098E044 -static rct_window_event_list window_ride_colour_events = { - window_ride_colour_close, - window_ride_colour_mouseup, - window_ride_colour_resize, - window_ride_colour_mousedown, - window_ride_colour_dropdown, - nullptr, - window_ride_colour_update, - nullptr, - nullptr, - nullptr, - window_ride_colour_tooldown, - window_ride_colour_tooldrag, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_colour_invalidate, - window_ride_colour_paint, - window_ride_colour_scrollpaint -}; +static rct_window_event_list window_ride_colour_events([](auto& events) +{ + events.close = &window_ride_colour_close; + events.mouse_up = &window_ride_colour_mouseup; + events.resize = &window_ride_colour_resize; + events.mouse_down = &window_ride_colour_mousedown; + events.dropdown = &window_ride_colour_dropdown; + events.update = &window_ride_colour_update; + events.tool_down = &window_ride_colour_tooldown; + events.tool_drag = &window_ride_colour_tooldrag; + events.invalidate = &window_ride_colour_invalidate; + events.paint = &window_ride_colour_paint; + events.scroll_paint = &window_ride_colour_scrollpaint; +}); // 0x0098E194 -static rct_window_event_list window_ride_music_events = { - nullptr, - window_ride_music_mouseup, - window_ride_music_resize, - window_ride_music_mousedown, - window_ride_music_dropdown, - nullptr, - window_ride_music_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_music_invalidate, - window_ride_music_paint, - nullptr -}; +static rct_window_event_list window_ride_music_events([](auto& events) +{ + events.mouse_up = &window_ride_music_mouseup; + events.resize = &window_ride_music_resize; + events.mouse_down = &window_ride_music_mousedown; + events.dropdown = &window_ride_music_dropdown; + events.update = &window_ride_music_update; + events.invalidate = &window_ride_music_invalidate; + events.paint = &window_ride_music_paint; +}); // 0x0098DE14 -static rct_window_event_list window_ride_measurements_events = { - window_ride_measurements_close, - window_ride_measurements_mouseup, - window_ride_measurements_resize, - window_ride_measurements_mousedown, - window_ride_measurements_dropdown, - nullptr, - window_ride_measurements_update, - nullptr, - nullptr, - nullptr, - window_ride_measurements_tooldown, - window_ride_measurements_tooldrag, - nullptr, - window_ride_measurements_toolabort, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_measurements_invalidate, - window_ride_measurements_paint, - nullptr -}; +static rct_window_event_list window_ride_measurements_events([](auto& events) +{ + events.close = &window_ride_measurements_close; + events.mouse_up = &window_ride_measurements_mouseup; + events.resize = &window_ride_measurements_resize; + events.mouse_down = &window_ride_measurements_mousedown; + events.dropdown = &window_ride_measurements_dropdown; + events.update = &window_ride_measurements_update; + events.tool_down = &window_ride_measurements_tooldown; + events.tool_drag = &window_ride_measurements_tooldrag; + events.tool_abort = &window_ride_measurements_toolabort; + events.invalidate = &window_ride_measurements_invalidate; + events.paint = &window_ride_measurements_paint; +}); // 0x0098DF64 -static rct_window_event_list window_ride_graphs_events = { - nullptr, - window_ride_graphs_mouseup, - window_ride_graphs_resize, - window_ride_graphs_mousedown, - nullptr, - nullptr, - window_ride_graphs_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_graphs_scrollgetheight, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_graphs_15, - window_ride_graphs_tooltip, - nullptr, - nullptr, - window_ride_graphs_invalidate, - window_ride_graphs_paint, - window_ride_graphs_scrollpaint -}; +static rct_window_event_list window_ride_graphs_events([](auto& events) +{ + events.mouse_up = &window_ride_graphs_mouseup; + events.resize = &window_ride_graphs_resize; + events.mouse_down = &window_ride_graphs_mousedown; + events.update = &window_ride_graphs_update; + events.get_scroll_size = &window_ride_graphs_scrollgetheight; + events.unknown_15 = &window_ride_graphs_15; + events.tooltip = &window_ride_graphs_tooltip; + events.invalidate = &window_ride_graphs_invalidate; + events.paint = &window_ride_graphs_paint; + events.scroll_paint = &window_ride_graphs_scrollpaint; +}); // 0x0098DEF4 -static rct_window_event_list window_ride_income_events = { - nullptr, - window_ride_income_mouseup, - window_ride_income_resize, - window_ride_income_mousedown, - nullptr, - nullptr, - window_ride_income_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_income_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_income_invalidate, - window_ride_income_paint, - nullptr -}; +static rct_window_event_list window_ride_income_events([](auto& events) +{ + events.mouse_up = &window_ride_income_mouseup; + events.resize = &window_ride_income_resize; + events.mouse_down = &window_ride_income_mousedown; + events.update = &window_ride_income_update; + events.text_input = &window_ride_income_textinput; + events.invalidate = &window_ride_income_invalidate; + events.paint = &window_ride_income_paint; +}); // 0x0098DE84 -static rct_window_event_list window_ride_customer_events = { - nullptr, - window_ride_customer_mouseup, - window_ride_customer_resize, - nullptr, - nullptr, - nullptr, - window_ride_customer_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_customer_invalidate, - window_ride_customer_paint, - nullptr -}; +static rct_window_event_list window_ride_customer_events([](auto& events) +{ + events.mouse_up = &window_ride_customer_mouseup; + events.resize = &window_ride_customer_resize; + events.update = &window_ride_customer_update; + events.invalidate = &window_ride_customer_invalidate; + events.paint = &window_ride_customer_paint; +}); static rct_window_event_list *window_ride_page_events[] = { &window_ride_main_events, diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 15adf11de8..3e462150f7 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -147,36 +147,19 @@ static void window_ride_construction_paint(rct_window *w, rct_drawpixelinfo *dpi static bool track_piece_direction_is_diagonal(const uint8_t direction); //0x993EEC -static rct_window_event_list window_ride_construction_events = { - window_ride_construction_close, - window_ride_construction_mouseup, - window_ride_construction_resize, - window_ride_construction_mousedown, - window_ride_construction_dropdown, - nullptr, - window_ride_construction_update, - nullptr, - nullptr, - window_ride_construction_toolupdate, - window_ride_construction_tooldown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_construction_invalidate, - window_ride_construction_paint, - nullptr -}; +static rct_window_event_list window_ride_construction_events([](auto& events) +{ + events.close = &window_ride_construction_close; + events.mouse_up = &window_ride_construction_mouseup; + events.resize = &window_ride_construction_resize; + events.mouse_down = &window_ride_construction_mousedown; + events.dropdown = &window_ride_construction_dropdown; + events.update = &window_ride_construction_update; + events.tool_update = &window_ride_construction_toolupdate; + events.tool_down = &window_ride_construction_tooldown; + events.invalidate = &window_ride_construction_invalidate; + events.paint = &window_ride_construction_paint; +}); #pragma endregion diff --git a/src/openrct2-ui/windows/RideList.cpp b/src/openrct2-ui/windows/RideList.cpp index 275ff2b063..70b2393f6d 100644 --- a/src/openrct2-ui/windows/RideList.cpp +++ b/src/openrct2-ui/windows/RideList.cpp @@ -86,36 +86,20 @@ static void window_ride_list_invalidate(rct_window *w); static void window_ride_list_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_ride_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_ride_list_events = { - nullptr, - window_ride_list_mouseup, - window_ride_list_resize, - window_ride_list_mousedown, - window_ride_list_dropdown, - nullptr, - window_ride_list_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_list_scrollgetsize, - window_ride_list_scrollmousedown, - nullptr, - window_ride_list_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_ride_list_invalidate, - window_ride_list_paint, - window_ride_list_scrollpaint -}; +static rct_window_event_list window_ride_list_events([](auto& events) +{ + events.mouse_up = &window_ride_list_mouseup; + events.resize = &window_ride_list_resize; + events.mouse_down = &window_ride_list_mousedown; + events.dropdown = &window_ride_list_dropdown; + events.update = &window_ride_list_update; + events.get_scroll_size = &window_ride_list_scrollgetsize; + events.scroll_mousedown = &window_ride_list_scrollmousedown; + events.scroll_mouseover = &window_ride_list_scrollmouseover; + events.invalidate = &window_ride_list_invalidate; + events.paint = &window_ride_list_paint; + events.scroll_paint = &window_ride_list_scrollpaint; +}); enum { INFORMATION_TYPE_STATUS, diff --git a/src/openrct2-ui/windows/SavePrompt.cpp b/src/openrct2-ui/windows/SavePrompt.cpp index 84ee824868..ec29f00eb9 100644 --- a/src/openrct2-ui/windows/SavePrompt.cpp +++ b/src/openrct2-ui/windows/SavePrompt.cpp @@ -72,36 +72,12 @@ static void window_save_prompt_mouseup(rct_window *w, rct_widgetindex widgetInde static void window_save_prompt_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_save_prompt_callback(int32_t result, const utf8 * path); -static rct_window_event_list window_save_prompt_events = { - window_save_prompt_close, - window_save_prompt_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_save_prompt_paint, - nullptr -}; +static rct_window_event_list window_save_prompt_events([](auto& events) +{ + events.close = &window_save_prompt_close; + events.mouse_up = &window_save_prompt_mouseup; + events.paint = &window_save_prompt_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/ScenarioSelect.cpp b/src/openrct2-ui/windows/ScenarioSelect.cpp index 102cf6fe22..180183f6c6 100644 --- a/src/openrct2-ui/windows/ScenarioSelect.cpp +++ b/src/openrct2-ui/windows/ScenarioSelect.cpp @@ -110,36 +110,18 @@ static void window_scenarioselect_invalidate(rct_window *w); static void window_scenarioselect_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_scenarioselect_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_scenarioselect_events = { - window_scenarioselect_close, - window_scenarioselect_mouseup, - nullptr, - window_scenarioselect_mousedown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_scenarioselect_scrollgetsize, - window_scenarioselect_scrollmousedown, - nullptr, - window_scenarioselect_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_scenarioselect_invalidate, - window_scenarioselect_paint, - window_scenarioselect_scrollpaint -}; +static rct_window_event_list window_scenarioselect_events([](auto& events) +{ + events.close = &window_scenarioselect_close; + events.mouse_up = &window_scenarioselect_mouseup; + events.mouse_down = &window_scenarioselect_mousedown; + events.get_scroll_size = &window_scenarioselect_scrollgetsize; + events.scroll_mousedown = &window_scenarioselect_scrollmousedown; + events.scroll_mouseover = &window_scenarioselect_scrollmouseover; + events.invalidate = &window_scenarioselect_invalidate; + events.paint = &window_scenarioselect_paint; + events.scroll_paint = &window_scenarioselect_scrollpaint; +}); // clang-format on static void draw_category_heading( diff --git a/src/openrct2-ui/windows/Scenery.cpp b/src/openrct2-ui/windows/Scenery.cpp index f93f17634c..a5b4fa97cc 100644 --- a/src/openrct2-ui/windows/Scenery.cpp +++ b/src/openrct2-ui/windows/Scenery.cpp @@ -82,36 +82,23 @@ static void window_scenery_invalidate(rct_window *w); static void window_scenery_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_scenery_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_scenery_events = { - window_scenery_close, - window_scenery_mouseup, - window_scenery_resize, - window_scenery_mousedown, - window_scenery_dropdown, - nullptr, - window_scenery_update, - window_scenery_periodic_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_scenery_scrollgetsize, - window_scenery_scrollmousedown, - nullptr, - window_scenery_scrollmouseover, - nullptr, - nullptr, - nullptr, - window_scenery_tooltip, - nullptr, - nullptr, - window_scenery_invalidate, - window_scenery_paint, - window_scenery_scrollpaint, -}; +static rct_window_event_list window_scenery_events([](auto& events) +{ + events.close = &window_scenery_close; + events.mouse_up = &window_scenery_mouseup; + events.resize = &window_scenery_resize; + events.mouse_down = &window_scenery_mousedown; + events.dropdown = &window_scenery_dropdown; + events.update = &window_scenery_update; + events.periodic_update = &window_scenery_periodic_update; + events.get_scroll_size = &window_scenery_scrollgetsize; + events.scroll_mousedown = &window_scenery_scrollmousedown; + events.scroll_mouseover = &window_scenery_scrollmouseover; + events.tooltip = &window_scenery_tooltip; + events.invalidate = &window_scenery_invalidate; + events.paint = &window_scenery_paint; + events.scroll_paint = &window_scenery_scrollpaint; +}); enum WINDOW_SCENERY_LIST_WIDGET_IDX { diff --git a/src/openrct2-ui/windows/SceneryScatter.cpp b/src/openrct2-ui/windows/SceneryScatter.cpp index b5ce563a3c..1525ca8708 100644 --- a/src/openrct2-ui/windows/SceneryScatter.cpp +++ b/src/openrct2-ui/windows/SceneryScatter.cpp @@ -60,36 +60,15 @@ static void window_scenery_scatter_textinput(rct_window* w, rct_widgetindex widg static void window_scenery_scatter_inputsize(rct_window* w, rct_widgetindex widgetindex); // clang-format off -static rct_window_event_list window_clear_scenery_events = { - window_scenery_scatter_close, - window_scenery_scatter_mouseup, - nullptr, - window_scenery_scatter_mousedown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_scenery_scatter_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_scenery_scatter_invalidate, - window_scenery_scatter_paint, - nullptr -}; +static rct_window_event_list window_clear_scenery_events([](auto& events) +{ + events.close = &window_scenery_scatter_close; + events.mouse_up = &window_scenery_scatter_mouseup; + events.mouse_down = &window_scenery_scatter_mousedown; + events.text_input = &window_scenery_scatter_textinput; + events.invalidate = &window_scenery_scatter_invalidate; + events.paint = &window_scenery_scatter_paint; +}); // clang-format on rct_window* window_scenery_scatter_open() diff --git a/src/openrct2-ui/windows/ServerList.cpp b/src/openrct2-ui/windows/ServerList.cpp index eca78f6745..43ee346f88 100644 --- a/src/openrct2-ui/windows/ServerList.cpp +++ b/src/openrct2-ui/windows/ServerList.cpp @@ -82,36 +82,21 @@ static void window_server_list_invalidate(rct_window *w); static void window_server_list_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_server_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_server_list_events = { - window_server_list_close, - window_server_list_mouseup, - window_server_list_resize, - nullptr, - window_server_list_dropdown, - nullptr, - window_server_list_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_server_list_scroll_getsize, - window_server_list_scroll_mousedown, - nullptr, - window_server_list_scroll_mouseover, - window_server_list_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_server_list_invalidate, - window_server_list_paint, - window_server_list_scrollpaint -}; +static rct_window_event_list window_server_list_events([](auto& events) +{ + events.close = &window_server_list_close; + events.mouse_up = &window_server_list_mouseup; + events.resize = &window_server_list_resize; + events.dropdown = &window_server_list_dropdown; + events.update = &window_server_list_update; + events.get_scroll_size = &window_server_list_scroll_getsize; + events.scroll_mousedown = &window_server_list_scroll_mousedown; + events.scroll_mouseover = &window_server_list_scroll_mouseover; + events.text_input = &window_server_list_textinput; + events.invalidate = &window_server_list_invalidate; + events.paint = &window_server_list_paint; + events.scroll_paint = &window_server_list_scrollpaint; +}); // clang-format on enum diff --git a/src/openrct2-ui/windows/ServerStart.cpp b/src/openrct2-ui/windows/ServerStart.cpp index 2a1c0bea2f..2bebd862d8 100644 --- a/src/openrct2-ui/windows/ServerStart.cpp +++ b/src/openrct2-ui/windows/ServerStart.cpp @@ -72,36 +72,15 @@ static void window_server_start_textinput(rct_window *w, rct_widgetindex widgetI static void window_server_start_invalidate(rct_window *w); static void window_server_start_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_server_start_events = { - window_server_start_close, - window_server_start_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_server_start_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_server_start_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_server_start_invalidate, - window_server_start_paint, - nullptr -}; +static rct_window_event_list window_server_start_events([](auto& events) +{ + events.close = &window_server_start_close; + events.mouse_up = &window_server_start_mouseup; + events.update = &window_server_start_update; + events.text_input = &window_server_start_textinput; + events.invalidate = &window_server_start_invalidate; + events.paint = &window_server_start_paint; +}); // clang-format on rct_window* window_server_start_open() diff --git a/src/openrct2-ui/windows/ShortcutKeyChange.cpp b/src/openrct2-ui/windows/ShortcutKeyChange.cpp index 8a80078b13..c934de65ac 100644 --- a/src/openrct2-ui/windows/ShortcutKeyChange.cpp +++ b/src/openrct2-ui/windows/ShortcutKeyChange.cpp @@ -36,36 +36,11 @@ static void window_shortcut_change_mouseup(rct_window *w, rct_widgetindex widget static void window_shortcut_change_paint(rct_window *w, rct_drawpixelinfo *dpi); // 0x9A3F7C -static rct_window_event_list window_shortcut_change_events = { - nullptr, - window_shortcut_change_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_shortcut_change_paint, - nullptr -}; +static rct_window_event_list window_shortcut_change_events([](auto& events) +{ + events.mouse_up = &window_shortcut_change_mouseup; + events.paint = &window_shortcut_change_paint; +}); // clang-format on static rct_string_id CurrentShortcutKeyStringId{}; diff --git a/src/openrct2-ui/windows/ShortcutKeys.cpp b/src/openrct2-ui/windows/ShortcutKeys.cpp index 878919fe3c..097cfc3aa8 100644 --- a/src/openrct2-ui/windows/ShortcutKeys.cpp +++ b/src/openrct2-ui/windows/ShortcutKeys.cpp @@ -50,36 +50,17 @@ static void window_shortcut_scrollmousedown(rct_window *w, int32_t scrollIndex, static void window_shortcut_scrollmouseover(rct_window *w, int32_t scrollIndex, const ScreenCoordsXY& screenCoords); static void window_shortcut_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_shortcut_events = { - nullptr, - window_shortcut_mouseup, - window_shortcut_resize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_shortcut_scrollgetsize, - window_shortcut_scrollmousedown, - nullptr, - window_shortcut_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_shortcut_invalidate, - window_shortcut_paint, - window_shortcut_scrollpaint -}; +static rct_window_event_list window_shortcut_events([](auto& events) +{ + events.mouse_up = &window_shortcut_mouseup; + events.resize = &window_shortcut_resize; + events.get_scroll_size = &window_shortcut_scrollgetsize; + events.scroll_mousedown = &window_shortcut_scrollmousedown; + events.scroll_mouseover = &window_shortcut_scrollmouseover; + events.invalidate = &window_shortcut_invalidate; + events.paint = &window_shortcut_paint; + events.scroll_paint = &window_shortcut_scrollpaint; +}); struct ShortcutStringPair { diff --git a/src/openrct2-ui/windows/Sign.cpp b/src/openrct2-ui/windows/Sign.cpp index 0e156a2759..7fd1ed8659 100644 --- a/src/openrct2-ui/windows/Sign.cpp +++ b/src/openrct2-ui/windows/Sign.cpp @@ -62,72 +62,32 @@ static void window_sign_paint(rct_window *w, rct_drawpixelinfo *dpi); // 0x98E44C -static rct_window_event_list window_sign_events = { - nullptr, - window_sign_mouseup, - nullptr, - window_sign_mousedown, - window_sign_dropdown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_sign_textinput, - window_sign_viewport_rotate, - nullptr, - nullptr, - nullptr, - nullptr, - window_sign_invalidate, - window_sign_paint, - nullptr -}; +static rct_window_event_list window_sign_events([](auto& events) +{ + events.mouse_up = &window_sign_mouseup; + events.mouse_down = &window_sign_mousedown; + events.dropdown = &window_sign_dropdown; + events.text_input = &window_sign_textinput; + events.viewport_rotate = &window_sign_viewport_rotate; + events.invalidate = &window_sign_invalidate; + events.paint = &window_sign_paint; +}); static void window_sign_small_mouseup(rct_window *w, rct_widgetindex widgetIndex); static void window_sign_small_dropdown(rct_window *w, rct_widgetindex widgetIndex, int32_t dropdownIndex); static void window_sign_small_invalidate(rct_window *w); // 0x9A410C -static rct_window_event_list window_sign_small_events = { - nullptr, - window_sign_small_mouseup, - nullptr, - window_sign_mousedown, - window_sign_small_dropdown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_sign_textinput, - window_sign_viewport_rotate, - nullptr, - nullptr, - nullptr, - nullptr, - window_sign_small_invalidate, - window_sign_paint, - nullptr -}; +static rct_window_event_list window_sign_small_events([](auto& events) +{ + events.mouse_up = &window_sign_small_mouseup; + events.mouse_down = &window_sign_mousedown; + events.dropdown = &window_sign_small_dropdown; + events.text_input = &window_sign_textinput; + events.viewport_rotate = &window_sign_viewport_rotate; + events.invalidate = &window_sign_small_invalidate; + events.paint = &window_sign_paint; +}); // clang-format on static void window_sign_show_text_input(rct_window* w); diff --git a/src/openrct2-ui/windows/Staff.cpp b/src/openrct2-ui/windows/Staff.cpp index 3fc8638674..7ef39203b6 100644 --- a/src/openrct2-ui/windows/Staff.cpp +++ b/src/openrct2-ui/windows/Staff.cpp @@ -153,100 +153,48 @@ static void window_staff_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi); void window_staff_set_colours(); // 0x992AEC -static rct_window_event_list window_staff_overview_events = { - window_staff_overview_close, - window_staff_overview_mouseup, - window_staff_overview_resize, - window_staff_overview_mousedown, - window_staff_overview_dropdown, - nullptr, - window_staff_overview_update, - nullptr, - nullptr, - window_staff_overview_tool_update, - window_staff_overview_tool_down, - window_staff_overview_tool_drag, - window_staff_overview_tool_up, - window_staff_overview_tool_abort, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_staff_overview_text_input, - window_staff_overview_viewport_rotate, - nullptr, - nullptr, - nullptr, - nullptr, - window_staff_overview_invalidate, //Invalidate - window_staff_overview_paint, //Paint - nullptr -}; +static rct_window_event_list window_staff_overview_events([](auto& events) +{ + events.close = &window_staff_overview_close; + events.mouse_up = &window_staff_overview_mouseup; + events.resize = &window_staff_overview_resize; + events.mouse_down = &window_staff_overview_mousedown; + events.dropdown = &window_staff_overview_dropdown; + events.update = &window_staff_overview_update; + events.tool_update = &window_staff_overview_tool_update; + events.tool_down = &window_staff_overview_tool_down; + events.tool_drag = &window_staff_overview_tool_drag; + events.tool_up = &window_staff_overview_tool_up; + events.tool_abort = &window_staff_overview_tool_abort; + events.text_input = &window_staff_overview_text_input; + events.viewport_rotate = &window_staff_overview_viewport_rotate; + events.invalidate = &window_staff_overview_invalidate; + events.paint = &window_staff_overview_paint; +}); // 0x992B5C -static rct_window_event_list window_staff_options_events = { - nullptr, - window_staff_options_mouseup, - window_staff_stats_resize, - window_staff_options_mousedown, - window_staff_options_dropdown, - window_staff_unknown_05, - window_staff_options_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_staff_options_invalidate, //Invalidate - window_staff_options_paint, //Paint - nullptr -}; +static rct_window_event_list window_staff_options_events([](auto& events) +{ + events.mouse_up = &window_staff_options_mouseup; + events.resize = &window_staff_stats_resize; + events.mouse_down = &window_staff_options_mousedown; + events.dropdown = &window_staff_options_dropdown; + events.unknown_05 = &window_staff_unknown_05; + events.update = &window_staff_options_update; + events.invalidate = &window_staff_options_invalidate; + events.paint = &window_staff_options_paint; +}); // 0x992BCC -static rct_window_event_list window_staff_stats_events = { - nullptr, - window_staff_stats_mouseup, - window_staff_stats_resize, - nullptr, - nullptr, - window_staff_unknown_05, - window_staff_stats_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_staff_stats_invalidate, //Invalidate - window_staff_stats_paint, //Paint - nullptr -}; +static rct_window_event_list window_staff_stats_events([](auto& events) +{ + events.mouse_up = &window_staff_stats_mouseup; + events.resize = &window_staff_stats_resize; + events.unknown_05 = &window_staff_unknown_05; + events.update = &window_staff_stats_update; + events.invalidate = &window_staff_stats_invalidate; + events.paint = &window_staff_stats_paint; +}); static rct_window_event_list *window_staff_page_events[] = { &window_staff_overview_events, diff --git a/src/openrct2-ui/windows/StaffFirePrompt.cpp b/src/openrct2-ui/windows/StaffFirePrompt.cpp index 886a5694bc..e24b215790 100644 --- a/src/openrct2-ui/windows/StaffFirePrompt.cpp +++ b/src/openrct2-ui/windows/StaffFirePrompt.cpp @@ -41,36 +41,11 @@ static void window_staff_fire_mouseup(rct_window *w, rct_widgetindex widgetIndex static void window_staff_fire_paint(rct_window *w, rct_drawpixelinfo *dpi); //0x9A3F7C -static rct_window_event_list window_staff_fire_events = { - nullptr, - window_staff_fire_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_staff_fire_paint, - nullptr -}; +static rct_window_event_list window_staff_fire_events([](auto& events) +{ + events.mouse_up = &window_staff_fire_mouseup; + events.paint = &window_staff_fire_paint; +}); // clang-format on /** Based off of rct2: 0x6C0A77 */ diff --git a/src/openrct2-ui/windows/StaffList.cpp b/src/openrct2-ui/windows/StaffList.cpp index b7349640ed..00135d64e9 100644 --- a/src/openrct2-ui/windows/StaffList.cpp +++ b/src/openrct2-ui/windows/StaffList.cpp @@ -56,36 +56,23 @@ static void window_staff_list_invalidate(rct_window *w); static void window_staff_list_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_staff_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_staff_list_events = { - window_staff_list_close, - window_staff_list_mouseup, - window_staff_list_resize, - window_staff_list_mousedown, - window_staff_list_dropdown, - nullptr, - window_staff_list_update, - nullptr, - nullptr, - nullptr, - window_staff_list_tooldown, - nullptr, - nullptr, - window_staff_list_toolabort, - nullptr, - window_staff_list_scrollgetsize, - window_staff_list_scrollmousedown, - nullptr, - window_staff_list_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_staff_list_invalidate, - window_staff_list_paint, - window_staff_list_scrollpaint, -}; +static rct_window_event_list window_staff_list_events([](auto& events) +{ + events.close = &window_staff_list_close; + events.mouse_up = &window_staff_list_mouseup; + events.resize = &window_staff_list_resize; + events.mouse_down = &window_staff_list_mousedown; + events.dropdown = &window_staff_list_dropdown; + events.update = &window_staff_list_update; + events.tool_down = &window_staff_list_tooldown; + events.tool_abort = &window_staff_list_toolabort; + events.get_scroll_size = &window_staff_list_scrollgetsize; + events.scroll_mousedown = &window_staff_list_scrollmousedown; + events.scroll_mouseover = &window_staff_list_scrollmouseover; + events.invalidate = &window_staff_list_invalidate; + events.paint = &window_staff_list_paint; + events.scroll_paint = &window_staff_list_scrollpaint; +}); enum WINDOW_STAFF_LIST_WIDGET_IDX { WIDX_STAFF_LIST_BACKGROUND, diff --git a/src/openrct2-ui/windows/TextInput.cpp b/src/openrct2-ui/windows/TextInput.cpp index df743ead8d..90a1da38d3 100644 --- a/src/openrct2-ui/windows/TextInput.cpp +++ b/src/openrct2-ui/windows/TextInput.cpp @@ -54,36 +54,14 @@ static void window_text_input_paint(rct_window *w, rct_drawpixelinfo *dpi); static void draw_ime_composition(rct_drawpixelinfo * dpi, int cursorX, int cursorY); //0x9A3F7C -static rct_window_event_list window_text_input_events = { - window_text_input_close, - window_text_input_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_text_input_periodic_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_text_input_invalidate, - window_text_input_paint, - nullptr -}; +static rct_window_event_list window_text_input_events([](auto& events) +{ + events.close = &window_text_input_close; + events.mouse_up = &window_text_input_mouseup; + events.periodic_update = &window_text_input_periodic_update; + events.invalidate = &window_text_input_invalidate; + events.paint = &window_text_input_paint; +}); // clang-format on static rct_string_id input_text_description; diff --git a/src/openrct2-ui/windows/Themes.cpp b/src/openrct2-ui/windows/Themes.cpp index 6d02c42845..5652f905dc 100644 --- a/src/openrct2-ui/windows/Themes.cpp +++ b/src/openrct2-ui/windows/Themes.cpp @@ -49,36 +49,21 @@ static void window_themes_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_themes_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); static void window_themes_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w); -static rct_window_event_list window_themes_events = { - nullptr, - window_themes_mouseup, - window_themes_resize, - window_themes_mousedown, - window_themes_dropdown, - nullptr, - window_themes_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_themes_scrollgetsize, - window_themes_scrollmousedown, - nullptr, - window_themes_scrollmouseover, - window_themes_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_themes_invalidate, - window_themes_paint, - window_themes_scrollpaint, -}; +static rct_window_event_list window_themes_events([](auto& events) +{ + events.mouse_up = &window_themes_mouseup; + events.resize = &window_themes_resize; + events.mouse_down = &window_themes_mousedown; + events.dropdown = &window_themes_dropdown; + events.update = &window_themes_update; + events.get_scroll_size = &window_themes_scrollgetsize; + events.scroll_mousedown = &window_themes_scrollmousedown; + events.scroll_mouseover = &window_themes_scrollmouseover; + events.text_input = &window_themes_textinput; + events.invalidate = &window_themes_invalidate; + events.paint = &window_themes_paint; + events.scroll_paint = &window_themes_scrollpaint; +}); enum WINDOW_STAFF_LIST_WIDGET_IDX { WIDX_THEMES_BACKGROUND, diff --git a/src/openrct2-ui/windows/TileInspector.cpp b/src/openrct2-ui/windows/TileInspector.cpp index e55fb5a9f0..b1b97648f0 100644 --- a/src/openrct2-ui/windows/TileInspector.cpp +++ b/src/openrct2-ui/windows/TileInspector.cpp @@ -439,36 +439,23 @@ static void window_tile_inspector_scrollpaint(rct_window* w, rct_drawpixelinfo* static void window_tile_inspector_set_page(rct_window* w, const TILE_INSPECTOR_PAGE page); // clang-format off -static rct_window_event_list TileInspectorWindowEvents = { - nullptr, - window_tile_inspector_mouseup, - window_tile_inspector_resize, - window_tile_inspector_mousedown, - window_tile_inspector_dropdown, - nullptr, - window_tile_inspector_update, - nullptr, - nullptr, - window_tile_inspector_tool_update, - window_tile_inspector_tool_down, - window_tile_inspector_tool_drag, - nullptr, - nullptr, - nullptr, - window_tile_inspector_scrollgetsize, - window_tile_inspector_scrollmousedown, - nullptr, - window_tile_inspector_scrollmouseover, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_tile_inspector_invalidate, - window_tile_inspector_paint, - window_tile_inspector_scrollpaint -}; +static rct_window_event_list TileInspectorWindowEvents([](auto& events) +{ + events.mouse_up = &window_tile_inspector_mouseup; + events.resize = &window_tile_inspector_resize; + events.mouse_down = &window_tile_inspector_mousedown; + events.dropdown = &window_tile_inspector_dropdown; + events.update = &window_tile_inspector_update; + events.tool_update = &window_tile_inspector_tool_update; + events.tool_down = &window_tile_inspector_tool_down; + events.tool_drag = &window_tile_inspector_tool_drag; + events.get_scroll_size = &window_tile_inspector_scrollgetsize; + events.scroll_mousedown = &window_tile_inspector_scrollmousedown; + events.scroll_mouseover = &window_tile_inspector_scrollmouseover; + events.invalidate = &window_tile_inspector_invalidate; + events.paint = &window_tile_inspector_paint; + events.scroll_paint = &window_tile_inspector_scrollpaint; +}); static uint64_t PageEnabledWidgets[] = { (1ULL << WIDX_CLOSE) | (1ULL << WIDX_BUTTON_CORRUPT), diff --git a/src/openrct2-ui/windows/TitleCommandEditor.cpp b/src/openrct2-ui/windows/TitleCommandEditor.cpp index 62e36c300e..33f0e4c3a4 100644 --- a/src/openrct2-ui/windows/TitleCommandEditor.cpp +++ b/src/openrct2-ui/windows/TitleCommandEditor.cpp @@ -122,36 +122,18 @@ static TITLE_COMMAND_ORDER get_command_info(int32_t index); static TileCoordsXY get_location(); static uint8_t get_zoom(); -static rct_window_event_list window_title_command_editor_events = { - window_title_command_editor_close, - window_title_command_editor_mouseup, - nullptr, - window_title_command_editor_mousedown, - window_title_command_editor_dropdown, - nullptr, - window_title_command_editor_update, - nullptr, - nullptr, - nullptr, - window_title_command_editor_tool_down, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_command_editor_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_command_editor_invalidate, - window_title_command_editor_paint, - nullptr -}; +static rct_window_event_list window_title_command_editor_events([](auto& events) +{ + events.close = &window_title_command_editor_close; + events.mouse_up = &window_title_command_editor_mouseup; + events.mouse_down = &window_title_command_editor_mousedown; + events.dropdown = &window_title_command_editor_dropdown; + events.update = &window_title_command_editor_update; + events.tool_down = &window_title_command_editor_tool_down; + events.text_input = &window_title_command_editor_textinput; + events.invalidate = &window_title_command_editor_invalidate; + events.paint = &window_title_command_editor_paint; +}); // clang-format on static void scenario_select_callback(const utf8* path) diff --git a/src/openrct2-ui/windows/TitleEditor.cpp b/src/openrct2-ui/windows/TitleEditor.cpp index 3d7063f647..51e8405725 100644 --- a/src/openrct2-ui/windows/TitleEditor.cpp +++ b/src/openrct2-ui/windows/TitleEditor.cpp @@ -62,36 +62,22 @@ static bool window_title_editor_check_can_edit(); static void window_title_editor_add_park_callback(int32_t result, const utf8 * path); static void window_title_editor_rename_park(size_t index, const utf8 * name); -static rct_window_event_list window_title_editor_events = { - window_title_editor_close, - window_title_editor_mouseup, - window_title_editor_resize, - window_title_editor_mousedown, - window_title_editor_dropdown, - nullptr, - window_title_editor_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_editor_scrollgetsize, - window_title_editor_scrollmousedown, - nullptr, - window_title_editor_scrollmouseover, - window_title_editor_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_editor_invalidate, - window_title_editor_paint, - window_title_editor_scrollpaint, -}; +static rct_window_event_list window_title_editor_events([](auto& events) +{ + events.close = &window_title_editor_close; + events.mouse_up = &window_title_editor_mouseup; + events.resize = &window_title_editor_resize; + events.mouse_down = &window_title_editor_mousedown; + events.dropdown = &window_title_editor_dropdown; + events.update = &window_title_editor_update; + events.get_scroll_size = &window_title_editor_scrollgetsize; + events.scroll_mousedown = &window_title_editor_scrollmousedown; + events.scroll_mouseover = &window_title_editor_scrollmouseover; + events.text_input = &window_title_editor_textinput; + events.invalidate = &window_title_editor_invalidate; + events.paint = &window_title_editor_paint; + events.scroll_paint = &window_title_editor_scrollpaint; +}); enum WINDOW_TITLE_EDITOR_WIDGET_IDX { WIDX_TITLE_EDITOR_BACKGROUND, diff --git a/src/openrct2-ui/windows/TitleExit.cpp b/src/openrct2-ui/windows/TitleExit.cpp index ac2d76208d..38346ba7c6 100644 --- a/src/openrct2-ui/windows/TitleExit.cpp +++ b/src/openrct2-ui/windows/TitleExit.cpp @@ -28,36 +28,11 @@ static rct_widget window_title_exit_widgets[] = { static void window_title_exit_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_title_exit_mouseup(rct_window *w, rct_widgetindex widgetIndex); -static rct_window_event_list window_title_exit_events = { - nullptr, - window_title_exit_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_exit_paint, - nullptr -}; +static rct_window_event_list window_title_exit_events([](auto& events) +{ + events.mouse_up = &window_title_exit_mouseup; + events.paint = &window_title_exit_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/TitleLogo.cpp b/src/openrct2-ui/windows/TitleLogo.cpp index c5a9f96b38..fc61d1682e 100644 --- a/src/openrct2-ui/windows/TitleLogo.cpp +++ b/src/openrct2-ui/windows/TitleLogo.cpp @@ -31,36 +31,11 @@ static void window_title_menu_mouseup(rct_window* w, rct_widgetindex widgetIndex static void window_title_logo_paint(rct_window* w, rct_drawpixelinfo* dpi); // clang-format off -static rct_window_event_list window_title_logo_events = { - nullptr, - window_title_menu_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_logo_paint, - nullptr -}; +static rct_window_event_list window_title_logo_events([](auto& events) +{ + events.mouse_up = &window_title_menu_mouseup; + events.paint = &window_title_logo_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/TitleMenu.cpp b/src/openrct2-ui/windows/TitleMenu.cpp index 08b9aa90fc..9cb619baab 100644 --- a/src/openrct2-ui/windows/TitleMenu.cpp +++ b/src/openrct2-ui/windows/TitleMenu.cpp @@ -51,36 +51,15 @@ static void window_title_menu_cursor(rct_window *w, rct_widgetindex widgetIndex, static void window_title_menu_invalidate(rct_window *w); static void window_title_menu_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_title_menu_events = { - nullptr, - window_title_menu_mouseup, - nullptr, - window_title_menu_mousedown, - window_title_menu_dropdown, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_menu_cursor, - nullptr, - window_title_menu_invalidate, - window_title_menu_paint, - nullptr -}; +static rct_window_event_list window_title_menu_events([](auto& events) +{ + events.mouse_up = &window_title_menu_mouseup; + events.mouse_down = &window_title_menu_mousedown; + events.dropdown = &window_title_menu_dropdown; + events.cursor = &window_title_menu_cursor; + events.invalidate = &window_title_menu_invalidate; + events.paint = &window_title_menu_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/TitleOptions.cpp b/src/openrct2-ui/windows/TitleOptions.cpp index 50b98fdecb..4b01616431 100644 --- a/src/openrct2-ui/windows/TitleOptions.cpp +++ b/src/openrct2-ui/windows/TitleOptions.cpp @@ -27,36 +27,11 @@ static rct_widget window_title_options_widgets[] = { static void window_title_options_mouseup(rct_window *w, rct_widgetindex widgetIndex); static void window_title_options_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_title_options_events = { - nullptr, - window_title_options_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_title_options_paint, - nullptr -}; +static rct_window_event_list window_title_options_events([](auto& events) +{ + events.mouse_up = &window_title_options_mouseup; + events.paint = &window_title_options_paint; +}); // clang-format on /** diff --git a/src/openrct2-ui/windows/Tooltip.cpp b/src/openrct2-ui/windows/Tooltip.cpp index c122757526..35dd7e64b5 100644 --- a/src/openrct2-ui/windows/Tooltip.cpp +++ b/src/openrct2-ui/windows/Tooltip.cpp @@ -28,36 +28,11 @@ static rct_widget window_tooltip_widgets[] = { static void window_tooltip_update(rct_window *w); static void window_tooltip_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_tooltip_events = { - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_tooltip_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_tooltip_paint, - nullptr -}; +static rct_window_event_list window_tooltip_events([](auto& events) +{ + events.update = &window_tooltip_update; + events.paint = &window_tooltip_paint; +}); // clang-format on static utf8 _tooltipText[sizeof(gCommonStringFormatBuffer)]; diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index cc4497985d..585167b48d 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -270,36 +270,19 @@ static void window_top_toolbar_tool_abort(rct_window *w, rct_widgetindex widgetI static void window_top_toolbar_invalidate(rct_window *w); static void window_top_toolbar_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_top_toolbar_events = { - nullptr, - window_top_toolbar_mouseup, - nullptr, - window_top_toolbar_mousedown, - window_top_toolbar_dropdown, - nullptr, - nullptr, - nullptr, - nullptr, // check if editor versions are significantly different... - window_top_toolbar_tool_update, // editor: 0x0066fB0E - window_top_toolbar_tool_down, // editor: 0x0066fB5C - window_top_toolbar_tool_drag, // editor: 0x0066fB37 - window_top_toolbar_tool_up, // editor: 0x0066fC44 (Exactly the same) - window_top_toolbar_tool_abort, // editor: 0x0066fA74 (Exactly the same) - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_top_toolbar_invalidate, - window_top_toolbar_paint, - nullptr -}; +static rct_window_event_list window_top_toolbar_events([](auto& events) +{ + events.mouse_up = &window_top_toolbar_mouseup; + events.mouse_down = &window_top_toolbar_mousedown; + events.dropdown = &window_top_toolbar_dropdown; + events.tool_update = &window_top_toolbar_tool_update; + events.tool_down = &window_top_toolbar_tool_down; + events.tool_drag = &window_top_toolbar_tool_drag; + events.tool_up = &window_top_toolbar_tool_up; + events.tool_abort = &window_top_toolbar_tool_abort; + events.invalidate = &window_top_toolbar_invalidate; + events.paint = &window_top_toolbar_paint; +}); // clang-format on static void top_toolbar_init_view_menu(rct_window* window, rct_widget* widget); diff --git a/src/openrct2-ui/windows/TrackDesignManage.cpp b/src/openrct2-ui/windows/TrackDesignManage.cpp index 5c55c8139b..52abc48677 100644 --- a/src/openrct2-ui/windows/TrackDesignManage.cpp +++ b/src/openrct2-ui/windows/TrackDesignManage.cpp @@ -61,68 +61,20 @@ static void window_track_delete_prompt_mouseup(rct_window *w, rct_widgetindex wi static void window_track_delete_prompt_paint(rct_window *w, rct_drawpixelinfo *dpi); // 0x009940EC -static rct_window_event_list window_track_manage_events = { - window_track_manage_close, - window_track_manage_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_manage_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_manage_paint, - nullptr -}; +static rct_window_event_list window_track_manage_events([](auto& events) +{ + events.close = &window_track_manage_close; + events.mouse_up = &window_track_manage_mouseup; + events.text_input = &window_track_manage_textinput; + events.paint = &window_track_manage_paint; +}); // 0x0099415C -static rct_window_event_list window_track_delete_prompt_events = { - nullptr, - window_track_delete_prompt_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_delete_prompt_paint, - nullptr -}; +static rct_window_event_list window_track_delete_prompt_events([](auto& events) +{ + events.mouse_up = &window_track_delete_prompt_mouseup; + events.paint = &window_track_delete_prompt_paint; +}); // clang-format on #pragma endregion diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index c075642960..c00d6e5721 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -79,36 +79,18 @@ static void window_track_place_unknown14(rct_window *w); static void window_track_place_invalidate(rct_window *w); static void window_track_place_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_track_place_events = { - window_track_place_close, - window_track_place_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_place_update, - nullptr, - nullptr, - window_track_place_toolupdate, - window_track_place_tooldown, - nullptr, - nullptr, - window_track_place_toolabort, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_place_unknown14, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_place_invalidate, - window_track_place_paint, - nullptr -}; +static rct_window_event_list window_track_place_events([](auto& events) +{ + events.close = &window_track_place_close; + events.mouse_up = &window_track_place_mouseup; + events.update = &window_track_place_update; + events.tool_update = &window_track_place_toolupdate; + events.tool_down = &window_track_place_tooldown; + events.tool_abort = &window_track_place_toolabort; + events.viewport_rotate = &window_track_place_unknown14; + events.invalidate = &window_track_place_invalidate; + events.paint = &window_track_place_paint; +}); // clang-format on static std::vector _window_track_place_mini_preview; diff --git a/src/openrct2-ui/windows/TrackList.cpp b/src/openrct2-ui/windows/TrackList.cpp index 7641ec3b3f..804a105175 100644 --- a/src/openrct2-ui/windows/TrackList.cpp +++ b/src/openrct2-ui/windows/TrackList.cpp @@ -67,36 +67,19 @@ static void window_track_list_invalidate(rct_window *w); static void window_track_list_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_track_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int32_t scrollIndex); -static rct_window_event_list window_track_list_events = { - window_track_list_close, - window_track_list_mouseup, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_list_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_list_scrollgetsize, - window_track_list_scrollmousedown, - nullptr, - window_track_list_scrollmouseover, - window_track_list_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_track_list_invalidate, - window_track_list_paint, - window_track_list_scrollpaint -}; +static rct_window_event_list window_track_list_events([](auto& events) +{ + events.close = &window_track_list_close; + events.mouse_up = &window_track_list_mouseup; + events.update = &window_track_list_update; + events.get_scroll_size = &window_track_list_scrollgetsize; + events.scroll_mousedown = &window_track_list_scrollmousedown; + events.scroll_mouseover = &window_track_list_scrollmouseover; + events.text_input = &window_track_list_textinput; + events.invalidate = &window_track_list_invalidate; + events.paint = &window_track_list_paint; + events.scroll_paint = &window_track_list_scrollpaint; +}); // clang-format on constexpr uint16_t TRACK_DESIGN_INDEX_UNLOADED = UINT16_MAX; diff --git a/src/openrct2-ui/windows/ViewClipping.cpp b/src/openrct2-ui/windows/ViewClipping.cpp index d3732bb8aa..104dc3fcf5 100644 --- a/src/openrct2-ui/windows/ViewClipping.cpp +++ b/src/openrct2-ui/windows/ViewClipping.cpp @@ -89,36 +89,20 @@ static void window_view_clipping_paint(rct_window* w, rct_drawpixelinfo* dpi); static void window_view_clipping_scrollgetsize(rct_window* w, int scrollIndex, int* width, int* height); static void window_view_clipping_close(); -static rct_window_event_list window_view_clipping_events = { - window_view_clipping_close_button, - window_view_clipping_mouseup, - nullptr, - window_view_clipping_mousedown, - nullptr, - nullptr, - window_view_clipping_update, - nullptr, - nullptr, - window_view_clipping_tool_update, - window_view_clipping_tool_down, - window_view_clipping_tool_drag, - window_view_clipping_tool_up, - nullptr, - nullptr, - window_view_clipping_scrollgetsize, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_view_clipping_invalidate, - window_view_clipping_paint, - nullptr -}; +static rct_window_event_list window_view_clipping_events([](auto& events) +{ + events.close = &window_view_clipping_close_button; + events.mouse_up = &window_view_clipping_mouseup; + events.mouse_down = &window_view_clipping_mousedown; + events.update = &window_view_clipping_update; + events.tool_update = &window_view_clipping_tool_update; + events.tool_down = &window_view_clipping_tool_down; + events.tool_drag = &window_view_clipping_tool_drag; + events.tool_up = &window_view_clipping_tool_up; + events.get_scroll_size = &window_view_clipping_scrollgetsize; + events.invalidate = &window_view_clipping_invalidate; + events.paint = &window_view_clipping_paint; +}); // clang-format on #pragma endregion diff --git a/src/openrct2-ui/windows/Viewport.cpp b/src/openrct2-ui/windows/Viewport.cpp index 6b329b60ea..96488b4814 100644 --- a/src/openrct2-ui/windows/Viewport.cpp +++ b/src/openrct2-ui/windows/Viewport.cpp @@ -47,36 +47,14 @@ static void window_viewport_update(rct_window *w); static void window_viewport_invalidate(rct_window *w); static void window_viewport_paint(rct_window *w, rct_drawpixelinfo *dpi); -static rct_window_event_list window_viewport_events = { - nullptr, - window_viewport_mouseup, - window_viewport_resize, - nullptr, - nullptr, - nullptr, - window_viewport_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_viewport_invalidate, - window_viewport_paint, - nullptr -}; +static rct_window_event_list window_viewport_events([](auto& events) +{ + events.mouse_up = &window_viewport_mouseup; + events.resize = &window_viewport_resize; + events.update = &window_viewport_update; + events.invalidate = &window_viewport_invalidate; + events.paint = &window_viewport_paint; +}); // clang-format on static int32_t _viewportNumber = 1; diff --git a/src/openrct2-ui/windows/Water.cpp b/src/openrct2-ui/windows/Water.cpp index 39a326f07d..942ca892bf 100644 --- a/src/openrct2-ui/windows/Water.cpp +++ b/src/openrct2-ui/windows/Water.cpp @@ -47,36 +47,16 @@ static void window_water_paint(rct_window *w, rct_drawpixelinfo *dpi); static void window_water_textinput(rct_window *w, rct_widgetindex widgetIndex, char *text); static void window_water_inputsize(rct_window *w); -static rct_window_event_list window_water_events = { - window_water_close, - window_water_mouseup, - nullptr, - window_water_mousedown, - nullptr, - nullptr, - window_water_update, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_water_textinput, - nullptr, - nullptr, - nullptr, - nullptr, - nullptr, - window_water_invalidate, - window_water_paint, - nullptr -}; +static rct_window_event_list window_water_events([](auto& events) +{ + events.close = &window_water_close; + events.mouse_up = &window_water_mouseup; + events.mouse_down = &window_water_mousedown; + events.update = &window_water_update; + events.text_input = &window_water_textinput; + events.invalidate = &window_water_invalidate; + events.paint = &window_water_paint; +}); // clang-format on /** diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index 7f73f5614a..b1eab2f657 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -241,6 +241,12 @@ struct rct_window_event_list void (*invalidate)(struct rct_window*); void (*paint)(struct rct_window*, rct_drawpixelinfo*); void (*scroll_paint)(struct rct_window*, rct_drawpixelinfo*, int32_t); + + typedef void (*fnEventInitializer)(rct_window_event_list&); + rct_window_event_list(fnEventInitializer fn) + { + fn(*this); + } }; struct campaign_variables