Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Feb 24, 2011, 4:15:06 PM (14 years ago)
Author:
rgrieder
Message:

Changed destruction handling in GUIManager:
Use a ScopeGuard that gets invoked at destruction, even if the constructor didn't finish.
Now do all the destructive work in GUIManager::cleanup() instead of the d'tor (or using scoped_ptrs).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/kicklib/src/libraries/core/GUIManager.cc

    r7941 r7957  
    112112    */
    113113    GUIManager::GUIManager(const std::pair<int, int>& mousePosition)
    114         : resourceProvider_(NULL)
     114        : destroyer_(*this, &GUIManager::cleanup)
     115        , guiRenderer_(NULL)
     116        , luaState_(NULL)
     117        , scriptModule_(NULL)
     118        , guiSystem_(NULL)
     119        , resourceProvider_(NULL)
    115120        , camera_(NULL)
    116121    {
     
    123128
    124129        // Note: No SceneManager specified yet
    125         guiRenderer_.reset(new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000));
     130        guiRenderer_ = new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000);
    126131        resourceProvider_ = guiRenderer_->createResourceProvider();
    127132        resourceProvider_->setDefaultResourceGroup("General");
    128133
    129134        // Setup scripting
    130         luaState_.reset(new LuaState());
     135        luaState_ = new LuaState();
    131136        rootFileInfo_ = Resource::getInfo("InitialiseGUI.lua");
    132137        // This is necessary to ensure that input events also use the right resource info when triggering lua functions
    133138        luaState_->setDefaultResourceInfo(this->rootFileInfo_);
    134         scriptModule_.reset(new LuaScriptModule(luaState_->getInternalLuaState()));
     139        scriptModule_ = new LuaScriptModule(luaState_->getInternalLuaState());
    135140        scriptModule_->setDefaultPCallErrorHandler(LuaState::ERROR_HANDLER_NAME);
    136141
     
    138143        std::auto_ptr<CEGUILogger> ceguiLogger(new CEGUILogger());
    139144        ceguiLogger->setLogFilename(PathConfig::getLogPathString() + "cegui.log");
    140         // set the log level according to ours (translate by subtracting 1)
     145        // Set the log level according to ours (translate by subtracting 1)
    141146        ceguiLogger->setLoggingLevel(
    142147            static_cast<LoggingLevel>(OutputHandler::getInstance().getSoftDebugLevel("logFile") - 1));
     
    144149
    145150        // Create the CEGUI system singleton
    146         guiSystem_.reset(new System(guiRenderer_.get(), resourceProvider_, 0, scriptModule_.get()));
     151        guiSystem_ = new System(guiRenderer_, resourceProvider_, 0, scriptModule_);
    147152
    148153        // Align CEGUI mouse with OIS mouse
     
    169174    }
    170175
    171     /**
    172     @brief
    173         Basically shuts down CEGUI (member smart pointers) but first unloads our Tolua modules.
    174     */
    175     GUIManager::~GUIManager()
    176     {
     176    void GUIManager::cleanup()
     177    {
     178        using namespace CEGUI;
     179
     180        delete guiSystem_;
     181        delete guiRenderer_;
     182        delete scriptModule_;
     183        delete luaState_;
    177184    }
    178185
Note: See TracChangeset for help on using the changeset viewer.