Fixed resolution switch

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@4116 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2009-10-13 23:43:19 +00:00
parent 10e039ba7e
commit 512f97a63b
4 changed files with 43 additions and 7 deletions

View File

@ -123,7 +123,11 @@ void AbstractStateManager::reshowTopMostMenu()
assert(m_game_mode != GAME);
// Send tear-down event to previous menu
if (m_menu_stack.size() > 0) getCurrentScreen()->tearDown();
if (m_menu_stack.size() > 0)
{
Screen* currScreen = getCurrentScreen();
if (currScreen != NULL) getCurrentScreen()->tearDown();
}
switchToScreen( m_menu_stack[m_menu_stack.size()-1].c_str() );

View File

@ -50,7 +50,7 @@ namespace GUIEngine
using namespace Private;
ptr_vector<Widget, REF> needsUpdate;
ptr_vector<Screen, HOLD> g_loaded_screens;
ptr_vector<Screen, REF> g_loaded_screens;
float dt = 0;
@ -122,9 +122,12 @@ void reshowCurrentScreen()
// -----------------------------------------------------------------------------
void cleanUp()
{
if(g_skin != NULL) delete g_skin;
if (g_skin != NULL) delete g_skin;
g_skin = NULL;
g_loaded_screens.clearAndDeleteAll();
for (int i=0; i<g_loaded_screens.size(); i++)
{
g_loaded_screens[i].forgetWhatWasLoaded();
}
g_current_screen = NULL;
needsUpdate.clearWithoutDeleting();

View File

@ -59,6 +59,12 @@ Screen::Screen()
m_render_3d = false;
}
void Screen::forgetWhatWasLoaded()
{
m_loaded = false;
m_widgets.clearAndDeleteAll();
}
#if 0
#pragma mark -
#pragma mark Load/Init

View File

@ -35,12 +35,18 @@ namespace GUIEngine
template<typename SCREEN>
class ScreenSingleton
{
public:
static SCREEN* getInstance()
// Weird code to work around C++ (making it easy to use)
// Used to create, get and delete singleton instance
static SCREEN* singletonOperate(bool deleteInstance=false)
{
static SCREEN* singleton = NULL;
if (deleteInstance && singleton != NULL)
{
singleton = NULL;
return NULL;
}
if (singleton == NULL)
{
singleton = new SCREEN();
@ -49,6 +55,19 @@ namespace GUIEngine
return singleton;
}
public:
~ScreenSingleton()
{
singletonOperate(true);
}
static SCREEN* getInstance()
{
return singletonOperate();
}
};
void parseScreenFileDiv(irr::io::IrrXMLReader* xml, ptr_vector<Widget>& append_to);
@ -84,6 +103,10 @@ namespace GUIEngine
*/
bool m_inited;
/** Next time this menu needs to be shown, don't use cached values, re-calculate everything.
(useful e.g. on reschange, when sizes have changed and must be re-calculated) */
void forgetWhatWasLoaded();
Screen(); /**< creates a dummy incomplete object; only use to override behaviour in sub-class */
Screen(const char* filename);
virtual ~Screen(){}