From fed38a794f8cd810e7b50f59d71b4c0fc581d6fc Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sat, 30 Jun 2007 18:22:21 +0000 Subject: 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 --- engines/scumm/scumm.cpp | 57 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 18 deletions(-) (limited to 'engines/scumm/scumm.cpp') 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; -- cgit v1.2.3