diff options
Diffstat (limited to 'backends/platform')
-rw-r--r-- | backends/platform/posix/posix.cpp | 68 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 222 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.h | 12 | ||||
-rw-r--r-- | backends/platform/win32/win32.cpp | 69 | ||||
-rw-r--r-- | backends/platform/win32/win32.h | 2 |
5 files changed, 51 insertions, 322 deletions
diff --git a/backends/platform/posix/posix.cpp b/backends/platform/posix/posix.cpp index 8942ba1408..61871c7f82 100644 --- a/backends/platform/posix/posix.cpp +++ b/backends/platform/posix/posix.cpp @@ -31,7 +31,6 @@ #include "common/EventRecorder.h" #include "backends/saves/posix/posix-saves.h" - #include "backends/audiocd/sdl/sdl-audiocd.h" #include "backends/events/sdl/sdl-events.h" #include "backends/mutex/sdl/sdl-mutex.h" @@ -43,76 +42,17 @@ #define DEFAULT_CONFIG_FILE ".scummvmrc" OSystem_POSIX::OSystem_POSIX() { + // Initialze File System Factory _fsFactory = new POSIXFilesystemFactory(); } -OSystem_POSIX::~OSystem_POSIX() { - deinit(); -} - void OSystem_POSIX::initBackend() { - assert(!_inited); - - uint32 sdlFlags = 0; - - if (ConfMan.hasKey("disable_sdl_parachute")) - sdlFlags |= SDL_INIT_NOPARACHUTE; - - if (SDL_Init(sdlFlags) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } - - // Enable unicode support if possible - SDL_EnableUNICODE(1); - - // Create and hook up the mutex manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_mutexManager == 0) { - _mutexManager = new SdlMutexManager(); - } - - // Create and hook up the event manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_eventManager == 0) { - _eventManager = new SdlEventManager(this); - } - - // Create the savefile manager, if none exists yet (we check for this to - // allow subclasses to provide their own). - if (_savefileManager == 0) { + // Create the savefile manager + if (_savefileManager == 0) _savefileManager = new POSIXSaveFileManager(); - } - - // Create and hook up the mixer, if none exists yet (we check for this to - // allow subclasses to provide their own). - if (_mixer == 0) { - if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } - - _mixer = new SdlMixerImpl(this); - } - - // Create and hook up the timer manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_timerManager == 0) { - _timerManager = new SdlTimerManager(); - } - - // Create and hook up the graphics manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_graphicsManager == 0) { - _graphicsManager = new SdlGraphicsManager(); - } - - if (_audiocdManager == 0) { - _audiocdManager = (AudioCDManager *)new SdlAudioCDManager(); - } // Invoke parent implementation of this method - OSystem::initBackend(); - - _inited = true; + OSystem_SDL::initBackend(); } Common::String OSystem_POSIX::getDefaultConfigFileName() { diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 2c1ecd2f27..b3b99a2e3a 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -23,12 +23,6 @@ * */ -#if defined(WIN32) -#include <windows.h> -// winnt.h defines ARRAYSIZE, but we want our own one... - this is needed before including util.h -#undef ARRAYSIZE -#endif - #include "backends/platform/sdl/sdl.h" #include "common/archive.h" #include "common/config-manager.h" @@ -36,11 +30,7 @@ #include "common/util.h" #include "common/EventRecorder.h" -#ifdef UNIX - #include "backends/saves/posix/posix-saves.h" -#else - #include "backends/saves/default/default-saves.h" -#endif +#include "backends/saves/default/default-saves.h" #include "backends/audiocd/sdl/sdl-audiocd.h" #include "backends/events/sdl/sdl-events.h" #include "backends/mutex/sdl/sdl-mutex.h" @@ -49,129 +39,73 @@ #include "icons/scummvm.xpm" -/* - * Include header files needed for the getFilesystemFactory() method. - */ -#if defined(__amigaos4__) - #include "backends/fs/amigaos4/amigaos4-fs-factory.h" -#elif defined(UNIX) - #include "backends/fs/posix/posix-fs-factory.h" -#elif defined(WIN32) - #include "backends/fs/windows/windows-fs-factory.h" -#endif - -#if defined(UNIX) -#ifdef MACOSX -#define DEFAULT_CONFIG_FILE "Library/Preferences/ScummVM Preferences" -#elif defined(SAMSUNGTV) -#define DEFAULT_CONFIG_FILE "/dtv/usb/sda1/.scummvmrc" -#else -#define DEFAULT_CONFIG_FILE ".scummvmrc" -#endif -#else #define DEFAULT_CONFIG_FILE "scummvm.ini" -#endif - -#if defined(MACOSX) || defined(IPHONE) -#include "CoreFoundation/CoreFoundation.h" -#endif #include <time.h> -void OSystem_SDL::initBackend() { - assert(!_inited); +OSystem_SDL::OSystem_SDL() + : + _inited(false), + _initedSDL(false) { - uint32 sdlFlags = 0; +} - if (ConfMan.hasKey("disable_sdl_parachute")) - sdlFlags |= SDL_INIT_NOPARACHUTE; +OSystem_SDL::~OSystem_SDL() { + deinit(); +} - if (SDL_Init(sdlFlags) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } +void OSystem_SDL::initBackend() { + // Check if backend has not been initialized + assert(!_inited); - // Enable unicode support if possible - SDL_EnableUNICODE(1); + // Initialize SDL + initSDL(); - // Create and hook up the mutex manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_mutexManager == 0) { + // Creates the backend managers, if they don't exist yet (we check + // for this to allow subclasses to provide their own). + if (_mutexManager == 0) _mutexManager = new SdlMutexManager(); - } - // Create and hook up the event manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_eventManager == 0) { + if (_eventManager == 0) _eventManager = new SdlEventManager(this); - } - // Create the savefile manager, if none exists yet (we check for this to - // allow subclasses to provide their own). - if (_savefileManager == 0) { -#ifdef UNIX - _savefileManager = new POSIXSaveFileManager(); -#else - _savefileManager = new DefaultSaveFileManager(); -#endif - } - - // Create and hook up the mixer, if none exists yet (we check for this to - // allow subclasses to provide their own). - if (_mixer == 0) { - if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } + if (_savefileManager == 0) + _savefileManager = new DefaultSaveFileManager(); + if (_mixer == 0) _mixer = new SdlMixerImpl(this); - } - // Create and hook up the timer manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_timerManager == 0) { + if (_timerManager == 0) _timerManager = new SdlTimerManager(); - } - // Create and hook up the graphics manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_graphicsManager == 0) { + if (_graphicsManager == 0) _graphicsManager = new SdlGraphicsManager(); - } - if (_audiocdManager == 0) { - _audiocdManager = (AudioCDManager *)new SdlAudioCDManager(); - } + if (_audiocdManager == 0) + _audiocdManager = new SdlAudioCDManager(); -#if !defined(MACOSX) && !defined(__SYMBIAN32__) // Setup a custom program icon. - // Don't set icon on OS X, as we use a nicer external icon there. - // Don't for Symbian: it uses the EScummVM.aif file for the icon. setupIcon(); -#endif - - // Invoke parent implementation of this method - OSystem::initBackend(); _inited = true; } -OSystem_SDL::OSystem_SDL() - : - _inited(false) { - #if defined(__amigaos4__) - _fsFactory = new AmigaOSFilesystemFactory(); - #elif defined(UNIX) - _fsFactory = new POSIXFilesystemFactory(); - #elif defined(WIN32) - _fsFactory = new WindowsFilesystemFactory(); - #elif defined(__SYMBIAN32__) - // Do nothing since its handled by the Symbian SDL inheritance - #else - #error Unknown and unsupported FS backend - #endif -} +void OSystem_SDL::initSDL() { + // Check if SDL has not been initialized + if (!_initedSDL) { + uint32 sdlFlags = 0; + if (ConfMan.hasKey("disable_sdl_parachute")) + sdlFlags |= SDL_INIT_NOPARACHUTE; -OSystem_SDL::~OSystem_SDL() { - deinit(); + // Initialize SDL (SDL Subsystems are initiliazed in the corresponding sdl managers) + if (SDL_Init(sdlFlags) == -1) + error("Could not initialize SDL: %s", SDL_GetError()); + + // Enable unicode support if possible + SDL_EnableUNICODE(1); + + _initedSDL = true; + } } void OSystem_SDL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { @@ -185,86 +119,11 @@ void OSystem_SDL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) } #endif -#ifdef MACOSX - // Get URL of the Resource directory of the .app bundle - CFURLRef fileUrl = CFBundleCopyResourcesDirectoryURL(CFBundleGetMainBundle()); - if (fileUrl) { - // Try to convert the URL to an absolute path - UInt8 buf[MAXPATHLEN]; - if (CFURLGetFileSystemRepresentation(fileUrl, true, buf, sizeof(buf))) { - // Success: Add it to the search path - Common::String bundlePath((const char *)buf); - s.add("__OSX_BUNDLE__", new Common::FSDirectory(bundlePath), priority); - } - CFRelease(fileUrl); - } - -#endif - } Common::String OSystem_SDL::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; -#if defined (WIN32) && !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) - OSVERSIONINFO win32OsVersion; - ZeroMemory(&win32OsVersion, sizeof(OSVERSIONINFO)); - win32OsVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&win32OsVersion); - // Check for non-9X version of Windows. - if (win32OsVersion.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS) { - // Use the Application Data directory of the user profile. - if (win32OsVersion.dwMajorVersion >= 5) { - if (!GetEnvironmentVariable("APPDATA", configFile, sizeof(configFile))) - error("Unable to access application data directory"); - } else { - if (!GetEnvironmentVariable("USERPROFILE", configFile, sizeof(configFile))) - error("Unable to access user profile directory"); - - strcat(configFile, "\\Application Data"); - CreateDirectory(configFile, NULL); - } - - strcat(configFile, "\\ScummVM"); - CreateDirectory(configFile, NULL); - strcat(configFile, "\\" DEFAULT_CONFIG_FILE); - - FILE *tmp = NULL; - if ((tmp = fopen(configFile, "r")) == NULL) { - // Check windows directory - char oldConfigFile[MAXPATHLEN]; - GetWindowsDirectory(oldConfigFile, MAXPATHLEN); - strcat(oldConfigFile, "\\" DEFAULT_CONFIG_FILE); - if ((tmp = fopen(oldConfigFile, "r"))) { - strcpy(configFile, oldConfigFile); - - fclose(tmp); - } - } else { - fclose(tmp); - } - } else { - // Check windows directory - GetWindowsDirectory(configFile, MAXPATHLEN); - strcat(configFile, "\\" DEFAULT_CONFIG_FILE); - } -#elif defined(UNIX) - // On UNIX type systems, by default we store the config file inside - // to the HOME directory of the user. - // - // GP2X is Linux based but Home dir can be read only so do not use - // it and put the config in the executable dir. - // - // On the iPhone, the home dir of the user when you launch the app - // from the Springboard, is /. Which we don't want. - const char *home = getenv("HOME"); - if (home != NULL && strlen(home) < MAXPATHLEN) - snprintf(configFile, MAXPATHLEN, "%s/%s", home, DEFAULT_CONFIG_FILE); - else - strcpy(configFile, DEFAULT_CONFIG_FILE); -#else strcpy(configFile, DEFAULT_CONFIG_FILE); -#endif - return configFile; } @@ -319,7 +178,6 @@ void OSystem_SDL::deinit() { void OSystem_SDL::quit() { deinit(); - exit(0); } diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index f5289edbe8..40fbcd9d37 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -42,12 +42,9 @@ public: virtual void initBackend(); - // Define all hardware keys for keymapper virtual Common::HardwareKeySet *getHardwareKeySet(); - // Quit - virtual void quit(); // overloaded by CE backend - + virtual void quit(); virtual void deinit(); virtual void setWindowCaption(const char *caption); @@ -56,7 +53,7 @@ public: virtual Common::SeekableReadStream *createConfigReadStream(); virtual Common::WriteStream *createConfigWriteStream(); - SdlGraphicsManager *getGraphicsManager(); + virtual SdlGraphicsManager *getGraphicsManager(); virtual bool pollEvent(Common::Event &event); @@ -66,8 +63,11 @@ public: protected: bool _inited; + bool _initedSDL; + + virtual void initSDL(); - void setupIcon(); + virtual void setupIcon(); virtual Common::String getDefaultConfigFileName(); }; diff --git a/backends/platform/win32/win32.cpp b/backends/platform/win32/win32.cpp index 59b960439a..2e039a6059 100644 --- a/backends/platform/win32/win32.cpp +++ b/backends/platform/win32/win32.cpp @@ -45,77 +45,10 @@ #define DEFAULT_CONFIG_FILE "scummvm.ini" OSystem_Win32::OSystem_Win32() { + // Initialze File System Factory _fsFactory = new WindowsFilesystemFactory(); } -void OSystem_Win32::initBackend() { - assert(!_inited); - - uint32 sdlFlags = 0; - - if (ConfMan.hasKey("disable_sdl_parachute")) - sdlFlags |= SDL_INIT_NOPARACHUTE; - - if (SDL_Init(sdlFlags) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } - - // Enable unicode support if possible - SDL_EnableUNICODE(1); - - // Create and hook up the mutex manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_mutexManager == 0) { - _mutexManager = new SdlMutexManager(); - } - - // Create and hook up the event manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_eventManager == 0) { - _eventManager = new SdlEventManager(this); - } - - // Create the savefile manager, if none exists yet (we check for this to - // allow subclasses to provide their own). - if (_savefileManager == 0) { - _savefileManager = new DefaultSaveFileManager(); - } - - // Create and hook up the mixer, if none exists yet (we check for this to - // allow subclasses to provide their own). - if (_mixer == 0) { - if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); - } - - _mixer = new SdlMixerImpl(this); - } - - // Create and hook up the timer manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_timerManager == 0) { - _timerManager = new SdlTimerManager(); - } - - // Create and hook up the graphics manager, if none exists yet (we check for - // this to allow subclasses to provide their own). - if (_graphicsManager == 0) { - _graphicsManager = new SdlGraphicsManager(); - } - - if (_audiocdManager == 0) { - _audiocdManager = (AudioCDManager *)new SdlAudioCDManager(); - } - - // Setup a custom program icon. - setupIcon(); - - // Invoke parent implementation of this method - OSystem::initBackend(); - - _inited = true; -} - Common::String OSystem_Win32::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; diff --git a/backends/platform/win32/win32.h b/backends/platform/win32/win32.h index 95d41778f2..2bcb0c59b3 100644 --- a/backends/platform/win32/win32.h +++ b/backends/platform/win32/win32.h @@ -33,8 +33,6 @@ public: OSystem_Win32(); ~OSystem_Win32() {} - void initBackend(); - protected: Common::String getDefaultConfigFileName(); }; |