aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/sdl/graphics.cpp14
-rw-r--r--backends/sdl/sdl-common.h8
-rw-r--r--backends/sdl/sdl.cpp2
-rw-r--r--backends/wince/wince-sdl.cpp16
-rw-r--r--backends/wince/wince-sdl.h9
-rw-r--r--common/system.cpp21
-rw-r--r--common/system.h24
-rw-r--r--scumm/imuse_digi/dimuse.cpp36
8 files changed, 74 insertions, 56 deletions
diff --git a/backends/sdl/graphics.cpp b/backends/sdl/graphics.cpp
index 6842ab057c..e89151e03e 100644
--- a/backends/sdl/graphics.cpp
+++ b/backends/sdl/graphics.cpp
@@ -50,7 +50,7 @@ int OSystem_SDL::getDefaultGraphicsMode() const {
}
bool OSystem_SDL::setGraphicsMode(int mode) {
- Common::StackLock lock(_graphicsMutex, this);
+ Common::StackLock lock(_graphicsMutex);
int newScaleFactor = 1;
ScalerProc *newScalerProc;
@@ -327,7 +327,7 @@ void OSystem_SDL::hotswap_gfx_mode() {
}
void OSystem_SDL::updateScreen() {
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
internUpdateScreen();
}
@@ -490,13 +490,13 @@ void OSystem_SDL::internUpdateScreen() {
bool OSystem_SDL::save_screenshot(const char *filename) {
assert(_hwscreen != NULL);
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
SDL_SaveBMP(_hwscreen, filename);
return true;
}
void OSystem_SDL::setFullscreenMode(bool enable) {
- Common::StackLock lock(_graphicsMutex, this);
+ Common::StackLock lock(_graphicsMutex);
if (_full_screen != enable) {
assert(_hwscreen != 0);
@@ -536,7 +536,7 @@ void OSystem_SDL::copyRectToScreen(const byte *src, int pitch, int x, int y, int
if (_screen == NULL)
return;
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
if (((long)src & 3) == 0 && pitch == _screenWidth && x==0 && y==0 &&
w==_screenWidth && h==_screenHeight && _mode_flags&DF_WANT_RECT_OPTIM) {
@@ -755,7 +755,7 @@ void OSystem_SDL::move_screen(int dx, int dy, int height) {
if ((dx == 0 && dy == 0) || height <= 0)
return;
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
byte *src, *dst;
int x, y;
@@ -849,7 +849,7 @@ void OSystem_SDL::clearOverlay() {
if (!_overlayVisible)
return;
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
// hide the mouse
undraw_mouse();
diff --git a/backends/sdl/sdl-common.h b/backends/sdl/sdl-common.h
index 89a5b750fe..127267f878 100644
--- a/backends/sdl/sdl-common.h
+++ b/backends/sdl/sdl-common.h
@@ -137,6 +137,10 @@ public:
virtual void setFeatureState(Feature f, bool enable);
virtual bool getFeatureState(Feature f);
+#ifdef USE_OSD
+ void displayMessageOnOSD(const char *msg);
+#endif
+
protected:
void init_intern();
@@ -150,8 +154,6 @@ protected:
kOSDColorKey = 1,
kOSDInitialAlpha = 80 // Initial alpha level, in percent
};
-
- void displayMessageOnOSD(const char *msg);
#endif
// hardware screen
@@ -252,7 +254,7 @@ protected:
void toggleMouseGrab();
- void internUpdateScreen();
+ virtual void internUpdateScreen();
void load_gfx_mode();
void unload_gfx_mode();
diff --git a/backends/sdl/sdl.cpp b/backends/sdl/sdl.cpp
index fb798caacb..99093380a4 100644
--- a/backends/sdl/sdl.cpp
+++ b/backends/sdl/sdl.cpp
@@ -144,7 +144,7 @@ void OSystem_SDL::setFeatureState(Feature f, bool enable) {
break;
case kFeatureAspectRatioCorrection:
if (_screenHeight == 200 && _adjustAspectRatio != enable) {
- Common::StackLock lock(_graphicsMutex, this);
+ Common::StackLock lock(_graphicsMutex);
//assert(_hwscreen != 0);
_adjustAspectRatio ^= true;
diff --git a/backends/wince/wince-sdl.cpp b/backends/wince/wince-sdl.cpp
index da6918d3b1..5d0c7e6c59 100644
--- a/backends/wince/wince-sdl.cpp
+++ b/backends/wince/wince-sdl.cpp
@@ -333,7 +333,7 @@ void OSystem_WINCE3::initSize(uint w, uint h) {
else
_toolbarHandler.setOffset(400);
- OSystem_SDL_Common::initSize(w, h);
+ OSystem_SDL::initSize(w, h);
update_game_settings();
@@ -623,11 +623,9 @@ void OSystem_WINCE3::update_keyboard() {
}
}
-void OSystem_WINCE3::updateScreen() {
+void OSystem_WINCE3::internUpdateScreen() {
assert(_hwscreen != NULL);
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
-
update_keyboard();
// If the shake position changed, fill the dirty area with blackness
@@ -820,7 +818,7 @@ void OSystem_WINCE3::updateScreen() {
uint32 OSystem_WINCE3::property(int param, Property *value) {
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
if (param == PROP_TOGGLE_FULLSCREEN) {
// FIXME
@@ -898,7 +896,7 @@ uint32 OSystem_WINCE3::property(int param, Property *value) {
bool OSystem_WINCE3::save_screenshot(const char *filename) {
assert(_hwscreen != NULL);
- Common::StackLock lock(_graphicsMutex, this); // Lock the mutex until this function ends
+ Common::StackLock lock(_graphicsMutex); // Lock the mutex until this function ends
SDL_SaveBMP(_hwscreen, filename);
return true;
}
@@ -928,7 +926,7 @@ static int mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode)
void OSystem_WINCE3::draw_mouse() {
// FIXME
if (!(_toolbarHandler.visible() && _mouseCurState.y >= _toolbarHandler.getOffset()) && !_forceHideMouse)
- OSystem_SDL_Common::draw_mouse();
+ OSystem_SDL::draw_mouse();
}
void OSystem_WINCE3::fillMouseEvent(Event &event, int x, int y) {
@@ -987,7 +985,7 @@ void OSystem_WINCE3::add_dirty_rect(int x, int y, int w, int h) {
}
}
- OSystem_SDL_Common::add_dirty_rect(x, y, w, h);
+ OSystem_SDL::add_dirty_rect(x, y, w, h);
}
// FIXME
@@ -1305,5 +1303,5 @@ bool OSystem_WINCE3::poll_event(Event *event) {
void OSystem_WINCE3::quit() {
CEDevice::disableHardwareKeyMapping();
- OSystem_SDL_Common::quit();
+ OSystem_SDL::quit();
}
diff --git a/backends/wince/wince-sdl.h b/backends/wince/wince-sdl.h
index 910cd558d0..a54e0c16fa 100644
--- a/backends/wince/wince-sdl.h
+++ b/backends/wince/wince-sdl.h
@@ -36,15 +36,16 @@
#include <SDL.h>
-class OSystem_WINCE3 : public OSystem_SDL_Common {
+class OSystem_WINCE3 : public OSystem_SDL {
public:
OSystem_WINCE3();
// Update the dirty areas of the screen
- void updateScreen();
+ void internUpdateScreen();
- // Set a parameter
- uint32 property(int param, Property *value);
+ bool hasFeature(Feature f);
+ void setFeatureState(Feature f, bool enable);
+ bool getFeatureState(Feature f);
void initSize(uint w, uint h);
diff --git a/common/system.cpp b/common/system.cpp
index ce9ba67c3c..b9cfb8de8f 100644
--- a/common/system.cpp
+++ b/common/system.cpp
@@ -26,6 +26,8 @@
#include "base/gameDetector.h"
+#include "gui/message.h"
+
#include "common/config-manager.h"
#include "common/system.h"
@@ -84,15 +86,20 @@ bool OSystem::setGraphicsMode(const char *name) {
return false;
}
+void OSystem::displayMessageOnOSD(const char *msg) {
+ // Display the message for 1.5 seconds
+ GUI::TimedMessageDialog dialog(msg, 1500);
+ dialog.runModal();
+}
+
+
#pragma mark -
namespace Common {
-StackLock::StackLock(OSystem::MutexRef mutex, OSystem *syst, const char *mutexName)
- : _mutex(mutex), _syst(syst), _mutexName(mutexName) {
- if (syst == 0)
- _syst = g_system;
+StackLock::StackLock(OSystem::MutexRef mutex, const char *mutexName)
+ : _mutex(mutex), _mutexName(mutexName) {
lock();
}
@@ -101,19 +108,17 @@ StackLock::~StackLock() {
}
void StackLock::lock() {
- assert(_syst);
if (_mutexName != NULL)
debug(6, "Locking mutex %s", _mutexName);
- _syst->lockMutex(_mutex);
+ g_system->lockMutex(_mutex);
}
void StackLock::unlock() {
- assert(_syst);
if (_mutexName != NULL)
debug(6, "Unlocking mutex %s", _mutexName);
- _syst->unlockMutex(_mutex);
+ g_system->unlockMutex(_mutex);
}
} // End of namespace Common
diff --git a/common/system.h b/common/system.h
index 8f9b5a7464..2039085fdb 100644
--- a/common/system.h
+++ b/common/system.h
@@ -602,12 +602,25 @@ public:
virtual void quit() = 0;
/**
- * Set a window caption or any other comparable status display to the
- * given value.
- * @param caption the window caption to use from now on
+ * Set a window caption or any other comparable status display to the
+ * given value.
+ * @param caption the window caption to use from now on
*/
virtual void setWindowCaption(const char *caption) {}
-
+
+ /**
+ * Display a message in an 'on screen display'. That is, display it in a
+ * fashion where it is visible on or near the screen (e.g. in a transparent
+ * rectangle over the regular screen content; or in a message box beneath
+ * it; etc.).
+ *
+ * @note There is a default implementation which uses a TimedMessageDialog
+ * to display the message. Hence implementing this is optional.
+ *
+ * @param msg the message to display on screen
+ */
+ virtual void displayMessageOnOSD(const char *msg);
+
/** Savefile management. */
virtual SaveFileManager *get_savefile_manager() {
return new SaveFileManager();
@@ -626,13 +639,12 @@ namespace Common {
*/
class StackLock {
OSystem::MutexRef _mutex;
- OSystem *_syst;
const char *_mutexName;
void lock();
void unlock();
public:
- StackLock(OSystem::MutexRef mutex, OSystem *syst = 0, const char *mutexName = NULL);
+ StackLock(OSystem::MutexRef mutex, const char *mutexName = NULL);
~StackLock();
};
diff --git a/scumm/imuse_digi/dimuse.cpp b/scumm/imuse_digi/dimuse.cpp
index 331b6bc9a1..a4869b712e 100644
--- a/scumm/imuse_digi/dimuse.cpp
+++ b/scumm/imuse_digi/dimuse.cpp
@@ -53,7 +53,7 @@ IMuseDigital::IMuseDigital(ScummEngine *scumm)
IMuseDigital::~IMuseDigital() {
stopAllSounds(true);
{
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::~IMuseDigital()");
+ Common::StackLock lock(_mutex, "IMuseDigital::~IMuseDigital()");
_vm->_timer->removeTimerProc(timer_handler);
}
delete _sound;
@@ -61,7 +61,7 @@ IMuseDigital::~IMuseDigital() {
}
void IMuseDigital::callback() {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::callback()");
+ Common::StackLock lock(_mutex, "IMuseDigital::callback()");
int l = 0;
if (_pause || !_vm)
@@ -227,7 +227,7 @@ void IMuseDigital::switchToNextRegion(int track) {
}
void IMuseDigital::startSound(int soundId, const char *soundName, int soundType, int soundGroup, AudioStream *input, int hookId, int volume, int priority) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::startSound()");
+ Common::StackLock lock(_mutex, "IMuseDigital::startSound()");
debug(5, "IMuseDigital::startSound(%d)", soundId);
int l;
int lower_priority = 127;
@@ -358,7 +358,7 @@ void IMuseDigital::startSound(int soundId, const char *soundName, int soundType,
}
void IMuseDigital::stopSound(int soundId) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::stopSound()");
+ Common::StackLock lock(_mutex, "IMuseDigital::stopSound()");
debug(5, "IMuseDigital::stopSound(%d)", soundId);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if ((_track[l].soundId == soundId) && _track[l].used) {
@@ -372,7 +372,7 @@ void IMuseDigital::stopSound(int soundId) {
}
void IMuseDigital::setPriority(int soundId, int priority) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::setPriority()");
+ Common::StackLock lock(_mutex, "IMuseDigital::setPriority()");
debug(5, "IMuseDigital::setPrioritySound(%d, %d)", soundId, priority);
assert ((priority >= 0) && (priority <= 127));
@@ -385,7 +385,7 @@ void IMuseDigital::setPriority(int soundId, int priority) {
}
void IMuseDigital::setVolume(int soundId, int volume) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::setVolume()");
+ Common::StackLock lock(_mutex, "IMuseDigital::setVolume()");
debug(5, "IMuseDigital::setVolumeSound(%d, %d)", soundId, volume);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if ((_track[l].soundId == soundId) && _track[l].used) {
@@ -395,7 +395,7 @@ void IMuseDigital::setVolume(int soundId, int volume) {
}
void IMuseDigital::setPan(int soundId, int pan) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::setPan()");
+ Common::StackLock lock(_mutex, "IMuseDigital::setPan()");
debug(5, "IMuseDigital::setVolumeSound(%d, %d)", soundId, pan);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if ((_track[l].soundId == soundId) && _track[l].used) {
@@ -405,7 +405,7 @@ void IMuseDigital::setPan(int soundId, int pan) {
}
void IMuseDigital::setFade(int soundId, int destVolume, int delay60HzTicks) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::setFade()");
+ Common::StackLock lock(_mutex, "IMuseDigital::setFade()");
debug(5, "IMuseDigital::setFade(%d, %d, %d)", soundId, destVolume, delay60HzTicks);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if ((_track[l].soundId == soundId) && _track[l].used) {
@@ -420,7 +420,7 @@ void IMuseDigital::setFade(int soundId, int destVolume, int delay60HzTicks) {
void IMuseDigital::refreshScripts() {
bool found = false;
{
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::refreshScripts()");
+ Common::StackLock lock(_mutex, "IMuseDigital::refreshScripts()");
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if ((_track[l].used) && (_track[l].soundGroup == IMUSE_MUSIC) && (!_track[l].volFadeUsed)) {
found = true;
@@ -436,7 +436,7 @@ void IMuseDigital::refreshScripts() {
void IMuseDigital::stopAllSounds(bool waitForStop) {
debug(5, "IMuseDigital::stopAllSounds");
{
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::stopAllSounds()");
+ Common::StackLock lock(_mutex, "IMuseDigital::stopAllSounds()");
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if (_track[l].used) {
if (_track[l].stream) {
@@ -461,7 +461,7 @@ void IMuseDigital::stopAllSounds(bool waitForStop) {
}
void IMuseDigital::fadeOutMusic(int fadeDelay) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::fadeOutMusic()");
+ Common::StackLock lock(_mutex, "IMuseDigital::fadeOutMusic()");
debug(5, "IMuseDigital::fadeOutMusic");
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if ((_track[l].used) && (_track[l].soundGroup == IMUSE_MUSIC) && (!_track[l].volFadeUsed)) {
@@ -474,7 +474,7 @@ void IMuseDigital::fadeOutMusic(int fadeDelay) {
}
void IMuseDigital::pause(bool p) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::pause()");
+ Common::StackLock lock(_mutex, "IMuseDigital::pause()");
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if (_track[l].used) {
_vm->_mixer->pauseHandle(_track[l].handle, p);
@@ -611,7 +611,7 @@ void IMuseDigital::parseScriptCmds(int a, int b, int c, int d, int e, int f, int
}
int IMuseDigital::getSoundStatus(int sound) const {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::getSoundStatus()");
+ Common::StackLock lock(_mutex, "IMuseDigital::getSoundStatus()");
debug(5, "IMuseDigital::getSoundStatus(%d)", sound);
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
if ((_track[l].soundId == sound) && _track[l].used) {
@@ -665,7 +665,7 @@ int32 IMuseDigital::getPosInMs(int soundId) {
}
int32 IMuseDigital::getCurMusicPosInMs() {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::getCurMusicPosInMs()");
+ Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicPosInMs()");
int soundId = -1;
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -680,7 +680,7 @@ int32 IMuseDigital::getCurMusicPosInMs() {
}
int32 IMuseDigital::getCurVoiceLipSyncWidth() {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::getCutVoiceLipSyncWidth()");
+ Common::StackLock lock(_mutex, "IMuseDigital::getCutVoiceLipSyncWidth()");
int32 msPos = getPosInMs(kTalkSoundID) + _vm->VAR(_vm->VAR_SYNC) + 50;
int32 width = 0, height = 0;
@@ -690,7 +690,7 @@ int32 IMuseDigital::getCurVoiceLipSyncWidth() {
}
int32 IMuseDigital::getCurVoiceLipSyncHeight() {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::getCurVoiceLipSyncHeight()");
+ Common::StackLock lock(_mutex, "IMuseDigital::getCurVoiceLipSyncHeight()");
int32 msPos = getPosInMs(kTalkSoundID) + _vm->VAR(_vm->VAR_SYNC) + 50;
int32 width = 0, height = 0;
@@ -700,7 +700,7 @@ int32 IMuseDigital::getCurVoiceLipSyncHeight() {
}
int32 IMuseDigital::getCurMusicLipSyncWidth(int syncId) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::getCurMusicLipSyncWidth()");
+ Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicLipSyncWidth()");
int soundId = -1;
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
@@ -718,7 +718,7 @@ int32 IMuseDigital::getCurMusicLipSyncWidth(int syncId) {
}
int32 IMuseDigital::getCurMusicLipSyncHeight(int syncId) {
- Common::StackLock lock(_mutex, g_system, "IMuseDigital::getCurMusicLipSyncHeight()");
+ Common::StackLock lock(_mutex, "IMuseDigital::getCurMusicLipSyncHeight()");
int soundId = -1;
for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {