Added SdlTimerManager. Added getMillis, delayMillis and getTimeAndDate to Common::TimerManager, DefaultTimerManager and ModularBackend. Removed timer code from OSystem_SDL.

svn-id: r49637
This commit is contained in:
Alejandro Marzini 2010-06-13 21:09:52 +00:00
parent a77738e53b
commit 77f114b835
9 changed files with 152 additions and 76 deletions

View File

@ -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);

View File

@ -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; }

View File

@ -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 \

View File

@ -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;

View File

@ -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();
};

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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