diff options
-rw-r--r-- | backends/graphics/opengl/opengl-graphics.cpp | 8 | ||||
-rw-r--r-- | backends/graphics/opengl/opengl-graphics.h | 2 | ||||
-rw-r--r-- | backends/graphics/sdl/sdl-graphics.cpp | 8 | ||||
-rw-r--r-- | backends/graphics/sdl/sdl-graphics.h | 2 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 49 |
5 files changed, 47 insertions, 22 deletions
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 187a7aec26..8682c54921 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -62,9 +62,6 @@ OpenGLGraphicsManager::OpenGLGraphicsManager() _gamePalette = (byte *)calloc(sizeof(byte) * 4, 256); _cursorPalette = (byte *)calloc(sizeof(byte) * 4, 256); - - // Register the graphics manager as a event observer - g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 2, false); } OpenGLGraphicsManager::~OpenGLGraphicsManager() { @@ -83,6 +80,11 @@ OpenGLGraphicsManager::~OpenGLGraphicsManager() { delete _cursorTexture; } +void OpenGLGraphicsManager::initEventObserver() { + // Register the graphics manager as a event observer + g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false); +} + // // Feature // diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index 460b3806e8..9b3340aef2 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -57,6 +57,8 @@ public: OpenGLGraphicsManager(); virtual ~OpenGLGraphicsManager(); + virtual void initEventObserver(); + virtual bool hasFeature(OSystem::Feature f); virtual void setFeatureState(OSystem::Feature f, bool enable); virtual bool getFeatureState(OSystem::Feature f); diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp index 2952ad810b..9540f6dcfc 100644 --- a/backends/graphics/sdl/sdl-graphics.cpp +++ b/backends/graphics/sdl/sdl-graphics.cpp @@ -184,9 +184,6 @@ SdlGraphicsManager::SdlGraphicsManager() #else _videoMode.fullscreen = true; #endif - - // Register the graphics manager as a event observer - g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 2, false); } SdlGraphicsManager::~SdlGraphicsManager() { @@ -202,6 +199,11 @@ SdlGraphicsManager::~SdlGraphicsManager() { free(_mouseData); } +void SdlGraphicsManager::initEventObserver() { + // Register the graphics manager as a event observer + g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false); +} + bool SdlGraphicsManager::hasFeature(OSystem::Feature f) { return (f == OSystem::kFeatureFullscreenMode) || diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h index 01ae44222a..7c6f95f134 100644 --- a/backends/graphics/sdl/sdl-graphics.h +++ b/backends/graphics/sdl/sdl-graphics.h @@ -78,6 +78,8 @@ public: SdlGraphicsManager(); virtual ~SdlGraphicsManager(); + virtual void initEventObserver(); + virtual bool hasFeature(OSystem::Feature f); virtual void setFeatureState(OSystem::Feature f, bool enable); virtual bool getFeatureState(OSystem::Feature f); diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 37c29a34f1..3808a50780 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -81,20 +81,7 @@ void OSystem_SDL::initBackend() { // Check if backend has not been initialized assert(!_inited); - // Creates the backend managers, if they don't exist yet (we check - // for this to allow subclasses to provide their own). - if (_eventManager == 0) - _eventManager = new SdlEventManager(this); - - if (_savefileManager == 0) - _savefileManager = new DefaultSaveFileManager(); - - if (_mixerManager == 0) { - _mixerManager = new SdlMixerManager(); - - // Setup and start mixer - _mixerManager->init(); - } + int graphicsManagerType = 0; if (_graphicsManager == 0) { #ifdef USE_OPENGL @@ -110,12 +97,42 @@ void OSystem_SDL::initBackend() { } // If the gfx_mode is from OpenGL, create the OpenGL graphics manager - if (use_opengl) + if (use_opengl) { _graphicsManager = new OpenGLSdlGraphicsManager(); + graphicsManagerType = 1; + } } #endif - if (_graphicsManager == 0) + if (_graphicsManager == 0) { _graphicsManager = new SdlGraphicsManager(); + graphicsManagerType = 0; + } + } + + // Creates the backend managers, if they don't exist yet (we check + // for this to allow subclasses to provide their own). + if (_eventManager == 0) + _eventManager = new SdlEventManager(this); + + // We have to initialize the graphics manager before the event manager + // so the virtual keyboard can be initialized, but we have to add the + // graphics manager as an event observer after initializing the event + // manager. + if (graphicsManagerType == 0) + ((SdlGraphicsManager *)_graphicsManager)->initEventObserver(); +#ifdef USE_OPENGL + else if (graphicsManagerType == 1) + ((OpenGLSdlGraphicsManager *)_graphicsManager)->initEventObserver(); +#endif + + if (_savefileManager == 0) + _savefileManager = new DefaultSaveFileManager(); + + if (_mixerManager == 0) { + _mixerManager = new SdlMixerManager(); + + // Setup and start mixer + _mixerManager->init(); } if (_audiocdManager == 0) |