[Scummvm-git-logs] scummvm master -> 0fe3ab531d3ef3b60d0f8b16acbe59d59a08e069
djsrv
dservilla at gmail.com
Fri Jun 12 14:51:19 UTC 2020
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
d5d4e077ab DIRECTOR: LINGO: Allow loading shared casts' menus
51b37067ca GRAPHICS: MACGUI: Add removeMenu
0fe3ab531d DIRECTOR: LINGO: Remove custom menu on restart
Commit: d5d4e077ab13fe5ed4e40c85ab21b457280abe73
https://github.com/scummvm/scummvm/commit/d5d4e077ab13fe5ed4e40c85ab21b457280abe73
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-12T10:32:41-04:00
Commit Message:
DIRECTOR: LINGO: Allow loading shared casts' menus
Changed paths:
engines/director/director.h
engines/director/lingo/lingo-builtins.cpp
engines/director/resource.cpp
engines/director/score-loading.cpp
engines/director/score.cpp
engines/director/score.h
engines/director/stxt.h
diff --git a/engines/director/director.h b/engines/director/director.h
index 2cb867a5a6..aa757de497 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -31,6 +31,7 @@
#include "engines/engine.h"
#include "graphics/managed_surface.h"
+#include "director/stxt.h"
#include "director/types.h"
namespace Common {
@@ -119,6 +120,7 @@ public:
void loadSharedCastsFrom(Common::String filename);
void clearSharedCast();
Cast *getCastMember(int castId);
+ const Stxt *getStxt(int castId);
void loadPatterns();
uint32 transformColor(uint32 color);
Graphics::MacPatterns &getPatterns();
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 141c38ae3d..5b7864186b 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1514,10 +1514,7 @@ void LB::b_installMenu(int nargs) {
int castId = d.asInt();
- if (g_director->getVersion() < 4)
- castId += g_director->getCurrentScore()->_castIDoffset;
-
- const Stxt *stxt = g_director->getCurrentScore()->_loadedStxts->getVal(castId, nullptr);
+ const Stxt *stxt = g_director->getStxt(castId);
if (!stxt) {
warning("installMenu: Unknown cast number #%d", castId);
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index bf2d997d17..094e7c76a2 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -323,4 +323,15 @@ Cast *DirectorEngine::getCastMember(int castId) {
return result;
}
+const Stxt *DirectorEngine::getStxt(int castId) {
+ const Stxt *result = nullptr;
+ if (_currentScore) {
+ result = _currentScore->getStxt(castId);
+ }
+ if (result == nullptr && _sharedScore) {
+ result = _sharedScore->getStxt(castId);
+ }
+ return result;
+}
+
} // End of namespace Director
diff --git a/engines/director/score-loading.cpp b/engines/director/score-loading.cpp
index 533018d32a..8006429277 100644
--- a/engines/director/score-loading.cpp
+++ b/engines/director/score-loading.cpp
@@ -239,7 +239,7 @@ bool Score::loadArchive(bool isSharedCast) {
_loadedStxts = new Common::HashMap<int, const Stxt *>();
for (Common::Array<uint16>::iterator iterator = stxt.begin(); iterator != stxt.end(); ++iterator) {
- _loadedStxts->setVal(*iterator,
+ _loadedStxts->setVal(*iterator - _castIDoffset,
new Stxt(*(r = _movieArchive->getResource(MKTAG('S','T','X','T'), *iterator))));
delete r;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index cc8a734a6b..cd083f8098 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -792,4 +792,13 @@ Cast *Score::getCastMember(int castId) {
return result;
}
+const Stxt *Score::getStxt(int castId) {
+ const Stxt *result = nullptr;
+
+ if (_loadedStxts->contains(castId)) {
+ result = _loadedStxts->getVal(castId);
+ }
+ return result;
+}
+
} // End of namespace Director
diff --git a/engines/director/score.h b/engines/director/score.h
index 0c38a2daf9..e65d527c09 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -140,6 +140,7 @@ public:
bool haveZoomBox() { return !_zoomBoxes.empty(); }
Cast *getCastMember(int castId);
+ const Stxt *getStxt(int castId);
void renderFrame(uint16 frameId, bool forceUpdate = false, bool updateStageOnly = false);
void renderSprite(uint16 id);
void unrenderSprite(uint16 spriteId);
diff --git a/engines/director/stxt.h b/engines/director/stxt.h
index a16b12b51e..b86d991e25 100644
--- a/engines/director/stxt.h
+++ b/engines/director/stxt.h
@@ -23,6 +23,8 @@
#ifndef DIRECTOR_STXT_H
#define DIRECTOR_STXT_H
+#include "director/cast.h"
+
namespace Director {
class Stxt {
Commit: 51b37067ca43d85886a23fc42b8103a23bd33a4f
https://github.com/scummvm/scummvm/commit/51b37067ca43d85886a23fc42b8103a23bd33a4f
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-12T10:49:57-04:00
Commit Message:
GRAPHICS: MACGUI: Add removeMenu
Changed paths:
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 2bf4528b88..99f4da10e7 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -263,6 +263,14 @@ MacMenu *MacWindowManager::addMenu() {
return _menu;
}
+void MacWindowManager::removeMenu() {
+ if (_menu) {
+ _windows[_menu->getId()] = nullptr;
+ delete _menu;
+ _menu = nullptr;
+ }
+}
+
void MacWindowManager::activateMenu() {
if (!_menu || ((_mode & kWMModeAutohideMenu) && _menu->isVisible()))
return;
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 158428704d..afbccda925 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -155,6 +155,7 @@ public:
*/
MacMenu *addMenu();
+ void removeMenu();
void activateMenu();
void activateScreenCopy();
Commit: 0fe3ab531d3ef3b60d0f8b16acbe59d59a08e069
https://github.com/scummvm/scummvm/commit/0fe3ab531d3ef3b60d0f8b16acbe59d59a08e069
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-12T10:50:17-04:00
Commit Message:
DIRECTOR: LINGO: Remove custom menu on restart
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 5b7864186b..5f38f4e1df 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1616,7 +1616,7 @@ void LB::b_installMenu(int nargs) {
menu->createSubMenuFromString(submenu, submenuText.c_str(), 0);
}
- // FIXME: Menu callbacks should not be in the movie's lingo archive
+ // TODO: Menu callbacks should probably not be in the movie's lingo archive
g_lingo->addCode(handlers.c_str(), kMovieScript, 1337);
}
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 29645209ce..bd90120855 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -33,6 +33,8 @@
#include "director/sprite.h"
#include "director/util.h"
+#include "graphics/macgui/macwindowmanager.h"
+
namespace Director {
Lingo *g_lingo;
@@ -632,10 +634,6 @@ void Lingo::restartLingo(bool keepSharedCast) {
LingoArchive *arch = &_archives[a];
for (int i = 0; i <= kMaxScriptType; i++) {
for (ScriptContextHash::iterator it = arch->scriptContexts[i].begin(); it != arch->scriptContexts[i].end(); ++it) {
- // FIXME: Menu callbacks should not be in the movie's lingo archive
- if (it->_key == 1337)
- continue;
-
it->_value->functions.clear();
delete it->_value;
}
@@ -645,14 +643,11 @@ void Lingo::restartLingo(bool keepSharedCast) {
arch->names.clear();
arch->eventHandlers.clear();
- // FIXME: Menu callbacks should not be in the movie's lingo archive
- for (SymbolHash::iterator it = arch->functionHandlers.begin(); it != arch->functionHandlers.end(); ++it) {
- if (!it->_key.hasPrefixIgnoreCase("scummvm"))
- arch->functionHandlers.erase(it->_key);
- }
-
+ arch->functionHandlers.clear();
}
+ g_director->_wm->removeMenu();
+
// TODO
//
// reset the following:
@@ -665,7 +660,6 @@ void Lingo::restartLingo(bool keepSharedCast) {
// the immediate sprite properties
// the puppetSprite
// cursor commands
- // custom menus
//
// NOTE:
// timeoutScript is not reset
More information about the Scummvm-git-logs
mailing list