aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/modular-backend.cpp4
-rw-r--r--backends/modular-backend.h5
-rw-r--r--backends/module.mk1
-rw-r--r--backends/platform/sdl/sdl.cpp51
-rw-r--r--backends/platform/sdl/sdl.h25
-rw-r--r--backends/timer/default/default-timer.h4
-rw-r--r--backends/timer/sdl/sdl-timer.cpp71
-rw-r--r--backends/timer/sdl/sdl-timer.h51
-rw-r--r--common/timer.h16
9 files changed, 152 insertions, 76 deletions
diff --git a/backends/modular-backend.cpp b/backends/modular-backend.cpp
index 7052fc0d3a..26fcb27683 100644
--- a/backends/modular-backend.cpp
+++ b/backends/modular-backend.cpp
@@ -200,8 +200,6 @@ void ModularBackend::disableCursorPalette(bool disable) {
_graphicsManager->disableCursorPalette(disable);
}
-/** TODO: Add getMillis, delayMillis and getTimeAndDate
- ** to timer manager
uint32 ModularBackend::getMillis() {
assert(_timerManager);
return _timerManager->getMillis();
@@ -215,7 +213,7 @@ void ModularBackend::delayMillis(uint msecs) {
void ModularBackend::getTimeAndDate(TimeDate &t) const {
assert(_timerManager);
return _timerManager->getTimeAndDate(t);
-}*/
+}
Common::TimerManager *ModularBackend::getTimerManager() {
assert(_timerManager);
diff --git a/backends/modular-backend.h b/backends/modular-backend.h
index f055ad2e96..eea6a2d3b0 100644
--- a/backends/modular-backend.h
+++ b/backends/modular-backend.h
@@ -27,6 +27,7 @@
#define BACKENDS_MODULAR_BACKEND_H
#include "common/system.h"
+#include "common/timer.h"
#include "backends/events/default/default-events.h"
#include "backends/audiocd/default/default-audiocd.h"
#include "backends/mutex/null/null-mutex.h"
@@ -83,9 +84,9 @@ public:
virtual void setCursorPalette(const byte *colors, uint start, uint num);
virtual void disableCursorPalette(bool disable);
- /*virtual uint32 getMillis();
+ virtual uint32 getMillis();
virtual void delayMillis(uint msecs);
- virtual void getTimeAndDate(TimeDate &t) const;*/
+ virtual void getTimeAndDate(TimeDate &t) const;
virtual Common::TimerManager *getTimerManager();
virtual Common::EventManager *getEventManager();
virtual Common::HardwareKeySet *getHardwareKeySet() { return 0; }
diff --git a/backends/module.mk b/backends/module.mk
index 3e4c19b166..6cf2bb4f66 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -47,6 +47,7 @@ MODULE_OBJS := \
saves/psp/psp-saves.o \
timer/default/default-timer.o \
timer/psp/timer.o \
+ timer/sdl/sdl-timer.o \
vkeybd/image-map.o \
vkeybd/polygon.o \
vkeybd/virtual-keyboard.o \
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp
index 46984d1c8e..225c3180b7 100644
--- a/backends/platform/sdl/sdl.cpp
+++ b/backends/platform/sdl/sdl.cpp
@@ -33,7 +33,6 @@
#include "common/archive.h"
#include "common/config-manager.h"
#include "common/debug.h"
-#include "common/EventRecorder.h"
#include "common/util.h"
#ifdef UNIX
@@ -41,16 +40,14 @@
#else
#include "backends/saves/default/default-saves.h"
#endif
-#include "backends/timer/default/default-timer.h"
-
-#include "backends/mixer/sdl/sdl-mixer.h"
-
+#include "backends/audiocd/sdl/sdl-audiocd.h"
#include "backends/events/sdl/sdl-events.h"
+#include "backends/mutex/sdl/sdl-mutex.h"
+#include "backends/mixer/sdl/sdl-mixer.h"
+#include "backends/timer/sdl/sdl-timer.h"
#include "icons/scummvm.xpm"
-#include <time.h> // for getTimeAndDate()
-
/*
* Include header files needed for the getFilesystemFactory() method.
*/
@@ -62,7 +59,6 @@
#include "backends/fs/windows/windows-fs-factory.h"
#endif
-
#if defined(UNIX)
#ifdef MACOSX
#define DEFAULT_CONFIG_FILE "Library/Preferences/ScummVM Preferences"
@@ -80,11 +76,6 @@
#endif
-static Uint32 timer_handler(Uint32 interval, void *param) {
- ((DefaultTimerManager *)param)->handler();
- return interval;
-}
-
void OSystem_SDL::initBackend() {
assert(!_inited);
@@ -135,13 +126,7 @@ void OSystem_SDL::initBackend() {
// 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) {
- // TODO: Implement SdlTimerManager
- if (SDL_InitSubSystem(SDL_INIT_TIMER) == -1) {
- error("Could not initialize SDL: %s", SDL_GetError());
- }
-
- _timerManager = new DefaultTimerManager();
- _timerID = SDL_AddTimer(10, &timer_handler, _timerManager);
+ _timerManager = new SdlTimerManager();
}
// Create and hook up the graphics manager, if none exists yet (we check for
@@ -184,34 +169,11 @@ OSystem_SDL::OSystem_SDL()
}
OSystem_SDL::~OSystem_SDL() {
- SDL_RemoveTimer(_timerID);
-
delete _mixer;
delete _savefileManager;
delete _timerManager;
}
-uint32 OSystem_SDL::getMillis() {
- uint32 millis = SDL_GetTicks();
- g_eventRec.processMillis(millis);
- return millis;
-}
-
-void OSystem_SDL::delayMillis(uint msecs) {
- SDL_Delay(msecs);
-}
-
-void OSystem_SDL::getTimeAndDate(TimeDate &td) const {
- time_t curTime = time(0);
- struct tm t = *localtime(&curTime);
- td.tm_sec = t.tm_sec;
- td.tm_min = t.tm_min;
- td.tm_hour = t.tm_hour;
- td.tm_mday = t.tm_mday;
- td.tm_mon = t.tm_mon;
- td.tm_year = t.tm_year;
-}
-
void OSystem_SDL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) {
#ifdef DATA_PATH
@@ -241,7 +203,6 @@ void OSystem_SDL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority)
}
-
static Common::String getDefaultConfigFileName() {
char configFile[MAXPATHLEN];
#if defined (WIN32) && !defined(_WIN32_WCE) && !defined(__SYMBIAN32__)
@@ -338,8 +299,6 @@ void OSystem_SDL::setWindowCaption(const char *caption) {
void OSystem_SDL::deinit() {
SDL_ShowCursor(SDL_ENABLE);
- SDL_RemoveTimer(_timerID);
-
delete _mixer;
delete _timerManager;
diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h
index 5a621a8645..8dae6a779c 100644
--- a/backends/platform/sdl/sdl.h
+++ b/backends/platform/sdl/sdl.h
@@ -33,22 +33,7 @@
#endif
#include "backends/modular-backend.h"
-
-#include "backends/mutex/sdl/sdl-mutex.h"
#include "backends/graphics/sdl/sdl-graphics.h"
-#include "backends/audiocd/sdl/sdl-audiocd.h"
-
-#include "graphics/scaler.h"
-
-
-namespace Audio {
- class MixerImpl;
-}
-
-#if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__)
-// Uncomment this to enable the 'on screen display' code.
-#define USE_OSD 1
-#endif
class OSystem_SDL : public ModularBackend {
public:
@@ -57,14 +42,6 @@ public:
virtual void initBackend();
- // Get the number of milliseconds since the program was started.
- uint32 getMillis();
-
- // Delay for a specified amount of milliseconds
- void delayMillis(uint msecs);
-
- virtual void getTimeAndDate(TimeDate &t) const;
-
// Define all hardware keys for keymapper
virtual Common::HardwareKeySet *getHardwareKeySet();
@@ -86,8 +63,6 @@ public:
protected:
bool _inited;
- SDL_TimerID _timerID;
-
void setupIcon();
};
diff --git a/backends/timer/default/default-timer.h b/backends/timer/default/default-timer.h
index e7ac3d122f..c6da831f64 100644
--- a/backends/timer/default/default-timer.h
+++ b/backends/timer/default/default-timer.h
@@ -48,6 +48,10 @@ public:
* Timer callback, to be invoked at regular time intervals by the backend.
*/
void handler();
+
+ virtual uint32 getMillis() { return 0; }
+ virtual void delayMillis(uint msecs) {}
+ virtual void getTimeAndDate(TimeDate &t) const {}
};
#endif
diff --git a/backends/timer/sdl/sdl-timer.cpp b/backends/timer/sdl/sdl-timer.cpp
new file mode 100644
index 0000000000..4fcd2f2ac7
--- /dev/null
+++ b/backends/timer/sdl/sdl-timer.cpp
@@ -0,0 +1,71 @@
+
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#if defined(WIN32) || defined(UNIX) || defined(MACOSX)
+
+#include "backends/timer/sdl/sdl-timer.h"
+#include "common/EventRecorder.h"
+#include <time.h>
+
+static Uint32 timer_handler(Uint32 interval, void *param) {
+ ((DefaultTimerManager *)param)->handler();
+ return interval;
+}
+
+SdlTimerManager::SdlTimerManager() {
+ if (SDL_InitSubSystem(SDL_INIT_TIMER) == -1) {
+ error("Could not initialize SDL: %s", SDL_GetError());
+ }
+
+ _timerID = SDL_AddTimer(10, &timer_handler, this);
+}
+
+SdlTimerManager::~SdlTimerManager() {
+ SDL_RemoveTimer(_timerID);
+}
+
+uint32 SdlTimerManager::getMillis() {
+ uint32 millis = SDL_GetTicks();
+ g_eventRec.processMillis(millis);
+ return millis;
+}
+
+void SdlTimerManager::delayMillis(uint msecs) {
+ SDL_Delay(msecs);
+}
+
+void SdlTimerManager::getTimeAndDate(TimeDate &td) const {
+ time_t curTime = time(0);
+ struct tm t = *localtime(&curTime);
+ td.tm_sec = t.tm_sec;
+ td.tm_min = t.tm_min;
+ td.tm_hour = t.tm_hour;
+ td.tm_mday = t.tm_mday;
+ td.tm_mon = t.tm_mon;
+ td.tm_year = t.tm_year;
+}
+
+#endif
diff --git a/backends/timer/sdl/sdl-timer.h b/backends/timer/sdl/sdl-timer.h
new file mode 100644
index 0000000000..0c9669f042
--- /dev/null
+++ b/backends/timer/sdl/sdl-timer.h
@@ -0,0 +1,51 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef BACKENDS_TIMER_SDL_H
+#define BACKENDS_TIMER_SDL_H
+
+#include "backends/timer/default/default-timer.h"
+
+#if defined(__SYMBIAN32__)
+#include <esdl\SDL.h>
+#else
+#include <SDL.h>
+#endif
+
+class SdlTimerManager : public DefaultTimerManager {
+public:
+ SdlTimerManager();
+ ~SdlTimerManager();
+
+ uint32 getMillis();
+ void delayMillis(uint msecs);
+ void getTimeAndDate(TimeDate &t) const;
+
+protected:
+ SDL_TimerID _timerID;
+};
+
+
+#endif
diff --git a/common/timer.h b/common/timer.h
index c87c2b3240..057d6268c8 100644
--- a/common/timer.h
+++ b/common/timer.h
@@ -26,6 +26,7 @@
#define COMMON_TIMER_H
#include "common/scummsys.h"
+#include "common/system.h"
#include "common/noncopyable.h"
namespace Common {
@@ -55,6 +56,21 @@ public:
* and no instance of this callback will be running anymore.
*/
virtual void removeTimerProc(TimerProc proc) = 0;
+
+ /**
+ * Get the number of milliseconds since the program was started.
+ */
+ virtual uint32 getMillis() = 0;
+
+ /**
+ * Delay for a specified amount of milliseconds
+ */
+ virtual void delayMillis(uint msecs) = 0;
+
+ /**
+ * Get the current time and date
+ */
+ virtual void getTimeAndDate(TimeDate &t) const = 0;
};
} // End of namespace Common