From e16a39686802477b6571a688629bf9b0df47dad3 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 11 Jan 2006 00:54:45 +0000 Subject: [PATCH] split out GrabPreparedActors --- stepmania/src/ScreenManager.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index f42f11af4c..71c777dfa6 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -173,25 +173,34 @@ namespace SONGMAN->Cleanup(); } - /* Called when changing screen groups. Delete all prepared screens, - * reset the screen group and list of persistant screens. */ - void DeletePreparedScreens() + /* Take ownership of all screens and backgrounds that are owned by + * us (this excludes screens where m_bDeleteWhenDone is false). + * Clear the prepared lists. The contents of apOut must be + * freed by the caller. */ + void GrabPreparedActors( vector &apOut ) { - BeforeDeleteScreen(); - FOREACH( LoadedScreen, g_vPreparedScreens, s ) - { if( s->m_bDeleteWhenDone ) - SAFE_DELETE( s->m_pScreen ); - } + apOut.push_back( s->m_pScreen ); g_vPreparedScreens.clear(); FOREACH( Actor*, g_vPreparedBackgrounds, a ) - SAFE_DELETE( *a ); + apOut.push_back( *a ); g_vPreparedBackgrounds.clear(); g_setGroupedScreens.clear(); g_setPersistantScreens.clear(); + } + + /* Called when changing screen groups. Delete all prepared screens, + * reset the screen group and list of persistant screens. */ + void DeletePreparedScreens() + { + vector apActorsToDelete; + GrabPreparedActors( apActorsToDelete ); + BeforeDeleteScreen(); + FOREACH( Actor*, apActorsToDelete, a ) + SAFE_DELETE( *a ); AfterDeleteScreen(); } };