mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-30 02:05:13 +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)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -528,8 +528,6 @@ using close_callback = void (*)();
|
||||
#define WINDOW_LIMIT_MAX 64
|
||||
#define WINDOW_LIMIT_RESERVED 4 // Used to reserve room for the main viewport, toolbars, etc.
|
||||
|
||||
extern rct_window * gWindowFirst;
|
||||
extern rct_window * gWindowNextSlot;
|
||||
extern rct_window * gWindowAudioExclusive;
|
||||
|
||||
extern uint16 gWindowUpdateTicks;
|
||||
@@ -539,6 +537,7 @@ extern colour_t gCurrentWindowColours[4];
|
||||
|
||||
extern bool gDisableErrorWindowSound;
|
||||
|
||||
size_t window_get_index(const rct_window* w);
|
||||
void window_dispatch_update_all();
|
||||
void window_update_all_viewports();
|
||||
void window_update_all();
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef _WINDOW2_H_
|
||||
#define _WINDOW2_H_
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "Window.h"
|
||||
|
||||
struct rct_research_item;
|
||||
@@ -96,6 +96,4 @@ struct rct_window {
|
||||
};
|
||||
|
||||
// rct2: 0x01420078
|
||||
extern rct_window g_window_list[WINDOW_LIMIT_MAX + WINDOW_LIMIT_RESERVED];
|
||||
|
||||
#endif
|
||||
extern std::vector<rct_window> g_window_list;
|
||||
|
||||
Reference in New Issue
Block a user