run cleanups after deleting a screen via pop

don't expose DeletePreparedScreens (unneeded; simplify the interface)
This commit is contained in:
Glenn Maynard
2005-07-23 03:09:55 +00:00
parent a16bb811e6
commit 44dfb60616
2 changed files with 36 additions and 25 deletions
+36 -24
View File
@@ -141,6 +141,39 @@ namespace
}
return false;
}
/* If we're deleting a screen, it's probably releasing texture and other
* resources, so trigger cleanups. */
void AfterDeletingScreen()
{
/* Now that we've actually deleted a screen, it makes sense to clear out
* cached textures. */
TEXTUREMAN->DeleteCachedTextures();
/* Cleanup song data. This can free up a fair bit of memory, so do it after
* deleting screens. */
SONGMAN->Cleanup();
}
/* Called when changing screen groups. Delete all prepared screens,
* reset the screen group and list of persistant screens. */
void DeletePreparedScreens()
{
FOREACH( LoadedScreen, g_vPreparedScreens, s )
{
if( s->m_bDeleteWhenDone )
SAFE_DELETE( s->m_pScreen );
}
g_vPreparedScreens.clear();
FOREACH( Actor*, g_vPreparedBackgrounds, a )
SAFE_DELETE( *a );
g_vPreparedBackgrounds.clear();
g_setGroupedScreens.clear();
g_setPersistantScreens.clear();
AfterDeletingScreen();
}
};
void RegisterScreenClass( const CString& sClassName, CreateScreenFn pfn )
@@ -247,7 +280,10 @@ ScreenMessage ScreenManager::PopTopScreenInternal()
else
{
if( ls.m_bDeleteWhenDone )
{
SAFE_DELETE( ls.m_pScreen );
AfterDeletingScreen();
}
}
return ls.m_SendOnPop;
@@ -517,30 +553,6 @@ bool ScreenManager::ConcurrentlyPrepareScreen( const CString &sScreenName, Scree
return true;
}
void ScreenManager::DeletePreparedScreens()
{
FOREACH( LoadedScreen, g_vPreparedScreens, s )
{
if( s->m_bDeleteWhenDone )
SAFE_DELETE( s->m_pScreen );
}
g_vPreparedScreens.clear();
FOREACH( Actor*, g_vPreparedBackgrounds, a )
SAFE_DELETE( *a );
g_vPreparedBackgrounds.clear();
g_setGroupedScreens.clear();
g_setPersistantScreens.clear();
/* Now that we've actually deleted a screen, it makes sense to clear out
* cached textures. */
TEXTUREMAN->DeleteCachedTextures();
/* Cleanup song data. This can free up a fair bit of memory, so do it after
* deleting screens. */
SONGMAN->Cleanup();
}
void ScreenManager::PushScreen( Screen *pNewScreen, bool bDeleteWhenDone, ScreenMessage SendOnPop )
{
if( g_ScreenStack.size() )