aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/sdl
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/sdl')
-rw-r--r--backends/platform/sdl/sdl-common.h22
-rw-r--r--backends/platform/sdl/sdl.cpp51
2 files changed, 72 insertions, 1 deletions
diff --git a/backends/platform/sdl/sdl-common.h b/backends/platform/sdl/sdl-common.h
index 093e7950f9..aeb9c5bf37 100644
--- a/backends/platform/sdl/sdl-common.h
+++ b/backends/platform/sdl/sdl-common.h
@@ -33,6 +33,15 @@
#include "backends/intern.h"
+namespace Audio {
+ class Mixer;
+}
+
+namespace Common {
+ class SaveFileManager;
+ class TimerManager;
+}
+
#if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__)
// Uncomment this to enable the 'on screen display' code.
#define USE_OSD 1
@@ -124,9 +133,10 @@ public:
virtual bool pollEvent(Event &event); // overloaded by CE backend
// Set function that generates samples
+ typedef void (*SoundProc)(void *param, byte *buf, int len);
virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend
-
void clearSoundCallback();
+ virtual Audio::Mixer *getMixer();
// Poll CD status
// Returns true if cd audio is playing
@@ -146,7 +156,9 @@ public:
// Add a callback timer
+ typedef int (*TimerProc)(int interval);
void setTimerCallback(TimerProc callback, int timer);
+ virtual Common::TimerManager *getTimerManager();
// Mutex handling
MutexRef createMutex();
@@ -187,6 +199,8 @@ public:
void displayMessageOnOSD(const char *msg);
#endif
+ virtual Common::SaveFileManager *getSavefileManager();
+
protected:
bool _inited;
@@ -357,6 +371,12 @@ protected:
MutexRef _graphicsMutex;
+ Common::SaveFileManager *_savefile;
+ Audio::Mixer *_mixer;
+ Common::TimerManager *_timer;
+
+
+
void addDirtyRgnAuto(const byte *buf);
void makeChecksums(const byte *buf);
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 21f5935c58..b4677eac0f 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -27,6 +27,10 @@
#include "common/util.h"
#include "base/main.h"
+#include "backends/saves/default/default-saves.h"
+#include "backends/timer/default/default-timer.h"
+#include "sound/mixer.h"
+
#include "icons/scummvm.xpm"
#if defined(__SYMBIAN32__)
@@ -42,6 +46,11 @@ int __stdcall WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpC
}
#endif
+static int timer_handler(int t) {
+ DefaultTimerManager *tm = (DefaultTimerManager *)g_system->getTimerManager();
+ return tm->handler(t);
+}
+
int main(int argc, char *argv[]) {
#if defined(__SYMBIAN32__)
@@ -169,6 +178,29 @@ void OSystem_SDL::initBackend() {
printf("Using joystick: %s\n", SDL_JoystickName(0));
_joystick = SDL_JoystickOpen(joystick_num);
}
+
+
+ // Create the savefile manager, if none exists yet (we check for this to
+ // allow subclasses to provide their own).
+ if (_savefile == 0) {
+ _savefile = 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) {
+ _mixer = new Audio::Mixer();
+ setSoundCallback(Audio::Mixer::mixCallback, _mixer);
+ }
+
+ // Create and hook up the timer manager, if none exists yet (we check for
+ // this to allow subclasses to provide their own).
+ if (_timer == 0) {
+ _timer = new DefaultTimerManager();
+ setTimerCallback(&timer_handler, 10);
+ }
+
+ OSystem::initBackend();
_inited = true;
}
@@ -189,6 +221,9 @@ OSystem_SDL::OSystem_SDL()
_joystick(0),
_currentShakePos(0), _newShakePos(0),
_paletteDirtyStart(0), _paletteDirtyEnd(0),
+ _savefile(0),
+ _mixer(0),
+ _timer(0),
_graphicsMutex(0), _transactionMode(kTransactionNone) {
// allocate palette storage
@@ -223,6 +258,16 @@ void OSystem_SDL::setTimerCallback(TimerProc callback, int timer) {
SDL_SetTimer(timer, (SDL_TimerCallback) callback);
}
+Common::TimerManager *OSystem_SDL::getTimerManager() {
+ assert(_timer);
+ return _timer;
+}
+
+Common::SaveFileManager *OSystem_SDL::getSavefileManager() {
+ assert(_savefile);
+ return _savefile;
+}
+
void OSystem_SDL::setWindowCaption(const char *caption) {
SDL_WM_SetCaption(caption, caption);
}
@@ -395,6 +440,7 @@ bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) {
// least on some platforms SDL will lie and claim it did get the rate
// even if it didn't. Probably only happens for "weird" rates, though.
_samplesPerSec = obtained.freq;
+ debug(1, "Output sample rate: %d Hz", _samplesPerSec);
SDL_PauseAudio(0);
return true;
}
@@ -407,6 +453,11 @@ int OSystem_SDL::getOutputSampleRate() const {
return _samplesPerSec;
}
+Audio::Mixer *OSystem_SDL::getMixer() {
+ assert(_mixer);
+ return _mixer;
+}
+
#pragma mark -
#pragma mark --- CD Audio ---
#pragma mark -