aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/scumm.cpp
diff options
context:
space:
mode:
authorMax Horn2007-06-30 18:22:21 +0000
committerMax Horn2007-06-30 18:22:21 +0000
commitfed38a794f8cd810e7b50f59d71b4c0fc581d6fc (patch)
tree39972f0dfb98966035fb999a520848c39ccc2aed /engines/scumm/scumm.cpp
parent6064b876259ce7beca2c32d1b48ea0817149136b (diff)
downloadscummvm-rg350-fed38a794f8cd810e7b50f59d71b4c0fc581d6fc.tar.gz
scummvm-rg350-fed38a794f8cd810e7b50f59d71b4c0fc581d6fc.tar.bz2
scummvm-rg350-fed38a794f8cd810e7b50f59d71b4c0fc581d6fc.zip
Added Engine::pauseEngine method (allows outside code, like the backend, to pause/resume the active engine); made the global 'confirm exit' dialog use that feature; implemented ScummEngine::pauseEngine
svn-id: r27797
Diffstat (limited to 'engines/scumm/scumm.cpp')
-rw-r--r--engines/scumm/scumm.cpp57
1 files changed, 39 insertions, 18 deletions
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 4b3a365394..aa6bea45bf 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -120,6 +120,8 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr)
_gdi = new Gdi(this);
}
_res = new ResourceManager(this);
+
+ _pauseLevel = 0;
// Convert MD5 checksum back into a digest
for (int i = 0; i < 16; ++i) {
@@ -2236,31 +2238,50 @@ void ScummEngine::startManiac() {
#pragma mark --- GUI ---
#pragma mark -
-int ScummEngine::runDialog(Dialog &dialog) {
- _dialogStartTime = _system->getMillis() / 1000;
+void ScummEngine::pauseEngine(bool pause) {
+ assert((pause && _pauseLevel >= 0) || (!pause && _pauseLevel));
- // Pause sound & video
- bool old_soundsPaused = _sound->_soundsPaused;
- _sound->pauseSounds(true);
+ if (pause)
+ _pauseLevel++;
+ else
+ _pauseLevel--;
- bool visible = CursorMan.isVisible();
+ if (_pauseLevel == 1) {
+ _pauseStartTime = _system->getMillis();
- // Open & run the dialog
- int result = dialog.runModal();
+ // Pause sound & video
+ _oldSoundsPaused = _sound->_soundsPaused;
+ _sound->pauseSounds(true);
+
+ //bool visible = CursorMan.isVisible();
+
+ } else if (_pauseLevel == 0) {
+ // Restore old cursor -- FIXME: Should be obsolete thanks to CursorMan
+ //updateCursor();
+ //CursorMan.showMouse(visible);
- // Restore old cursor
- updateCursor();
- CursorMan.showMouse(visible);
+ // Update the screen to make it less likely that the player will see a
+ // brief cursor palette glitch when the GUI is disabled.
+ _system->updateScreen();
- // Update the screen to make it less likely that the player will see a
- // brief cursor palette glitch when the GUI is disabled.
- _system->updateScreen();
+ // Resume sound & video
+ _sound->pauseSounds(_oldSoundsPaused);
- // Resume sound & video
- _sound->pauseSounds(old_soundsPaused);
+ // Adjust engine start time
+ _engineStartTime += (_system->getMillis() - _pauseStartTime) / 1000;
+ _pauseStartTime = 0;
+ }
+}
+
+int ScummEngine::runDialog(Dialog &dialog) {
+ // Pause engine
+ pauseEngine(true);
+
+ // Open & run the dialog
+ int result = dialog.runModal();
- _engineStartTime += (_system->getMillis() / 1000) - _dialogStartTime;
- _dialogStartTime = 0;
+ // Resume engine
+ pauseEngine(false);
// Return the result
return result;