aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/sdl/sdl.cpp
diff options
context:
space:
mode:
authorAlejandro Marzini2010-06-23 19:34:07 +0000
committerAlejandro Marzini2010-06-23 19:34:07 +0000
commit04dce6a10646d1060813c90c9270be46c36c02cd (patch)
tree36e77990e3be5a9c480027c2021f097e3f4a3eeb /backends/platform/sdl/sdl.cpp
parent1811e86648e1afa7951284604f50a6b1557ac738 (diff)
downloadscummvm-rg350-04dce6a10646d1060813c90c9270be46c36c02cd.tar.gz
scummvm-rg350-04dce6a10646d1060813c90c9270be46c36c02cd.tar.bz2
scummvm-rg350-04dce6a10646d1060813c90c9270be46c36c02cd.zip
Fixed AudioCDManager not having a public inheritance. Backend code cleanup.
svn-id: r50189
Diffstat (limited to 'backends/platform/sdl/sdl.cpp')
-rw-r--r--backends/platform/sdl/sdl.cpp222
1 files changed, 40 insertions, 182 deletions
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);
}