Refactor direct access to window list

This commit is contained in:
Marijn van der Werf 2017-12-20 12:20:17 +01:00
parent 6493427011
commit 6251577305
4 changed files with 28 additions and 15 deletions

View File

@ -220,7 +220,7 @@ void X8DrawingEngine::EndDraw()
void X8DrawingEngine::PaintWindows()
{
ResetWindowVisbilities();
window_reset_visibilities();
// Redraw dirty regions before updating the viewports, otherwise
// when viewports get panned, they copy dirty pixels
@ -383,16 +383,6 @@ void X8DrawingEngine::ConfigureDirtyGrid()
_dirtyGrid.Blocks = new uint8[_dirtyGrid.BlockColumns * _dirtyGrid.BlockRows];
}
void X8DrawingEngine::ResetWindowVisbilities()
{
// reset window visibility status to unknown
for (rct_window *w = g_window_list; w < gWindowNextSlot; w++)
{
w->visibility = VC_UNKNOWN;
if (w->viewport != nullptr) w->viewport->visibility = VC_UNKNOWN;
}
}
void X8DrawingEngine::DrawAllDirtyBlocks()
{
uint32 dirtyBlockColumns = _dirtyGrid.BlockColumns;

View File

@ -79,10 +79,8 @@ void viewport_init_all()
{
colours_init_maps();
}
if (gWindowNextSlot != NULL) {
window_close_all();
}
gWindowNextSlot = g_window_list;
window_init_all();
// Setting up viewports
for (sint32 i = 0; i < MAX_VIEWPORT_COUNT; i++) {

View File

@ -2657,3 +2657,26 @@ rct_viewport * window_get_previous_viewport(rct_viewport * current)
return NULL;
}
void window_reset_visibilities()
{
// reset window visibility status to unknown
for (rct_window * w = g_window_list; w < gWindowNextSlot; w++)
{
w->visibility = VC_UNKNOWN;
if (w->viewport != NULL)
{
w->viewport->visibility = VC_UNKNOWN;
}
}
}
void window_init_all()
{
if (gWindowNextSlot != NULL)
{
window_close_all();
}
gWindowNextSlot = g_window_list;
}

View File

@ -775,6 +775,8 @@ bool window_is_visible(rct_window* w);
bool scenery_tool_is_active();
rct_viewport * window_get_previous_viewport(rct_viewport * current);
void window_reset_visibilities();
void window_init_all();
//Cheat: in-game land ownership editor
void toggle_ingame_land_ownership_editor();