[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