1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-22 06:23:04 +01:00

Convert g_window_list to a std::vector

This commit is contained in:
Ted John
2018-06-16 02:14:59 +01:00
parent a716b4aa28
commit 0f6138f8b6
9 changed files with 472 additions and 437 deletions

View File

@@ -238,15 +238,20 @@ void viewport_adjust_for_map_height(sint16* x, sint16* y, sint16 *z)
static void viewport_redraw_after_shift(rct_drawpixelinfo *dpi, rct_window *window, rct_viewport *viewport, sint32 x, sint32 y)
{
// sub-divide by intersecting windows
if (window < gWindowNextSlot)
if (window != nullptr)
{
// skip current window and non-intersecting windows
if (viewport == window->viewport ||
viewport->x + viewport->width <= window->x ||
viewport->x >= window->x + window->width ||
viewport->y + viewport->height <= window->y ||
viewport->y >= window->y + window->height){
viewport_redraw_after_shift(dpi, window + 1, viewport, x, y);
viewport->y >= window->y + window->height)
{
auto nextWindowIndex = window_get_index(window) + 1;
auto nextWindow = nextWindowIndex >= g_window_list.size() ?
nullptr :
&g_window_list[nextWindowIndex];
viewport_redraw_after_shift(dpi, nextWindow, viewport, x, y);
return;
}
@@ -355,12 +360,11 @@ static void viewport_redraw_after_shift(rct_drawpixelinfo *dpi, rct_window *wind
}
}
static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* w, rct_viewport* viewport, sint16 x_diff, sint16 y_diff)
static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* window, rct_viewport* viewport, sint16 x_diff, sint16 y_diff)
{
rct_window* orignal_w = w;
sint32 left = 0, right = 0, top = 0, bottom = 0;
for (; w < gWindowNextSlot; w++){
for (auto i = window_get_index(window); i < g_window_list.size(); i++)
{
auto w = &g_window_list[i];
if (!(w->flags & WF_TRANSPARENT)) continue;
if (w->viewport == viewport) continue;
@@ -370,10 +374,10 @@ static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* w, rct_vie
if (viewport->y + viewport->height <= w->y)continue;
if (w->y + w->height <= viewport->y) continue;
left = w->x;
right = w->x + w->width;
top = w->y;
bottom = w->y + w->height;
auto left = w->x;
auto right = w->x + w->width;
auto top = w->y;
auto bottom = w->y + w->height;
if (left < viewport->x)left = viewport->x;
if (right > viewport->x + viewport->width) right = viewport->x + viewport->width;
@@ -387,8 +391,7 @@ static void viewport_shift_pixels(rct_drawpixelinfo *dpi, rct_window* w, rct_vie
window_draw_all(dpi, left, top, right, bottom);
}
w = orignal_w;
viewport_redraw_after_shift(dpi, w, viewport, x_diff, y_diff);
viewport_redraw_after_shift(dpi, window, viewport, x_diff, y_diff);
}
static void viewport_move(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport)