1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-30 02:05:13 +01:00

Refactor widgets state (#23621)

* Refactor windows to not share widget state

* First half of refactoring all the windows

* Refactor the remaining windows, compiles but has issues

* Fix drawing only every second widget

* Remove the need of an terminating widget

* Address WidgetIndex signedness issues; use kWidgetIndexNull more

* Address constexpr issue with Widget content union

* Fix tabs in scenery window

* Fix tabs in object selection window

* Adjust custom widget index for CustomTool events

* Use STR_NONE for default tooltip initialisation

* Adjustment for mingw compiler

* Fix bottom toolbar using the widget declaration not instance

* Remove pointless code in Guest window, handled by SetPage

* Prevent out of bounds crash

* Move scroll widgets initialization to SetPage in Cheats window

* Remove special logic in Options window

* Remove special logic in Park window

* Remove special logic for Player window

* Remove special logic for Research window

* Remove special logic for Ride window

* Remove special logic for Staff window

* Remove special logic for Finances window

* Remove special logic for MapGen window

* Remove special logic for editor objective options window

* Remove special logic for editor scenario options window

* Fix widgets not being set since page is initialized to 0

* Remove more redundant code

* Fix remaining access to widget declarations

* Remove unused variable

* Fix editor object selection tabs on successive windows

---------

Co-authored-by: Aaron van Geffen <aaron@aaronweb.net>
This commit is contained in:
Matt
2025-01-18 14:45:17 +02:00
committed by GitHub
parent 4dac6ff030
commit b9f6b6f754
92 changed files with 574 additions and 1022 deletions

View File

@@ -474,9 +474,9 @@ namespace OpenRCT2::Ui::Windows
// Since the plugin may alter widget positions and sizes during an update event,
// we need to force an update for all list view scrollbars
WidgetIndex widgetIndex = 0;
for (auto widget = widgets; widget->type != WindowWidgetType::Last; widget++)
for (auto& widget : widgets)
{
if (widget->type == WindowWidgetType::Scroll)
if (widget.type == WindowWidgetType::Scroll)
{
WidgetScrollUpdateThumbs(*this, widgetIndex);
}
@@ -511,13 +511,13 @@ namespace OpenRCT2::Ui::Windows
ft.Add<const char*>(desc.Title.c_str());
size_t scrollIndex = 0;
for (auto widget = widgets; widget->type != WindowWidgetType::Last; widget++)
for (const auto& widget : widgets)
{
if (widget->type == WindowWidgetType::Scroll)
if (widget.type == WindowWidgetType::Scroll)
{
auto& listView = _info.ListViews[scrollIndex];
auto wwidth = widget->width() + 1 - 2;
auto wheight = widget->height() + 1 - 2;
auto wwidth = widget.width() + 1 - 2;
auto wheight = widget.height() + 1 - 2;
if (listView.GetScrollbars() == ScrollbarType::Horizontal
|| listView.GetScrollbars() == ScrollbarType::Both)
{
@@ -780,9 +780,9 @@ namespace OpenRCT2::Ui::Windows
std::optional<WidgetIndex> GetViewportWidgetIndex()
{
WidgetIndex widgetIndex = 0;
for (auto widget = widgets; widget->type != WindowWidgetType::Last; widget++)
for (auto& widget : widgets)
{
if (widget->type == WindowWidgetType::Viewport)
if (widget.type == WindowWidgetType::Viewport)
{
return widgetIndex;
}
@@ -943,8 +943,7 @@ namespace OpenRCT2::Ui::Windows
}
}
widgetList.push_back(kWidgetsEnd);
widgets = widgetList.data();
SetWidgets(widgetList);
WindowInitScrollWidgets(*this);
UpdateViewport();