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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user