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:
parent
10e039ba7e
commit
512f97a63b
@ -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() );
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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(){}
|
||||
|
Loading…
x
Reference in New Issue
Block a user