Changeset 8351 for code/trunk/src/libraries/core/GUIManager.cc
- Timestamp:
- Apr 28, 2011, 7:15:14 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/libraries/core/GUIManager.cc
r8079 r8351 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> 50 #else 51 # include <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 } 54 #else 55 # include <ScriptingModules/LuaScriptModule/CEGUILua.h> 56 # include <RendererModules/Ogre/CEGUIOgreImageCodec.h> 57 # include <RendererModules/Ogre/CEGUIOgreRenderer.h> 58 # include <RendererModules/Ogre/CEGUIOgreResourceProvider.h> 59 # include <OgreCamera.h> 60 # include <OgreRenderQueueListener.h> 61 # include <OgreSceneManager.h> 52 62 #endif 53 63 … … 89 99 case CEGUI::Informative: orxonoxLevel = 5; break; 90 100 case CEGUI::Insane: orxonoxLevel = 6; break; 91 default: OrxAssert(false, "CEGUI log level out of range, in pect immediately!");101 default: OrxAssert(false, "CEGUI log level out of range, inspect immediately!"); 92 102 } 93 103 OutputHandler::getOutStream(orxonoxLevel) … … 97 107 } 98 108 }; 109 110 #ifdef ORXONOX_OLD_CEGUI 111 /** Class with the same memory layout as CEGUI::LuaScriptModule. <br> 112 We need this to fix a problem with an uninitialised member variable 113 in CEGUI < 0.7 <br> 114 Notice the "public" modifier for the otherwise private variables. 115 */ 116 class LuaScriptModuleWorkaround : public CEGUI::ScriptModule 117 { 118 public: 119 LuaScriptModuleWorkaround(); 120 ~LuaScriptModuleWorkaround(); 121 122 public: 123 bool d_ownsState; 124 lua_State* d_state; 125 CEGUI::String d_errFuncName; 126 int d_errFuncIndex; 127 CEGUI::String d_activeErrFuncName; 128 int d_activeErrFuncIndex; 129 }; 130 #else 131 /// RenderQueueListener based class used to hook into the ogre rendering system 132 class RQListener : public Ogre::RenderQueueListener 133 { 134 public: 135 /// Callback from Ogre invoked before other stuff in our target queue is rendered 136 void renderQueueEnded(Ogre::uint8 id, const Ogre::String& invocation, bool& skipThisQueue) 137 { 138 if (id == Ogre::RENDER_QUEUE_SKIES_LATE)//Ogre::RENDER_QUEUE_OVERLAY) 139 CEGUI::System::getSingleton().renderGUI(); 140 } 141 }; 142 #endif 99 143 100 144 static CEGUI::MouseButton convertButton(MouseButtonCode::ByEnum button); … … 118 162 */ 119 163 GUIManager::GUIManager(const std::pair<int, int>& mousePosition) 120 : resourceProvider_(NULL) 164 : destroyer_(*this, &GUIManager::cleanup) 165 , guiRenderer_(NULL) 166 , resourceProvider_(NULL) 167 #ifndef ORXONOX_OLD_CEGUI 168 , imageCodec_(NULL) 169 #endif 170 , luaState_(NULL) 171 , scriptModule_(NULL) 172 , guiSystem_(NULL) 121 173 , camera_(NULL) 122 174 { … … 129 181 130 182 // Note: No SceneManager specified yet 131 guiRenderer_.reset(new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000)); 183 #ifdef ORXONOX_OLD_CEGUI 184 guiRenderer_ = new OgreCEGUIRenderer(GraphicsManager::getInstance().getRenderWindow(), Ogre::RENDER_QUEUE_OVERLAY, false, 3000); 132 185 resourceProvider_ = guiRenderer_->createResourceProvider(); 186 #else 187 guiRenderer_ = &OgreRenderer::create(*GraphicsManager::getInstance().getRenderWindow()); 188 // We use our own RenderQueueListener so we can draw UNDER overlays 189 guiRenderer_->setFrameControlExecutionEnabled(false); 190 rqListener_ = new RQListener(); 191 resourceProvider_ = &OgreRenderer::createOgreResourceProvider(); 192 imageCodec_ = &OgreRenderer::createOgreImageCodec(); 193 #endif 133 194 resourceProvider_->setDefaultResourceGroup("General"); 134 195 135 196 // Setup scripting 136 luaState_ .reset(new LuaState());197 luaState_ = new LuaState(); 137 198 rootFileInfo_ = Resource::getInfo("InitialiseGUI.lua"); 138 199 // This is necessary to ensure that input events also use the right resource info when triggering lua functions 139 200 luaState_->setDefaultResourceInfo(this->rootFileInfo_); 140 scriptModule_.reset(new LuaScriptModule(luaState_->getInternalLuaState())); 201 #ifdef ORXONOX_OLD_CEGUI 202 scriptModule_ = new LuaScriptModule(luaState_->getInternalLuaState()); 203 // Ugly workaround: older CEGUILua versions don't initialise the member 204 // d_activeErrFuncIndex at all. That leads to "error in error handling" 205 // problems when a Lua error occurs. 206 // We fix this by setting the member manually. 207 reinterpret_cast<LuaScriptModuleWorkaround*>(scriptModule_)->d_activeErrFuncIndex = LUA_NOREF; 208 luaState_->doString("ORXONOX_OLD_CEGUI = true"); 209 #else 210 scriptModule_ = &LuaScriptModule::create(luaState_->getInternalLuaState()); 211 #endif 141 212 scriptModule_->setDefaultPCallErrorHandler(LuaState::ERROR_HANDLER_NAME); 142 213 … … 144 215 std::auto_ptr<CEGUILogger> ceguiLogger(new CEGUILogger()); 145 216 ceguiLogger->setLogFilename(PathConfig::getLogPathString() + "cegui.log"); 146 // set the log level according to ours (translate by subtracting 1)217 // Set the log level according to ours (translate by subtracting 1) 147 218 ceguiLogger->setLoggingLevel( 148 219 static_cast<LoggingLevel>(OutputHandler::getInstance().getSoftDebugLevel("logFile") - 1)); … … 150 221 151 222 // Create the CEGUI system singleton 152 guiSystem_.reset(new System(guiRenderer_.get(), resourceProvider_, 0, scriptModule_.get())); 223 #ifdef ORXONOX_OLD_CEGUI 224 guiSystem_ = new System(guiRenderer_, resourceProvider_, 0, scriptModule_); 225 // Add functions that have been renamed in newer versions 226 luaState_->doString("CEGUI.SchemeManager.create = CEGUI.SchemeManager.loadScheme"); 227 luaState_->doString("CEGUI.Window.getUnclippedOuterRect = CEGUI.Window.getUnclippedPixelRect"); 228 #else 229 guiSystem_ = &System::create(*guiRenderer_, resourceProvider_, 0, imageCodec_, scriptModule_); 230 #endif 153 231 154 232 // Align CEGUI mouse with OIS mouse … … 175 253 } 176 254 177 /** 178 @brief 179 Basically shuts down CEGUI (member smart pointers) but first unloads our Tolua modules. 180 */ 181 GUIManager::~GUIManager() 182 { 255 void GUIManager::cleanup() 256 { 257 using namespace CEGUI; 258 259 #ifdef ORXONOX_OLD_CEGUI 260 delete guiSystem_; 261 delete guiRenderer_; 262 delete scriptModule_; 263 #else 264 System::destroy(); 265 OgreRenderer::destroyOgreResourceProvider(*resourceProvider_); 266 OgreRenderer::destroyOgreImageCodec(*imageCodec_); 267 OgreRenderer::destroy(*guiRenderer_); 268 LuaScriptModule::destroy(*scriptModule_); 269 delete ceguiLogger_; 270 delete rqListener_; 271 #endif 272 delete luaState_; 183 273 } 184 274 … … 221 311 void GUIManager::setCamera(Ogre::Camera* camera) 222 312 { 223 this->camera_ = camera; 313 #ifdef ORXONOX_OLD_CEGUI 224 314 if (camera == NULL) 225 315 this->guiRenderer_->setTargetSceneManager(0); 226 316 else 227 317 this->guiRenderer_->setTargetSceneManager(camera->getSceneManager()); 318 #else 319 if (camera_ != NULL && camera_->getSceneManager() != NULL) 320 camera_->getSceneManager()->removeRenderQueueListener(rqListener_); 321 if (camera != NULL && camera->getSceneManager() != NULL) 322 camera->getSceneManager()->addRenderQueueListener(rqListener_); 323 #endif 324 this->camera_ = camera; 228 325 } 229 326 … … 321 418 false | False | True | Dontcare 322 419 */ 420 421 #ifdef ORXONOX_PLATFORM_APPLE 422 // There is no non exclusive mode on OS X yet 423 state->setMouseExclusive(TriBool::True); 424 #else 323 425 if (showCursor == TriBool::Dontcare) 324 426 state->setMouseExclusive(TriBool::Dontcare); … … 327 429 else 328 430 state->setMouseExclusive(TriBool::False); 431 #endif 329 432 330 433 if (showCursor == TriBool::True) … … 522 625 The Listbox for which to enable (or disable) tooltips. 523 626 @param enabled 524 Whether to enable or disab elthe tooltips.627 Whether to enable or disable the tooltips. 525 628 */ 526 629 void GUIManager::setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled)
Note: See TracChangeset
for help on using the changeset viewer.