[Scummvm-git-logs] scummvm master -> 1b4ce9096f83d6b95ec618856505623f54412271
sev-
sev at scummvm.org
Sun May 10 21:39:50 UTC 2020
This automated email contains information about 27 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
ea7db12ee0 ENGINES: Base PauseToken support
59702fae9b PEGASUS: Use PauseToken
ce4cfdf5d2 BACKENDS: Use PauseToken
802c0ece7f SCUMM: PauseToken for saving
95f4144190 SCUMM: Use baseclass runDialog & always pause _splayer
c15f268e9b ENGINES: Allow clearing a PauseToken
c5bdd7a1f2 GUI: Use PauseToken in Debugger
feb6019182 QUEEN: Debugger, call base for preEnter and postEnter
f87a73b4f7 ACCESS: Debugger, call base postEnter
faa8bea5cb PARALLACTION: Debugger, call base preEnter & postEnter
d26655dc4d SCI: Debugger, call base preEnter & postEnter
736702332e SHERLOCK: Debugger, call base postEnter
fa4518fbab SCI: Use PauseToken in kernelMessageBox
fb92ccbade MOHAWK: Use debugPauseToken in Console::Cmd_QuickTest
acf81a79c1 AGOS: Use PauseToken in pause function
c1c90afbde MOHAWK: Use PauseToken in menu stack
c970106234 PEGASUS: Use PauseToken
2b3d7ea12d AGI: Use existing runDialog function
7ea98181e2 AGI: Use PauseToken
4a6a8f0c36 SWORD2: Use PauseToken
866800ffb0 CRUISE: Use PauseToken
d315fc8add MACGUI: Use real Engine and PauseToken classes
3edcc22c78 PINK: Use new MACGUI interface
8079dc8d72 MACGUI, PINK: Rename setEnginePauseCallback to setEngine
f5ac623cca ENGINES: Disallow assignment to a busy pause token.
830a239b04 ENGINES: Move semantics for PauseToken
1b4ce9096f ENGINES: Disallow clearing an already clear pause token.
Commit: ea7db12ee04394d62485f2efa51fe5c16c8962d8
https://github.com/scummvm/scummvm/commit/ea7db12ee04394d62485f2efa51fe5c16c8962d8
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
ENGINES: Base PauseToken support
Changed paths:
engines/engine.cpp
engines/engine.h
diff --git a/engines/engine.cpp b/engines/engine.cpp
index 54da3cc610..093a411140 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -529,18 +529,25 @@ void Engine::errorString(const char *buf1, char *buf2, int size) {
Common::strlcpy(buf2, buf1, size);
}
-void Engine::pauseEngine(bool pause) {
- assert((pause && _pauseLevel >= 0) || (!pause && _pauseLevel));
+PauseToken Engine::pauseEngine() {
+ assert(_pauseLevel >= 0);
- if (pause)
- _pauseLevel++;
- else
- _pauseLevel--;
+ _pauseLevel++;
- if (_pauseLevel == 1 && pause) {
+ if (_pauseLevel == 1) {
_pauseStartTime = _system->getMillis();
pauseEngineIntern(true);
- } else if (_pauseLevel == 0) {
+ }
+
+ return PauseToken(this);
+}
+
+void Engine::resumeEngine() {
+ assert(_pauseLevel > 0);
+
+ _pauseLevel--;
+
+ if (_pauseLevel == 0) {
pauseEngineIntern(false);
_engineStartTime += _system->getMillis() - _pauseStartTime;
_pauseStartTime = 0;
@@ -617,9 +624,8 @@ void Engine::setTotalPlayTime(uint32 time) {
}
int Engine::runDialog(GUI::Dialog &dialog) {
- pauseEngine(true);
+ PauseToken pt = pauseEngine();
int result = dialog.runModal();
- pauseEngine(false);
return result;
}
@@ -737,9 +743,13 @@ bool Engine::loadGameDialog() {
}
GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"), false);
- pauseEngine(true);
- int slotNum = dialog->runModalWithCurrentTarget();
- pauseEngine(false);
+
+ int slotNum;
+ {
+ PauseToken pt = pauseEngine();
+ slotNum = dialog->runModalWithCurrentTarget();
+ }
+
delete dialog;
if (slotNum < 0)
@@ -762,9 +772,11 @@ bool Engine::saveGameDialog() {
}
GUI::SaveLoadChooser *dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"), true);
- pauseEngine(true);
- int slotNum = dialog->runModalWithCurrentTarget();
- pauseEngine(false);
+ int slotNum;
+ {
+ PauseToken pt = pauseEngine();
+ slotNum = dialog->runModalWithCurrentTarget();
+ }
Common::String desc = dialog->getResultString();
if (desc.empty())
@@ -818,3 +830,33 @@ MetaEngine &Engine::getMetaEngine() {
assert(plugin);
return plugin->get<MetaEngine>();
}
+
+PauseToken::PauseToken() : _engine(nullptr) {}
+
+PauseToken::PauseToken(Engine *engine) : _engine(engine) {}
+
+void PauseToken::operator=(const PauseToken &t2) {
+ if (t2._engine == _engine) {
+ return;
+ }
+
+ if (_engine) {
+ _engine->resumeEngine();
+ }
+ _engine = t2._engine;
+ if (_engine) {
+ _engine->_pauseLevel++;
+ }
+}
+
+PauseToken::PauseToken(const PauseToken &t2) : _engine(t2._engine) {
+ if (_engine) {
+ _engine->_pauseLevel++;
+ }
+}
+
+PauseToken::~PauseToken() {
+ if (_engine) {
+ _engine->resumeEngine();
+ }
+}
diff --git a/engines/engine.h b/engines/engine.h
index 63432583ce..7b33741e8e 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -56,6 +56,22 @@ class Dialog;
void GUIErrorMessage(const Common::String &msg);
void GUIErrorMessageFormat(const char *fmt, ...) GCC_PRINTF(1, 2);
+class Engine;
+
+class PauseToken {
+public:
+ PauseToken();
+ PauseToken(const PauseToken &);
+ ~PauseToken();
+
+ void operator=(const PauseToken &);
+private:
+ PauseToken(Engine *);
+
+ Engine *_engine;
+
+ friend class Engine;
+};
class Engine {
public:
@@ -343,13 +359,16 @@ public:
* and other stuff. Called right before the system runs a global dialog
* (like a global pause, main menu, options or 'confirm exit' dialog).
*
- * This is a convenience tracker which automatically keeps track on how
- * often the engine has been paused, ensuring that after pausing an engine
- * e.g. twice, it has to be unpaused twice before actuallying resuming.
- *
- * @param pause true to pause the engine, false to resume it
+ * Returns a PauseToken. Multiple pause tokens may exist. The engine will
+ * be resumed when all associated pause tokens reach the end of their lives.
*/
- void pauseEngine(bool pause);
+ PauseToken pauseEngine();
+ private:
+ void resumeEngine();
+
+ friend class PauseToken;
+
+ public:
/**
* Return whether the engine is currently paused or not.
Commit: 59702fae9b1448c26a337da2ea5f0089ab0f3fbd
https://github.com/scummvm/scummvm/commit/59702fae9b1448c26a337da2ea5f0089ab0f3fbd
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
PEGASUS: Use PauseToken
Changed paths:
engines/pegasus/pegasus.cpp
diff --git a/engines/pegasus/pegasus.cpp b/engines/pegasus/pegasus.cpp
index 02b0413551..4fdf3a235e 100644
--- a/engines/pegasus/pegasus.cpp
+++ b/engines/pegasus/pegasus.cpp
@@ -1018,14 +1018,12 @@ void PegasusEngine::handleInput(const Input &input, const Hotspot *cursorSpot) {
// Can only save during a game and not in the demo
if (g_neighborhood && !isDemo()) {
- pauseEngine(true);
+ PauseToken pt = pauseEngine();
Common::Error result = showSaveDialog();
if (result.getCode() != Common::kNoError && result.getCode() != Common::kUserCanceled)
showSaveFailedDialog(result);
-
- pauseEngine(false);
}
}
@@ -1040,7 +1038,7 @@ void PegasusEngine::handleInput(const Input &input, const Hotspot *cursorSpot) {
// Just use the pause menu's restore button since it's there for that
// for you to load anyway.
if (!isDemo() && !(_gameMenu && _gameMenu->getObjectID() == kPauseMenuID)) {
- pauseEngine(true);
+ PauseToken pt = pauseEngine();
if (g_neighborhood) {
makeContinuePoint();
@@ -1062,8 +1060,6 @@ void PegasusEngine::handleInput(const Input &input, const Hotspot *cursorSpot) {
resetIntroTimer();
}
}
-
- pauseEngine(false);
}
}
}
Commit: ce4cfdf5d240262d26b3127ad11d8f23e986ffb0
https://github.com/scummvm/scummvm/commit/ce4cfdf5d240262d26b3127ad11d8f23e986ffb0
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
BACKENDS: Use PauseToken
Changed paths:
backends/events/default/default-events.cpp
diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp
index e7ccbde3f3..8f0e621073 100644
--- a/backends/events/default/default-events.cpp
+++ b/backends/events/default/default-events.cpp
@@ -171,12 +171,11 @@ bool DefaultEventManager::pollEvent(Common::Event &event) {
#endif
case Common::EVENT_RTL:
if (ConfMan.getBool("confirm_exit")) {
+ PauseToken pt;
if (g_engine)
- g_engine->pauseEngine(true);
+ pt = g_engine->pauseEngine();
GUI::MessageDialog alert(_("Do you really want to return to the Launcher?"), _("Launcher"), _("Cancel"));
forwardEvent = _shouldRTL = (alert.runModal() == GUI::kMessageOK);
- if (g_engine)
- g_engine->pauseEngine(false);
} else
_shouldRTL = true;
break;
@@ -193,12 +192,14 @@ bool DefaultEventManager::pollEvent(Common::Event &event) {
break;
}
_confirmExitDialogActive = true;
- if (g_engine)
- g_engine->pauseEngine(true);
- GUI::MessageDialog alert(_("Do you really want to quit?"), _("Quit"), _("Cancel"));
- forwardEvent = _shouldQuit = (alert.runModal() == GUI::kMessageOK);
- if (g_engine)
- g_engine->pauseEngine(false);
+
+ {
+ PauseToken pt;
+ if (g_engine)
+ pt = g_engine->pauseEngine();
+ GUI::MessageDialog alert(_("Do you really want to quit?"), _("Quit"), _("Cancel"));
+ forwardEvent = _shouldQuit = (alert.runModal() == GUI::kMessageOK);
+ }
_confirmExitDialogActive = false;
} else {
_shouldQuit = true;
Commit: 802c0ece7f5b94595df0f831183a1c6b2650eda4
https://github.com/scummvm/scummvm/commit/802c0ece7f5b94595df0f831183a1c6b2650eda4
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
SCUMM: PauseToken for saving
Changed paths:
engines/scumm/saveload.cpp
diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp
index 7f419c1365..0572707816 100644
--- a/engines/scumm/saveload.cpp
+++ b/engines/scumm/saveload.cpp
@@ -195,7 +195,7 @@ bool ScummEngine::saveState(Common::WriteStream *out, bool writeHeader) {
bool ScummEngine::saveState(int slot, bool compat, Common::String &filename) {
bool saveFailed = false;
- pauseEngine(true);
+ PauseToken pt = pauseEngine();
Common::WriteStream *out = openSaveFileForWriting(slot, compat, filename);
if (!out) {
@@ -215,8 +215,6 @@ bool ScummEngine::saveState(int slot, bool compat, Common::String &filename) {
else
debug(1, "State saved as '%s'", filename.c_str());
- pauseEngine(false);
-
return !saveFailed;
}
Commit: 95f4144190b31913a7b399fcd953569f89e801df
https://github.com/scummvm/scummvm/commit/95f4144190b31913a7b399fcd953569f89e801df
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
SCUMM: Use baseclass runDialog & always pause _splayer
Part of the PauseToken refactoring. Needs checking that pausing _splayer is the correct action for all types of pauses.
Changed paths:
engines/scumm/scumm.cpp
engines/scumm/scumm.h
engines/scumm/scumm_v7.h
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 6ffada45c6..6d205d5571 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -2790,26 +2790,15 @@ void ScummEngine::pauseEngineIntern(bool pause) {
}
}
-int ScummEngine::runDialog(Dialog &dialog) {
- // Pause engine
- pauseEngine(true);
-
- // Open & run the dialog
- int result = dialog.runModal();
-
- // Resume engine
- pauseEngine(false);
-
- // Return the result
- return result;
-}
-
#ifdef ENABLE_SCUMM_7_8
-int ScummEngine_v7::runDialog(Dialog &dialog) {
- _splayer->pause();
- int result = ScummEngine::runDialog(dialog);
- _splayer->unpause();
- return result;
+void ScummEngine_v7::pauseEngineIntern(bool pause) {
+ if (pause) {
+ _splayer->pause();
+ } else {
+ _splayer->unpause();
+ }
+
+ ScummEngine::pauseEngineIntern(pause);
}
#endif
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index ccaf2fc749..52c88af1f2 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -497,7 +497,6 @@ protected:
Dialog *_messageDialog;
Dialog *_versionDialog;
- int runDialog(Dialog &dialog) override;
void confirmExitDialog();
void confirmRestartDialog();
void pauseDialog();
diff --git a/engines/scumm/scumm_v7.h b/engines/scumm/scumm_v7.h
index 4148fb1958..cf240fb165 100644
--- a/engines/scumm/scumm_v7.h
+++ b/engines/scumm/scumm_v7.h
@@ -98,7 +98,6 @@ public:
bool isSmushActive() { return _smushActive; }
protected:
- int runDialog(Dialog &dialog) override;
void scummLoop_handleSound() override;
void scummLoop_handleDrawing() override;
@@ -132,6 +131,8 @@ protected:
void drawVerb(int verb, int mode) override;
+ void pauseEngineIntern(bool pause) override;
+
void o6_kernelSetFunctions() override;
};
Commit: c15f268e9b9b034886632f5f482efd3ea4e1ca85
https://github.com/scummvm/scummvm/commit/c15f268e9b9b034886632f5f482efd3ea4e1ca85
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
ENGINES: Allow clearing a PauseToken
Changed paths:
engines/engine.cpp
engines/engine.h
diff --git a/engines/engine.cpp b/engines/engine.cpp
index 093a411140..e01a2b92fa 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -855,6 +855,13 @@ PauseToken::PauseToken(const PauseToken &t2) : _engine(t2._engine) {
}
}
+void PauseToken::clear() {
+ if (_engine) {
+ _engine->resumeEngine();
+ }
+ _engine = nullptr;
+}
+
PauseToken::~PauseToken() {
if (_engine) {
_engine->resumeEngine();
diff --git a/engines/engine.h b/engines/engine.h
index 7b33741e8e..3582bf0281 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -65,6 +65,7 @@ public:
~PauseToken();
void operator=(const PauseToken &);
+ void clear();
private:
PauseToken(Engine *);
Commit: c5bdd7a1f29b4b97de86db55946369d09688d1fd
https://github.com/scummvm/scummvm/commit/c5bdd7a1f29b4b97de86db55946369d09688d1fd
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
GUI: Use PauseToken in Debugger
Changed paths:
gui/debugger.cpp
gui/debugger.h
diff --git a/gui/debugger.cpp b/gui/debugger.cpp
index ea8a699ac0..895f37336d 100644
--- a/gui/debugger.cpp
+++ b/gui/debugger.cpp
@@ -147,11 +147,11 @@ void Debugger::debugPrintColumns(const Common::StringArray &list) {
}
void Debugger::preEnter() {
- g_engine->pauseEngine(true);
+ _debugPauseToken = g_engine->pauseEngine();
}
void Debugger::postEnter() {
- g_engine->pauseEngine(false);
+ _debugPauseToken.clear();
}
void Debugger::attach(const char *entry) {
diff --git a/gui/debugger.h b/gui/debugger.h
index a100aae170..9ffef6bb05 100644
--- a/gui/debugger.h
+++ b/gui/debugger.h
@@ -31,6 +31,8 @@
#include "common/str.h"
#include "common/str-array.h"
+#include "engine.h"
+
namespace GUI {
#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER
@@ -172,6 +174,9 @@ private:
*/
bool _firstTime;
+protected:
+ PauseToken _debugPauseToken;
+
#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER
GUI::ConsoleDialog *_debuggerDialog;
#endif
Commit: feb60191823625651fc4a09dc952edaed8cf4358
https://github.com/scummvm/scummvm/commit/feb60191823625651fc4a09dc952edaed8cf4358
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
QUEEN: Debugger, call base for preEnter and postEnter
Changed paths:
engines/queen/debug.cpp
diff --git a/engines/queen/debug.cpp b/engines/queen/debug.cpp
index 125ddf30c6..3ed4e566a8 100644
--- a/engines/queen/debug.cpp
+++ b/engines/queen/debug.cpp
@@ -50,11 +50,11 @@ Debugger::Debugger(QueenEngine *vm)
Debugger::~Debugger() {} // we need this here for __SYMBIAN32__
void Debugger::preEnter() {
- _vm->pauseEngine(true);
+ GUI::Debugger::preEnter();
}
void Debugger::postEnter() {
- _vm->pauseEngine(false);
+ GUI::Debugger::postEnter();
_vm->graphics()->setupMouseCursor();
}
Commit: f87a73b4f7ed4308ed98910b67abd90e30bdc3e7
https://github.com/scummvm/scummvm/commit/f87a73b4f7ed4308ed98910b67abd90e30bdc3e7
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
ACCESS: Debugger, call base postEnter
Changed paths:
engines/access/debugger.cpp
diff --git a/engines/access/debugger.cpp b/engines/access/debugger.cpp
index 308733ece2..1f563cc4b5 100644
--- a/engines/access/debugger.cpp
+++ b/engines/access/debugger.cpp
@@ -59,7 +59,7 @@ void Debugger::postEnter() {
_playMovieFile.clear();
}
- _vm->pauseEngine(false);
+ GUI::Debugger::postEnter();
}
/*------------------------------------------------------------------------*/
Commit: faa8bea5cb7e3afee33922b84a0b23bd8056dfe2
https://github.com/scummvm/scummvm/commit/faa8bea5cb7e3afee33922b84a0b23bd8056dfe2
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
PARALLACTION: Debugger, call base preEnter & postEnter
Changed paths:
engines/parallaction/debug.cpp
diff --git a/engines/parallaction/debug.cpp b/engines/parallaction/debug.cpp
index 19022fb0fa..506a6a41ee 100644
--- a/engines/parallaction/debug.cpp
+++ b/engines/parallaction/debug.cpp
@@ -51,12 +51,12 @@ Debugger::Debugger(Parallaction *vm)
void Debugger::preEnter() {
_mouseState = _vm->_input->getMouseState();
- _vm->pauseEngine(true);
+ GUI::Debugger::preEnter();
}
void Debugger::postEnter() {
- _vm->pauseEngine(false);
+ GUI::Debugger::postEnter();
_vm->_input->setMouseState(_mouseState);
_vm->_input->setArrowCursor(); // unselects the active item, if any
}
Commit: d26655dc4d8f81b17056d3e49a40913a4b8356e8
https://github.com/scummvm/scummvm/commit/d26655dc4d8f81b17056d3e49a40913a4b8356e8
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
SCI: Debugger, call base preEnter & postEnter
Changed paths:
engines/sci/console.cpp
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 2ffda09965..30902be791 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -271,7 +271,7 @@ void Console::attach(const char *entry) {
}
void Console::preEnter() {
- _engine->pauseEngine(true);
+ GUI::Debugger::preEnter();
}
extern void playVideo(Video::VideoDecoder &videoDecoder);
@@ -299,7 +299,7 @@ void Console::postEnter() {
_videoFrameDelay = 0;
}
- _engine->pauseEngine(false);
+ GUI::Debugger::postEnter();
}
bool Console::cmdHelp(int argc, const char **argv) {
Commit: 736702332e87121c50fa8c48d7f9863aa9d01bf3
https://github.com/scummvm/scummvm/commit/736702332e87121c50fa8c48d7f9863aa9d01bf3
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
SHERLOCK: Debugger, call base postEnter
Changed paths:
engines/sherlock/debugger.cpp
diff --git a/engines/sherlock/debugger.cpp b/engines/sherlock/debugger.cpp
index 39bc1b90ab..9f6ae6fdc3 100644
--- a/engines/sherlock/debugger.cpp
+++ b/engines/sherlock/debugger.cpp
@@ -57,7 +57,7 @@ void Debugger::postEnter() {
_3doPlayMovieFile.clear();
}
- _vm->pauseEngine(false);
+ GUI::Debugger::postEnter();
}
int Debugger::strToInt(const char *s) {
Commit: fa4518fbab96e932c65ed224347e43d0e942efec
https://github.com/scummvm/scummvm/commit/fa4518fbab96e932c65ed224347e43d0e942efec
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
SCI: Use PauseToken in kernelMessageBox
Changed paths:
engines/sci/graphics/controls32.cpp
diff --git a/engines/sci/graphics/controls32.cpp b/engines/sci/graphics/controls32.cpp
index 298006cf82..6c349f1ef4 100644
--- a/engines/sci/graphics/controls32.cpp
+++ b/engines/sci/graphics/controls32.cpp
@@ -913,8 +913,9 @@ int16 GfxControls32::showMessageBox(const Common::String &message, const char *c
}
reg_t GfxControls32::kernelMessageBox(const Common::String &message, const Common::String &title, const uint16 style) {
+ PauseToken pt;
if (g_engine) {
- g_engine->pauseEngine(true);
+ pt = g_engine->pauseEngine();
}
int16 result;
@@ -930,10 +931,6 @@ reg_t GfxControls32::kernelMessageBox(const Common::String &message, const Commo
error("Unsupported MessageBox style 0x%x", style & 0xF);
}
- if (g_engine) {
- g_engine->pauseEngine(false);
- }
-
return make_reg(0, result);
}
Commit: fb92ccbade87bdfbcb9b6988dada320d2da94ad8
https://github.com/scummvm/scummvm/commit/fb92ccbade87bdfbcb9b6988dada320d2da94ad8
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
MOHAWK: Use debugPauseToken in Console::Cmd_QuickTest
Changed paths:
engines/mohawk/console.cpp
diff --git a/engines/mohawk/console.cpp b/engines/mohawk/console.cpp
index 2bbb525870..f34a43366f 100644
--- a/engines/mohawk/console.cpp
+++ b/engines/mohawk/console.cpp
@@ -328,7 +328,7 @@ bool MystConsole::Cmd_Resources(int argc, const char **argv) {
}
bool MystConsole::Cmd_QuickTest(int argc, const char **argv) {
- _vm->pauseEngine(false);
+ _debugPauseToken.clear();
// Go through all the ages, all the views and click random stuff
for (uint i = 0; i < ARRAYSIZE(mystStackNames); i++) {
@@ -366,7 +366,7 @@ bool MystConsole::Cmd_QuickTest(int argc, const char **argv) {
}
}
- _vm->pauseEngine(true);
+ _debugPauseToken = _vm->pauseEngine();
return true;
}
@@ -690,7 +690,7 @@ bool RivenConsole::Cmd_SliderState(int argc, const char **argv) {
}
bool RivenConsole::Cmd_QuickTest(int argc, const char **argv) {
- _vm->pauseEngine(false);
+ _debugPauseToken.clear();
// Go through all the stacks, all the cards and click random stuff
for (uint16 stackId = kStackFirst; stackId <= kStackLast; stackId++) {
@@ -744,7 +744,7 @@ bool RivenConsole::Cmd_QuickTest(int argc, const char **argv) {
}
}
- _vm->pauseEngine(true);
+ _debugPauseToken = _vm->pauseEngine();
return true;
}
Commit: acf81a79c10c6bf155d6b1ed8b8fbee45e08e124
https://github.com/scummvm/scummvm/commit/acf81a79c10c6bf155d6b1ed8b8fbee45e08e124
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
AGOS: Use PauseToken in pause function
Changed paths:
engines/agos/agos.cpp
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp
index 9a360699b3..8c3dd46513 100644
--- a/engines/agos/agos.cpp
+++ b/engines/agos/agos.cpp
@@ -992,12 +992,12 @@ void AGOSEngine::pauseEngineIntern(bool pauseIt) {
}
void AGOSEngine::pause() {
- pauseEngine(true);
+ PauseToken pt = pauseEngine();
while (_pause && !shouldQuit()) {
delay(1);
if (_keyPressed.keycode == Common::KEYCODE_PAUSE) {
- pauseEngine(false);
+ pt.clear();
_keyPressed.reset();
}
}
Commit: c1c90afbde77900cc5b6be8022a2d76c8ba2bc26
https://github.com/scummvm/scummvm/commit/c1c90afbde77900cc5b6be8022a2d76c8ba2bc26
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
MOHAWK: Use PauseToken in menu stack
Changed paths:
engines/mohawk/myst_stacks/menu.cpp
engines/mohawk/myst_stacks/menu.h
diff --git a/engines/mohawk/myst_stacks/menu.cpp b/engines/mohawk/myst_stacks/menu.cpp
index 45c5fdf1c7..3e97104481 100644
--- a/engines/mohawk/myst_stacks/menu.cpp
+++ b/engines/mohawk/myst_stacks/menu.cpp
@@ -108,7 +108,7 @@ uint16 Menu::getVar(uint16 var) {
}
void Menu::o_menuInit(uint16 var, const ArgumentsArray &args) {
- _vm->pauseEngine(true);
+ _pauseToken = _vm->pauseEngine();
if (_inGame) {
_wasCursorVisible = CursorMan.isVisible();
@@ -330,7 +330,7 @@ void Menu::o_menuExit(uint16 var, const ArgumentsArray &args) {
CursorMan.showMouse(_wasCursorVisible);
- _vm->pauseEngine(false);
+ _pauseToken.clear();
}
void Menu::o_playIntroMovies(uint16 var, const ArgumentsArray &args) {
diff --git a/engines/mohawk/myst_stacks/menu.h b/engines/mohawk/myst_stacks/menu.h
index 449a8bd97b..75140b41f4 100644
--- a/engines/mohawk/myst_stacks/menu.h
+++ b/engines/mohawk/myst_stacks/menu.h
@@ -89,6 +89,8 @@ private:
const char **getButtonCaptions() const;
void resetButtons();
+ PauseToken _pauseToken;
+
};
} // End of namespace MystStacks
Commit: c970106234f15442e1a8a4e405118d7632568bdf
https://github.com/scummvm/scummvm/commit/c970106234f15442e1a8a4e405118d7632568bdf
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
PEGASUS: Use PauseToken
Changed paths:
engines/pegasus/pegasus.cpp
engines/pegasus/pegasus.h
diff --git a/engines/pegasus/pegasus.cpp b/engines/pegasus/pegasus.cpp
index 4fdf3a235e..4a944b7ad8 100644
--- a/engines/pegasus/pegasus.cpp
+++ b/engines/pegasus/pegasus.cpp
@@ -2121,13 +2121,13 @@ void PegasusEngine::setAmbienceLevel(uint16 ambientLevel) {
void PegasusEngine::pauseMenu(bool menuUp) {
if (menuUp) {
- pauseEngine(true);
+ _menuPauseToken = pauseEngine();
_screenDimmer.startDisplaying();
_screenDimmer.show();
_gfx->updateDisplay();
useMenu(new PauseMenu());
} else {
- pauseEngine(false);
+ _menuPauseToken.clear();
_screenDimmer.hide();
_screenDimmer.stopDisplaying();
useMenu(0);
diff --git a/engines/pegasus/pegasus.h b/engines/pegasus/pegasus.h
index 80da6d0e44..24a2387cf0 100644
--- a/engines/pegasus/pegasus.h
+++ b/engines/pegasus/pegasus.h
@@ -278,6 +278,7 @@ private:
void doInterfaceOverview();
ScreenDimmer _screenDimmer;
void pauseMenu(bool menuUp);
+ PauseToken _menuPauseToken;
// Energy
int32 _savedEnergyValue;
Commit: 2b3d7ea12d623ab059f7731867b859856b545694
https://github.com/scummvm/scummvm/commit/2b3d7ea12d623ab059f7731867b859856b545694
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
AGI: Use existing runDialog function
Changed paths:
engines/agi/keyboard.cpp
diff --git a/engines/agi/keyboard.cpp b/engines/agi/keyboard.cpp
index a24f1d74c5..c4235c4e29 100644
--- a/engines/agi/keyboard.cpp
+++ b/engines/agi/keyboard.cpp
@@ -549,9 +549,7 @@ bool AgiEngine::handleController(uint16 key) {
bool AgiEngine::showPredictiveDialog() {
GUI::PredictiveDialog predictiveDialog;
- inGameTimerPause();
- predictiveDialog.runModal();
- inGameTimerResume();
+ runDialog(predictiveDialog);
Common::String predictiveResult(predictiveDialog.getResult());
uint16 predictiveResultLen = predictiveResult.size();
Commit: 7ea98181e25aa653c22921a4bd69ba01a7cc7c27
https://github.com/scummvm/scummvm/commit/7ea98181e25aa653c22921a4bd69ba01a7cc7c27
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
AGI: Use PauseToken
Changed paths:
engines/agi/agi.h
engines/agi/global.cpp
engines/agi/op_cmd.cpp
diff --git a/engines/agi/agi.h b/engines/agi/agi.h
index 311e36893f..d869b71873 100644
--- a/engines/agi/agi.h
+++ b/engines/agi/agi.h
@@ -1077,8 +1077,6 @@ public:
void inGameTimerReset(uint32 newPlayTime = 0);
void inGameTimerResetPassedCycles();
- void inGameTimerPause();
- void inGameTimerResume();
uint32 inGameTimerGet();
uint32 inGameTimerGetPassedCycles();
diff --git a/engines/agi/global.cpp b/engines/agi/global.cpp
index f35bc23f28..a42ab04fb2 100644
--- a/engines/agi/global.cpp
+++ b/engines/agi/global.cpp
@@ -213,12 +213,6 @@ void AgiEngine::inGameTimerReset(uint32 newPlayTime) {
void AgiEngine::inGameTimerResetPassedCycles() {
_passedPlayTimeCycles = 0;
}
-void AgiEngine::inGameTimerPause() {
- pauseEngine(true);
-}
-void AgiEngine::inGameTimerResume() {
- pauseEngine(false);
-}
uint32 AgiEngine::inGameTimerGet() {
return getTotalPlayTime();
}
diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp
index e3512396dc..23eca70470 100644
--- a/engines/agi/op_cmd.cpp
+++ b/engines/agi/op_cmd.cpp
@@ -750,20 +750,17 @@ void cmdSaveGame(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
state->_vm->_sound->stopSound();
}
- vm->inGameTimerPause();
+ PauseToken pt = vm->pauseEngine();
if (state->automaticSave) {
if (vm->saveGameAutomatic()) {
// automatic save succeded
- vm->inGameTimerResume();
return;
}
// fall back to regular dialog otherwise
}
vm->saveGameDialog();
-
- vm->inGameTimerResume();
}
void cmdLoadGame(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
@@ -772,20 +769,17 @@ void cmdLoadGame(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
state->_vm->_sound->stopSound();
}
- vm->inGameTimerPause();
+ PauseToken pt = vm->pauseEngine();
if (state->automaticSave) {
if (vm->loadGameAutomatic()) {
// automatic restore succeded
- vm->inGameTimerResume();
return;
}
// fall back to regular dialog otherwise
}
vm->loadGameDialog();
-
- vm->inGameTimerResume();
}
void cmdInitDisk(AgiGame *state, AgiEngine *vm, uint8 *parameter) { // do nothing
@@ -1746,11 +1740,9 @@ void cmdSetGameID(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
void cmdPause(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
// Show pause message box
- vm->inGameTimerPause();
+ PauseToken pt = vm->pauseEngine();
state->_vm->_systemUI->pauseDialog();
-
- vm->inGameTimerResume();
}
void cmdSetMenu(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
Commit: 4a6a8f0c369f129a62f99ff5d51e0373ae8e4574
https://github.com/scummvm/scummvm/commit/4a6a8f0c369f129a62f99ff5d51e0373ae8e4574
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
SWORD2: Use PauseToken
Changed paths:
engines/sword2/sword2.cpp
engines/sword2/sword2.h
diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp
index 95855e4fa2..2fe65edbff 100644
--- a/engines/sword2/sword2.cpp
+++ b/engines/sword2/sword2.cpp
@@ -546,9 +546,9 @@ Common::Error Sword2Engine::run() {
case Common::KEYCODE_p:
if (isPaused()) {
_screen->dimPalette(false);
- pauseEngine(false);
+ _gamePauseToken.clear();
} else {
- pauseEngine(true);
+ _gamePauseToken = pauseEngine();
_screen->dimPalette(true);
}
break;
diff --git a/engines/sword2/sword2.h b/engines/sword2/sword2.h
index 1a1c774edf..64536ff208 100644
--- a/engines/sword2/sword2.h
+++ b/engines/sword2/sword2.h
@@ -140,6 +140,8 @@ private:
// Original game platform (PC/PSX)
static Common::Platform _platform;
+ PauseToken _gamePauseToken;
+
protected:
// Engine APIs
Common::Error run() override;
Commit: 866800ffb0ed64df346f2f0e46577574e117af8f
https://github.com/scummvm/scummvm/commit/866800ffb0ed64df346f2f0e46577574e117af8f
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
CRUISE: Use PauseToken
Changed paths:
engines/cruise/cruise.cpp
engines/cruise/cruise.h
diff --git a/engines/cruise/cruise.cpp b/engines/cruise/cruise.cpp
index 3bc01fdcda..b633acc2e4 100644
--- a/engines/cruise/cruise.cpp
+++ b/engines/cruise/cruise.cpp
@@ -178,9 +178,8 @@ bool CruiseEngine::loadLanguageStrings() {
}
void CruiseEngine::pauseEngine(bool pause) {
- Engine::pauseEngine(pause);
-
if (pause) {
+ _gamePauseToken = Engine::pauseEngine();
// Draw the 'Paused' message
drawSolidBox(64, 100, 256, 117, 0);
drawString(10, 100, langString(ID_PAUSED), gfxModuleData.pPage00, itemColor, 300);
@@ -189,6 +188,7 @@ void CruiseEngine::pauseEngine(bool pause) {
_savedCursor = currentCursor;
changeCursor(CURSOR_NOMOUSE);
} else {
+ _gamePauseToken.clear();
processAnimation();
flipScreen();
changeCursor(_savedCursor);
diff --git a/engines/cruise/cruise.h b/engines/cruise/cruise.h
index 16244f8faf..16a4324072 100644
--- a/engines/cruise/cruise.h
+++ b/engines/cruise/cruise.h
@@ -62,6 +62,7 @@ private:
uint32 _lastTick;
int _gameSpeed;
bool _speedFlag;
+ PauseToken _gamePauseToken;
void initialize();
void deinitialize();
Commit: d315fc8add37b7774131fbb26cb123687e8dec90
https://github.com/scummvm/scummvm/commit/d315fc8add37b7774131fbb26cb123687e8dec90
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
MACGUI: Use real Engine and PauseToken classes
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 3367b02e64..dfb37c75bc 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -1087,9 +1087,7 @@ bool MacMenu::mouseMove(int x, int y) {
} else if ((_wm->_mode & kWMModeAutohideMenu) && !_bbox.contains(x, y)) {
_isVisible = false;
if (_wm->_mode & kWMModalMenuMode) {
- _wm->pauseEngine(false);
- *_wm->_screen = *_wm->_screenCopy; // restore screen
- g_system->copyRectToScreen(_wm->_screenCopy->getBasePtr(0, 0), _wm->_screenCopy->pitch, 0, 0, _wm->_screenCopy->w, _wm->_screenCopy->h);
+ _wm->disableScreenCopy();
}
}
@@ -1119,9 +1117,7 @@ bool MacMenu::mouseRelease(int x, int y) {
_isVisible = false;
if (_wm->_mode & kWMModalMenuMode) {
- _wm->pauseEngine(false);
- *_wm->_screen = *_wm->_screenCopy; // restore screen
- g_system->copyRectToScreen(_wm->_screenCopy->getBasePtr(0, 0), _wm->_screenCopy->pitch, 0, 0, _wm->_screenCopy->w, _wm->_screenCopy->h);
+ _wm->disableScreenCopy();
}
if (_activeItem != -1 && _activeSubItem != -1 && _menustack.back()->items[_activeSubItem]->enabled) {
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 0a55d6c6b6..2caecb407b 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -168,7 +168,6 @@ MacWindowManager::MacWindowManager(uint32 mode) {
_engineP = nullptr;
_engineR = nullptr;
- _pauseEngineCallback = nullptr;
_redrawEngineCallback = nullptr;
_colorBlack = 0;
@@ -266,16 +265,27 @@ void MacWindowManager::activateMenu() {
return;
if (_mode & kWMModalMenuMode) {
- if (!_screenCopy)
- _screenCopy = new ManagedSurface(*_screen); // Create a copy
- else
- *_screenCopy = *_screen;
- pauseEngine(true);
+ activateScreenCopy();
}
_menu->setVisible(true);
}
+void MacWindowManager::activateScreenCopy() {
+ if (!_screenCopy)
+ _screenCopy = new ManagedSurface(*_screen); // Create a copy
+ else
+ *_screenCopy = *_screen;
+
+ _screenCopyPauseToken = pauseEngine();
+}
+
+void MacWindowManager::disableScreenCopy() {
+ _screenCopyPauseToken.clear();
+ *_screen = *_screenCopy; // restore screen
+ g_system->copyRectToScreen(_screenCopy->getBasePtr(0, 0), _screenCopy->pitch, 0, 0, _screenCopy->w, _screenCopy->h);
+}
+
bool MacWindowManager::isMenuActive() {
if (!_menu)
return false;
@@ -621,17 +631,12 @@ uint MacWindowManager::findBestColor(byte cr, byte cg, byte cb) {
return bestColor;
}
-void MacWindowManager::pauseEngine(bool pause) {
- if (_engineP && _pauseEngineCallback) {
- _pauseEngineCallback(_engineP, pause);
- } else {
- warning("MacWindowManager::pauseEngine(): no pauseEngineCallback is set");
- }
+PauseToken MacWindowManager::pauseEngine() {
+ return _engineP->pauseEngine();
}
-void MacWindowManager::setEnginePauseCallback(void *engine, void (*pauseCallback)(void *, bool)) {
+void MacWindowManager::setEnginePauseCallback(Engine *engine) {
_engineP = engine;
- _pauseEngineCallback = pauseCallback;
}
void MacWindowManager::setEngineRedrawCallback(void *engine, void (*redrawCallback)(void *)) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index e222b21d05..f469121467 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -31,6 +31,8 @@
#include "graphics/fontman.h"
#include "graphics/macgui/macwindow.h"
+#include "engines/engine.h"
+
namespace Graphics {
namespace MacGUIConstants {
@@ -152,6 +154,9 @@ public:
void activateMenu();
+ void activateScreenCopy();
+ void disableScreenCopy();
+
bool isMenuActive();
/**
@@ -231,11 +236,11 @@ public:
void pushCustomCursor(const Graphics::Cursor *cursor);
void popCursor();
- void pauseEngine(bool pause);
+ PauseToken pauseEngine();
void setMode(uint32 mode);
- void setEnginePauseCallback(void *engine, void (*pauseCallback)(void *engine, bool pause));
+ void setEnginePauseCallback(Engine *engine);
void setEngineRedrawCallback(void *engine, void (*redrawCallback)(void *engine));
void passPalette(const byte *palette, uint size);
@@ -282,14 +287,15 @@ private:
MacMenu *_menu;
uint32 _menuDelay;
- void *_engineP;
+ Engine *_engineP;
void *_engineR;
- void (*_pauseEngineCallback)(void *engine, bool pause);
void (*_redrawEngineCallback)(void *engine);
bool _cursorIsArrow;
MacWidget *_activeWidget;
+
+ PauseToken _screenCopyPauseToken;
};
} // End of namespace Graphics
Commit: 3edcc22c785bda987521b490ec30efe51302314f
https://github.com/scummvm/scummvm/commit/3edcc22c785bda987521b490ec30efe51302314f
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
PINK: Use new MACGUI interface
Changed paths:
engines/pink/gui.cpp
engines/pink/pink.cpp
engines/pink/pink.h
diff --git a/engines/pink/gui.cpp b/engines/pink/gui.cpp
index addefbe4d6..26bcfaa794 100644
--- a/engines/pink/gui.cpp
+++ b/engines/pink/gui.cpp
@@ -132,7 +132,7 @@ static void menuCommandsCallback(int action, Common::U32String &, void *data) {
}
void PinkEngine::initMenu() {
- _director->getWndManager().setEnginePauseCallback(this, &pauseEngine);
+ _director->getWndManager().setEnginePauseCallback(this);
_menu = Graphics::MacMenu::createMenuFromPEexe(_exeResources, &_director->getWndManager());
_menu->calcDimensions();
diff --git a/engines/pink/pink.cpp b/engines/pink/pink.cpp
index e99c68dbde..4f90f31a23 100644
--- a/engines/pink/pink.cpp
+++ b/engines/pink/pink.cpp
@@ -159,17 +159,6 @@ Common::Error Pink::PinkEngine::run() {
return Common::kNoError;
}
-void PinkEngine::pauseEngine(void *engine, bool pause) {
- Engine *vm = (Engine *)engine;
- if (pause) {
- vm->pauseEngine(true);
- } else {
- while (vm->isPaused()) {
- vm->pauseEngine(false);
- }
- }
-}
-
void PinkEngine::load(Archive &archive) {
archive.skipString();
archive.skipString();
diff --git a/engines/pink/pink.h b/engines/pink/pink.h
index 6f5ddba2c7..6294362e11 100644
--- a/engines/pink/pink.h
+++ b/engines/pink/pink.h
@@ -105,8 +105,6 @@ public:
return Common::String::format("%s.s%02d", _targetName.c_str(), slot);
}
- static void pauseEngine(void *engine, bool pause); // for MacWndMgr
-
friend class Console;
protected:
Commit: 8079dc8d721a4a914b0bda5be7c9881c2104a7fe
https://github.com/scummvm/scummvm/commit/8079dc8d721a4a914b0bda5be7c9881c2104a7fe
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
MACGUI, PINK: Rename setEnginePauseCallback to setEngine
Changed paths:
engines/pink/gui.cpp
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/engines/pink/gui.cpp b/engines/pink/gui.cpp
index 26bcfaa794..d256e92f52 100644
--- a/engines/pink/gui.cpp
+++ b/engines/pink/gui.cpp
@@ -132,7 +132,7 @@ static void menuCommandsCallback(int action, Common::U32String &, void *data) {
}
void PinkEngine::initMenu() {
- _director->getWndManager().setEnginePauseCallback(this);
+ _director->getWndManager().setEngine(this);
_menu = Graphics::MacMenu::createMenuFromPEexe(_exeResources, &_director->getWndManager());
_menu->calcDimensions();
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 2caecb407b..1ef7dc0ba0 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -635,7 +635,7 @@ PauseToken MacWindowManager::pauseEngine() {
return _engineP->pauseEngine();
}
-void MacWindowManager::setEnginePauseCallback(Engine *engine) {
+void MacWindowManager::setEngine(Engine *engine) {
_engineP = engine;
}
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index f469121467..31c4137b73 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -240,7 +240,7 @@ public:
void setMode(uint32 mode);
- void setEnginePauseCallback(Engine *engine);
+ void setEngine(Engine *engine);
void setEngineRedrawCallback(void *engine, void (*redrawCallback)(void *engine));
void passPalette(const byte *palette, uint size);
Commit: f5ac623cca9b28780ba22243c90b2b566c46d41a
https://github.com/scummvm/scummvm/commit/f5ac623cca9b28780ba22243c90b2b566c46d41a
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
ENGINES: Disallow assignment to a busy pause token.
Changed paths:
engines/engine.cpp
diff --git a/engines/engine.cpp b/engines/engine.cpp
index e01a2b92fa..c618db8668 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -836,12 +836,8 @@ PauseToken::PauseToken() : _engine(nullptr) {}
PauseToken::PauseToken(Engine *engine) : _engine(engine) {}
void PauseToken::operator=(const PauseToken &t2) {
- if (t2._engine == _engine) {
- return;
- }
-
if (_engine) {
- _engine->resumeEngine();
+ error("Tried to assign to an already busy PauseToken");
}
_engine = t2._engine;
if (_engine) {
Commit: 830a239b046fb769f9ebb87beb5dcc1493d50447
https://github.com/scummvm/scummvm/commit/830a239b046fb769f9ebb87beb5dcc1493d50447
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
ENGINES: Move semantics for PauseToken
Only compilers who understands move semantics see the code.
Changed paths:
engines/engine.cpp
engines/engine.h
diff --git a/engines/engine.cpp b/engines/engine.cpp
index c618db8668..5496b4f9ee 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -863,3 +863,17 @@ PauseToken::~PauseToken() {
_engine->resumeEngine();
}
}
+
+#if __cplusplus >= 201103L
+PauseToken::PauseToken(PauseToken &&t2) : _engine(t2._engine) {
+ t2._engine = nullptr;
+}
+
+void PauseToken::operator=(PauseToken &&t2) {
+ if (_engine) {
+ error("Tried to assign to an already busy PauseToken");
+ }
+ _engine = t2._engine;
+ t2._engine = nullptr;
+}
+#endif
diff --git a/engines/engine.h b/engines/engine.h
index 3582bf0281..a9e10bc8c8 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -58,13 +58,27 @@ void GUIErrorMessageFormat(const char *fmt, ...) GCC_PRINTF(1, 2);
class Engine;
+
+/**
+* Manages pausing by Engine::pauseEngine handing out tokens that
+* each represent one requested level of pause.
+*/
class PauseToken {
public:
PauseToken();
PauseToken(const PauseToken &);
+#if __cplusplus >= 201103L
+ PauseToken(PauseToken &&);
+#endif
~PauseToken();
void operator=(const PauseToken &);
+#if __cplusplus >= 201103L
+ void operator=(PauseToken &&);
+#endif
+ /** Manually releases the PauseToken. Only allowed if the token
+ * currently represents a pause request.
+ */
void clear();
private:
PauseToken(Engine *);
@@ -356,7 +370,7 @@ public:
static MetaEngine &getMetaEngine();
/**
- * Pause or resume the engine. This should stop/resume any audio playback
+ * Pause the engine. This should stop any audio playback
* and other stuff. Called right before the system runs a global dialog
* (like a global pause, main menu, options or 'confirm exit' dialog).
*
@@ -364,12 +378,17 @@ public:
* be resumed when all associated pause tokens reach the end of their lives.
*/
PauseToken pauseEngine();
- private:
- void resumeEngine();
+private:
+ /** Resume the engine. This should resume any audio playback and other stuff.
+ *
+ * Only PauseToken is allowed to call this member function. Use the PauseToken
+ * that you got from pauseEngine to resume the engine.
+ */
+ void resumeEngine();
- friend class PauseToken;
+ friend class PauseToken;
- public:
+public:
/**
* Return whether the engine is currently paused or not.
Commit: 1b4ce9096f83d6b95ec618856505623f54412271
https://github.com/scummvm/scummvm/commit/1b4ce9096f83d6b95ec618856505623f54412271
Author: Henrik "Henke37" Andersson (henke at henke37.cjb.net)
Date: 2020-05-10T23:39:31+02:00
Commit Message:
ENGINES: Disallow clearing an already clear pause token.
Changed paths:
engines/engine.cpp
diff --git a/engines/engine.cpp b/engines/engine.cpp
index 5496b4f9ee..0100385586 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -852,9 +852,10 @@ PauseToken::PauseToken(const PauseToken &t2) : _engine(t2._engine) {
}
void PauseToken::clear() {
- if (_engine) {
- _engine->resumeEngine();
+ if (!_engine) {
+ error("Tried to clear an already cleared PauseToken");
}
+ _engine->resumeEngine();
_engine = nullptr;
}
More information about the Scummvm-git-logs
mailing list