Changeset 8283 for code/branches/kicklib2/src/libraries/core/GUIManager.cc
- Timestamp:
- Apr 21, 2011, 6:32:28 PM (14 years ago)
- Location:
- code/branches/kicklib2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/kicklib2
- Property svn:mergeinfo changed
/code/branches/kicklib merged: 7940-7948,7950-7951,7953,7956-7957,7959-7961,7964-7965,7967-7969,7971,7973-7974
- Property svn:mergeinfo changed
-
code/branches/kicklib2/src/libraries/core/GUIManager.cc
r8079 r8283 30 30 #include "GUIManager.h" 31 31 32 #include <memory> 32 33 #include <boost/bind.hpp> 33 #include <memory> 34 #include <OgreRenderQueue.h> 35 #include <OgreRenderWindow.h> 34 36 35 37 #include <CEGUIDefaultLogger.h> … … 43 45 #include <elements/CEGUIListbox.h> 44 46 #include <elements/CEGUIListboxItem.h> 45 #include <ogreceguirenderer/OgreCEGUIRenderer.h> 46 47 #include "SpecialConfig.h" // Configures the macro below 48 #ifdef CEGUILUA_USE_INTERNAL_LIBRARY 49 # include <ceguilua/CEGUILua.h> 47 48 #ifdef ORXONOX_OLD_CEGUI 49 # include <CEGUILua.h> 50 # include <ogreceguirenderer/OgreCEGUIRenderer.h> 51 extern "C" { 52 # include <lauxlib.h> 53 } 50 54 #else 51 # include <CEGUILua.h> 55 # include <ScriptingModules/LuaScriptModule/CEGUILua.h> 56 # include <RendererModules/Ogre/CEGUIOgreImageCodec.h> 57 # include <RendererModules/Ogre/CEGUIOgreRenderer.h> 58 # include <RendererModules/Ogre/CEGUIOgreResourceProvider.h> 52 59 #endif 53 60 … … 89 96 case CEGUI::Informative: orxonoxLevel = 5; break; 90 97 case CEGUI::Insane: orxonoxLevel = 6; break; 91 default: OrxAssert(false, "CEGUI log level out of range, in pect immediately!");98 default: OrxAssert(false, "CEGUI log level out of range, inspect immediately!"); 92 99 } 93 100 OutputHandler::getOutStream(orxonoxLevel) … … 97 104 } 98 105 }; 106 107 #ifdef ORXONOX_OLD_CEGUI 108 /** Class with the same memory layout as CEGUI::LuaScriptModule. <br> 109 We need this to fix a problem with an uninitialised member variable 110 in CEGUI < 0.7 <br> 111 Notice that "public" modifier for the otherwise private variables. 112 */ 113 class CEGUILUA_API LuaScriptModuleWorkaround : public CEGUI::ScriptModule 114 { 115 public: 116 LuaScriptModuleWorkaround(); 117 ~LuaScriptModuleWorkaround(); 118 119 public: 120 bool d_ownsState; 121 lua_State* d_state; 122 CEGUI::String d_errFuncName; 123 int d_errFuncIndex; 124 CEGUI::String d_activeErrFuncName; 125 int d_activeErrFuncIndex; 126 }; 127 #endif 99 128 100 129 static CEGUI::MouseButton convertButton(MouseButtonCode::ByEnum button); … … 118 147 */ 119 148 GUIManager::GUIManager(const std::pair<int, int>& mousePosition) 120 : resourceProvider_(NULL) 149 : destroyer_(*this, &GUIManager::cleanup) 150 , guiRenderer_(NULL) 151 , luaState_(NULL) 152 , scriptModule_(NULL) 153 , guiSystem_(NULL) 154 , resourceProvider_(NULL) 155 #ifndef ORXONOX_OLD_CEGUI 156 , imageCodec_(NULL) 157 #endif 121 158 , camera_(NULL) 122 159 { … … 129 166 130 167 // Note: No SceneManager specified yet 131 guiRenderer_.reset(new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000)); 168 #ifdef ORXONOX_OLD_CEGUI 169 guiRenderer_ = new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000); 132 170 resourceProvider_ = guiRenderer_->createResourceProvider(); 171 #else 172 guiRenderer_ = &OgreRenderer::create(*GraphicsManager::getInstance().getRenderWindow()); 173 resourceProvider_ = &OgreRenderer::createOgreResourceProvider(); 174 imageCodec_ = &OgreRenderer::createOgreImageCodec(); 175 #endif 133 176 resourceProvider_->setDefaultResourceGroup("General"); 134 177 135 178 // Setup scripting 136 luaState_ .reset(new LuaState());179 luaState_ = new LuaState(); 137 180 rootFileInfo_ = Resource::getInfo("InitialiseGUI.lua"); 138 181 // This is necessary to ensure that input events also use the right resource info when triggering lua functions 139 182 luaState_->setDefaultResourceInfo(this->rootFileInfo_); 140 scriptModule_.reset(new LuaScriptModule(luaState_->getInternalLuaState())); 183 #ifdef ORXONOX_OLD_CEGUI 184 scriptModule_ = new LuaScriptModule(luaState_->getInternalLuaState()); 185 // Ugly workaround: older CEGUILua versions don't initialise the member 186 // d_activeErrFuncIndex at all. That leads to "error in error handling" 187 // problems when a Lua error occurs. 188 // We fix this by setting the member manually. 189 reinterpret_cast<LuaScriptModuleWorkaround*>(scriptModule_)->d_activeErrFuncIndex = LUA_NOREF; 190 luaState_->doString("ORXONOX_OLD_CEGUI = true"); 191 #else 192 scriptModule_ = &LuaScriptModule::create(luaState_->getInternalLuaState()); 193 #endif 141 194 scriptModule_->setDefaultPCallErrorHandler(LuaState::ERROR_HANDLER_NAME); 142 195 … … 144 197 std::auto_ptr<CEGUILogger> ceguiLogger(new CEGUILogger()); 145 198 ceguiLogger->setLogFilename(PathConfig::getLogPathString() + "cegui.log"); 146 // set the log level according to ours (translate by subtracting 1)199 // Set the log level according to ours (translate by subtracting 1) 147 200 ceguiLogger->setLoggingLevel( 148 201 static_cast<LoggingLevel>(OutputHandler::getInstance().getSoftDebugLevel("logFile") - 1)); … … 150 203 151 204 // Create the CEGUI system singleton 152 guiSystem_.reset(new System(guiRenderer_.get(), resourceProvider_, 0, scriptModule_.get())); 205 #ifdef ORXONOX_OLD_CEGUI 206 guiSystem_ = new System(guiRenderer_, resourceProvider_, 0, scriptModule_); 207 // Add functions that have been renamed in newer versions 208 luaState_->doString("CEGUI.SchemeManager.create = CEGUI.SchemeManager.loadScheme"); 209 luaState_->doString("CEGUI.Window.getUnclippedOuterRect = CEGUI.Window.getUnclippedPixelRect"); 210 #else 211 guiSystem_ = &System::create(*guiRenderer_, resourceProvider_, 0, imageCodec_, scriptModule_); 212 #endif 153 213 154 214 // Align CEGUI mouse with OIS mouse … … 175 235 } 176 236 177 /** 178 @brief 179 Basically shuts down CEGUI (member smart pointers) but first unloads our Tolua modules. 180 */ 181 GUIManager::~GUIManager() 182 { 237 void GUIManager::cleanup() 238 { 239 using namespace CEGUI; 240 241 #ifdef ORXONOX_OLD_CEGUI 242 delete guiSystem_; 243 delete guiRenderer_; 244 delete scriptModule_; 245 #else 246 System::destroy(); 247 OgreRenderer::destroyOgreResourceProvider(*resourceProvider_); 248 OgreRenderer::destroyOgreImageCodec(*imageCodec_); 249 OgreRenderer::destroy(*guiRenderer_); 250 LuaScriptModule::destroy(*scriptModule_); 251 #endif 252 delete luaState_; 183 253 } 184 254 … … 222 292 { 223 293 this->camera_ = camera; 294 #ifdef ORXONOX_OLD_CEGUI 224 295 if (camera == NULL) 225 296 this->guiRenderer_->setTargetSceneManager(0); 226 297 else 227 298 this->guiRenderer_->setTargetSceneManager(camera->getSceneManager()); 299 #endif 228 300 } 229 301 … … 522 594 The Listbox for which to enable (or disable) tooltips. 523 595 @param enabled 524 Whether to enable or disab elthe tooltips.596 Whether to enable or disable the tooltips. 525 597 */ 526 598 void GUIManager::setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled) … … 535 607 { 536 608 this->guiRenderer_->setDisplaySize(CEGUI::Size((float)newWidth, (float)newHeight)); 609 #else 610 this->guiRenderer_->setDisplaySize(CEGUI::Size((float)newWidth, (float)newHeight)); 611 #endif 537 612 } 538 613
Note: See TracChangeset
for help on using the changeset viewer.