Mercurial > fife-parpg
comparison engine/core/controller/engine.cpp @ 654:5d6b1820b953
* Added the ability to change screen modes on the fly. This works both in OpenGL and SDL modes.
* Added IEngineChangeListener so the client can update the cameras viewport if the screen mode has been changed. I chose to do it this way because the engine has no way to know which camera it should update. It will be up to the client to do it.
* The cursor surface is now correctly freed when exiting.
* Added DeviceCaps::getNearestScreenMode() for the client to request a supported screen mode.
closes[t:315]
author | prock@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Thu, 21 Oct 2010 18:50:50 +0000 |
parents | 01acc9fc35ea |
children | e3140f01749d |
comparison
equal
deleted
inserted
replaced
653:01acc9fc35ea | 654:5d6b1820b953 |
---|---|
72 #include "view/renderers/coordinaterenderer.h" | 72 #include "view/renderers/coordinaterenderer.h" |
73 #include "view/renderers/floatingtextrenderer.h" | 73 #include "view/renderers/floatingtextrenderer.h" |
74 #include "view/renderers/cellselectionrenderer.h" | 74 #include "view/renderers/cellselectionrenderer.h" |
75 #include "view/renderers/blockinginforenderer.h" | 75 #include "view/renderers/blockinginforenderer.h" |
76 #include "view/renderers/genericrenderer.h" | 76 #include "view/renderers/genericrenderer.h" |
77 #include "video/image.h" | |
78 #include "gui/console/console.h" | |
77 #include "engine.h" | 79 #include "engine.h" |
78 | 80 |
79 #ifdef USE_COCOA | 81 #ifdef USE_COCOA |
80 | 82 |
81 #include <objc/message.h> | 83 #include <objc/message.h> |
103 m_model(0), | 105 m_model(0), |
104 m_gui_graphics(0), | 106 m_gui_graphics(0), |
105 m_logmanager(0), | 107 m_logmanager(0), |
106 m_cursor(0), | 108 m_cursor(0), |
107 m_settings(), | 109 m_settings(), |
108 m_devcaps(){ | 110 m_devcaps(), |
111 m_changelisteners() { | |
109 #ifdef USE_COCOA | 112 #ifdef USE_COCOA |
110 // The next lines ensure that Cocoa is initialzed correctly. | 113 // The next lines ensure that Cocoa is initialzed correctly. |
111 // This is needed for SDL to function properly on MAC OS X. | 114 // This is needed for SDL to function properly on MAC OS X. |
112 void* cocoa_lib; | 115 void* cocoa_lib; |
113 cocoa_lib = dlopen( "/System/Library/Frameworks/Cocoa.framework/Cocoa", RTLD_LAZY ); | 116 cocoa_lib = dlopen( "/System/Library/Frameworks/Cocoa.framework/Cocoa", RTLD_LAZY ); |
127 return m_settings; | 130 return m_settings; |
128 } | 131 } |
129 | 132 |
130 const DeviceCaps& Engine::getDeviceCaps() const { | 133 const DeviceCaps& Engine::getDeviceCaps() const { |
131 return m_devcaps; | 134 return m_devcaps; |
135 } | |
136 | |
137 Image* Engine::changeScreenMode(const ScreenMode& mode){ | |
138 m_cursor->invalidate(); | |
139 m_imagepool->invalidateLoadedImages(); | |
140 m_defaultfont->invalidate(); | |
141 m_guimanager->invalidateFonts(); | |
142 | |
143 Image* screen = m_renderbackend->setScreenMode(mode); | |
144 | |
145 m_guimanager->resizeTopContainer(0,0,mode.getWidth(), mode.getHeight()); | |
146 m_guimanager->getConsole()->reLayout(); | |
147 | |
148 std::vector<IEngineChangeListener*>::iterator i = m_changelisteners.begin(); | |
149 while (i != m_changelisteners.end()) { | |
150 (*i)->onScreenModeChanged(mode); | |
151 ++i; | |
152 } | |
153 | |
154 return screen; | |
132 } | 155 } |
133 | 156 |
134 void Engine::preInit() { | 157 void Engine::preInit() { |
135 m_logmanager = LogManager::instance(); | 158 m_logmanager = LogManager::instance(); |
136 | 159 |
246 m_defaultfont = m_guimanager->setDefaultFont( | 269 m_defaultfont = m_guimanager->setDefaultFont( |
247 m_settings.getDefaultFontPath(), | 270 m_settings.getDefaultFontPath(), |
248 m_settings.getDefaultFontSize(), | 271 m_settings.getDefaultFontSize(), |
249 m_settings.getDefaultFontGlyphs()); | 272 m_settings.getDefaultFontGlyphs()); |
250 FL_LOG(_log, "Initializing GUI manager"); | 273 FL_LOG(_log, "Initializing GUI manager"); |
251 m_guimanager->init(m_gui_graphics, m_settings.getScreenWidth(), m_settings.getScreenHeight()); | 274 m_guimanager->init(m_gui_graphics, m_renderbackend->getScreenWidth(), m_renderbackend->getScreenHeight()); |
252 FL_LOG(_log, "GUI manager initialized"); | 275 FL_LOG(_log, "GUI manager initialized"); |
253 SDL_EnableUNICODE(1); | 276 SDL_EnableUNICODE(1); |
254 | 277 |
255 FL_LOG(_log, "Creating sound manager"); | 278 FL_LOG(_log, "Creating sound manager"); |
256 m_soundmanager = new SoundManager(m_soundclippool); | 279 m_soundmanager = new SoundManager(m_soundclippool); |
341 } | 364 } |
342 | 365 |
343 void Engine::finalizePumping() { | 366 void Engine::finalizePumping() { |
344 // nothing here at the moment.. | 367 // nothing here at the moment.. |
345 } | 368 } |
369 | |
370 void Engine::addChangeListener(IEngineChangeListener* listener) { | |
371 m_changelisteners.push_back(listener); | |
372 } | |
373 | |
374 void Engine::removeChangeListener(IEngineChangeListener* listener) { | |
375 std::vector<IEngineChangeListener*>::iterator i = m_changelisteners.begin(); | |
376 while (i != m_changelisteners.end()) { | |
377 if ((*i) == listener) { | |
378 m_changelisteners.erase(i); | |
379 return; | |
380 } | |
381 ++i; | |
382 } | |
383 } | |
346 }//FIFE | 384 }//FIFE |
347 | 385 |
348 /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ | 386 /* vim: set noexpandtab: set shiftwidth=2: set tabstop=2: */ |