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: */