From: <au...@us...> - 2009-10-13 23:43:27
|
Revision: 4116 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=4116&view=rev Author: auria Date: 2009-10-13 23:43:19 +0000 (Tue, 13 Oct 2009) Log Message: ----------- Fixed resolution switch Modified Paths: -------------- main/branches/irrlicht/src/guiengine/abstract_state_manager.cpp main/branches/irrlicht/src/guiengine/engine.cpp main/branches/irrlicht/src/guiengine/screen.cpp main/branches/irrlicht/src/guiengine/screen.hpp Modified: main/branches/irrlicht/src/guiengine/abstract_state_manager.cpp =================================================================== --- main/branches/irrlicht/src/guiengine/abstract_state_manager.cpp 2009-10-13 19:14:17 UTC (rev 4115) +++ main/branches/irrlicht/src/guiengine/abstract_state_manager.cpp 2009-10-13 23:43:19 UTC (rev 4116) @@ -123,7 +123,11 @@ 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() ); Modified: main/branches/irrlicht/src/guiengine/engine.cpp =================================================================== --- main/branches/irrlicht/src/guiengine/engine.cpp 2009-10-13 19:14:17 UTC (rev 4115) +++ main/branches/irrlicht/src/guiengine/engine.cpp 2009-10-13 23:43:19 UTC (rev 4116) @@ -50,7 +50,7 @@ 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 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(); Modified: main/branches/irrlicht/src/guiengine/screen.cpp =================================================================== --- main/branches/irrlicht/src/guiengine/screen.cpp 2009-10-13 19:14:17 UTC (rev 4115) +++ main/branches/irrlicht/src/guiengine/screen.cpp 2009-10-13 23:43:19 UTC (rev 4116) @@ -59,6 +59,12 @@ m_render_3d = false; } +void Screen::forgetWhatWasLoaded() +{ + m_loaded = false; + m_widgets.clearAndDeleteAll(); +} + #if 0 #pragma mark - #pragma mark Load/Init Modified: main/branches/irrlicht/src/guiengine/screen.hpp =================================================================== --- main/branches/irrlicht/src/guiengine/screen.hpp 2009-10-13 19:14:17 UTC (rev 4115) +++ main/branches/irrlicht/src/guiengine/screen.hpp 2009-10-13 23:43:19 UTC (rev 4116) @@ -35,12 +35,18 @@ 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 @@ 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 @@ */ 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(){} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |