[Scummvm-git-logs] scummvm master -> b9ad81692cc274c999e11f0c4f8078bac7087bfa

eriktorbjorn noreply at scummvm.org
Fri Jan 10 06:04:53 UTC 2025


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
9b79e3136e SCUMM: MACGUI: Move comment to more appropriate spot
b9ad81692c SCUMM: MACGUI: Move menu updating (disabling save etc) into subclasses


Commit: 9b79e3136e25b907db40c51bd11ef4a0998a7b9d
    https://github.com/scummvm/scummvm/commit/9b79e3136e25b907db40c51bd11ef4a0998a7b9d
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-10T06:31:45+01:00

Commit Message:
SCUMM: MACGUI: Move comment to more appropriate spot

Changed paths:
    engines/scumm/macgui/macgui_impl.cpp


diff --git a/engines/scumm/macgui/macgui_impl.cpp b/engines/scumm/macgui/macgui_impl.cpp
index 4ba407bc9f8..9d357df88b2 100644
--- a/engines/scumm/macgui/macgui_impl.cpp
+++ b/engines/scumm/macgui/macgui_impl.cpp
@@ -439,11 +439,6 @@ void MacGuiImpl::updateWindowManager() {
 	if (!menu)
 		return;
 
-	// We want the arrow cursor for menus. Note that the menu triggers even
-	// when the mouse is invisible, which may or may not be a bug. But the
-	// original did allow you to open the menu with Alt even when the
-	// cursor was visible, so for now it's a feature.
-
 	bool saveCondition = true;
 	bool loadCondition = true;
 
@@ -560,6 +555,11 @@ void MacGuiImpl::updateWindowManager() {
 }
 
 void MacGuiImpl::onMenuOpen() {
+	// We want the arrow cursor for menus. Note that the menu triggers even
+	// when the mouse is invisible, which may or may not be a bug. But the
+	// original did allow you to open the menu with Alt even when the
+	// cursor was visible, so for now it's a feature.
+
 	if (!_menuIsActive) {
 		_menuIsActive = true;
 		_cursorWasVisible = CursorMan.showMouse(true);


Commit: b9ad81692cc274c999e11f0c4f8078bac7087bfa
    https://github.com/scummvm/scummvm/commit/b9ad81692cc274c999e11f0c4f8078bac7087bfa
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-10T07:02:38+01:00

Commit Message:
SCUMM: MACGUI: Move menu updating (disabling save etc) into subclasses

The only thing that remains in MacGuiImpl is the simplest form of
save/load disabling. Neither Loom nor Last Crusade use that, as they
have additional conditions imposed on them.

Changed paths:
    engines/scumm/macgui/macgui_impl.cpp
    engines/scumm/macgui/macgui_impl.h
    engines/scumm/macgui/macgui_indy3.cpp
    engines/scumm/macgui/macgui_indy3.h
    engines/scumm/macgui/macgui_loom.cpp
    engines/scumm/macgui/macgui_loom.h
    engines/scumm/macgui/macgui_v5.cpp
    engines/scumm/macgui/macgui_v5.h
    engines/scumm/macgui/macgui_v6.cpp
    engines/scumm/macgui/macgui_v6.h


diff --git a/engines/scumm/macgui/macgui_impl.cpp b/engines/scumm/macgui/macgui_impl.cpp
index 9d357df88b2..e53ed05296b 100644
--- a/engines/scumm/macgui/macgui_impl.cpp
+++ b/engines/scumm/macgui/macgui_impl.cpp
@@ -350,6 +350,20 @@ void MacGuiImpl::addMenu(Graphics::MacMenu *menu, int menuId) {
 	resource.close();
 }
 
+void MacGuiImpl::updateMenus() {
+	// We can't use the name of the menus here, because there are
+	// non-English versions. Let's hope the menu positions are always the
+	// same, at least!
+
+	Graphics::MacMenu *menu = _windowManager->getMenu();
+	Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
+	Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
+	Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
+
+	loadMenu->enabled = _vm->canLoadGameStateCurrently();
+	saveMenu->enabled = _vm->canSaveGameStateCurrently();
+}
+
 bool MacGuiImpl::handleMenu(int id, Common::String &name) {
 	// This menu item (e.g. a menu separator) has no action, so it's
 	// handled trivially.
@@ -439,115 +453,11 @@ void MacGuiImpl::updateWindowManager() {
 	if (!menu)
 		return;
 
-	bool saveCondition = true;
-	bool loadCondition = true;
-
-	if (_vm->_game.id == GID_INDY3) {
-		// Taken from Mac disasm...
-		// The VAR(94) part tells us whether the copy protection has
-		// failed or not, while the VAR(58) part uses bitmasks to enable
-		// or disable saving and loading during normal gameplay.
-		saveCondition = (_vm->VAR(58) & 0x01) && !(_vm->VAR(94) & 0x10);
-		loadCondition = (_vm->VAR(58) & 0x02) && !(_vm->VAR(94) & 0x10);
-	} else if (_vm->_game.id == GID_LOOM) {
-		// TODO: Complete LOOM with the rest of the proper code from disasm,
-		// for now we only have the copy protection code and a best guess in place...
-		//
-		// Details:
-		// VAR(221) & 0x4000:           Copy protection bit (the only thing I could confirm from the disasm)
-		// VAR(VAR_VERB_SCRIPT) == 5:   Best guess... it prevents saving/loading from e.g. difficulty selection screen
-		// _userPut > 0:                Best guess... it prevents saving/loading during cutscenes
-
-		saveCondition = loadCondition =
-			!(_vm->VAR(221) & 0x4000) &&
-			(_vm->VAR(_vm->VAR_VERB_SCRIPT) == 5) &&
-			(_vm->_userPut > 0);
-	} else {
-		saveCondition = true;
-		loadCondition = true;
-	}
-
-	bool canLoad = _vm->canLoadGameStateCurrently() && loadCondition;
-	bool canSave = _vm->canSaveGameStateCurrently() && saveCondition;
-
-	Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
-	Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
-	Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
-
-	if (loadMenu)
-		loadMenu->enabled = canLoad;
-
-	if (saveMenu)
-		saveMenu->enabled = canSave;
+	updateMenus();
 
 	if (!_windowManager->isMenuActive() && _menuIsActive)
 		onMenuClose();
 
-	if (_vm->_game.version > 3 && _vm->_game.version < 6) {
-		Graphics::MacMenuItem *windowMenu = menu->getMenuItem("Window");
-
-		if (menu->numberOfMenuItems(windowMenu) >= 8)
-			menu->getSubMenuItem(windowMenu, 7)->checked = _vm->_useMacGraphicsSmoothing;
-
-		Graphics::MacMenuItem *speechMenu = menu->getMenuItem("Speech");
-
-		if (speechMenu) {
-			menu->getSubMenuItem(speechMenu, 0)->checked = false; // Voice Only
-			menu->getSubMenuItem(speechMenu, 1)->checked = false; // Text Only
-			menu->getSubMenuItem(speechMenu, 2)->checked = false; // Voice and Text
-
-			switch (_vm->_voiceMode) {
-			case 0: // Voice Only
-				menu->getSubMenuItem(speechMenu, 0)->checked = true;
-				break;
-			case 1: // Voice and Text
-				menu->getSubMenuItem(speechMenu, 2)->checked = true;
-				break;
-			case 2: // Text Only
-				menu->getSubMenuItem(speechMenu, 1)->checked = true;
-				break;
-			default:
-				warning("MacGuiImpl::updateWindowManager(): Invalid voice mode %d", _vm->_voiceMode);
-				break;
-			}
-		}
-	} else if (_vm->_game.version >= 6 || _vm->_game.id == GID_MANIAC) {
-		// We can't use the name of the menus here, because there are
-		// non-English versions. Let's hope the menu positions are
-		// always the same, at least!
-
-		Graphics::MacMenuItem *videoMenu = menu->getMenuItem(3);
-
-		menu->getSubMenuItem(videoMenu, 2)->checked = true;
-
-		if (_vm->_game.id != GID_MANIAC)
-			menu->getSubMenuItem(videoMenu, 3)->checked = _vm->_useMacGraphicsSmoothing;
-
-		Graphics::MacMenuItem *soundMenu = menu->getMenuItem(4);
-
-		menu->getSubMenuItem(soundMenu, 0)->checked = (_vm->_soundEnabled & 2); // Music
-		menu->getSubMenuItem(soundMenu, 1)->checked = (_vm->_soundEnabled & 1); // Effects
-		menu->getSubMenuItem(soundMenu, 5)->checked = false; // Text Only
-		menu->getSubMenuItem(soundMenu, 6)->checked = false; // Voice Only
-		menu->getSubMenuItem(soundMenu, 7)->checked = false; // Text & Voice
-
-		switch (_vm->_voiceMode) {
-		case 0:	// Voice Only
-
-			menu->getSubMenuItem(soundMenu, 6)->checked = true;
-			break;
-		case 1: // Voice and Text
-			menu->getSubMenuItem(soundMenu, 7)->checked = true;
-			break;
-		case 2:	// Text Only
-			menu->getSubMenuItem(soundMenu, 5)->checked = true;
-			break;
-		default:
-			warning("MacGuiImpl::updateWindowManager(): Invalid voice mode %d", _vm->_voiceMode);
-			break;
-		}
-	}
-
 	if (menu->isVisible())
 		updatePalette();
 
diff --git a/engines/scumm/macgui/macgui_impl.h b/engines/scumm/macgui/macgui_impl.h
index d5a5ed455f7..504f3daeadd 100644
--- a/engines/scumm/macgui/macgui_impl.h
+++ b/engines/scumm/macgui/macgui_impl.h
@@ -807,6 +807,7 @@ public:
 	static void menuCallback(int id, Common::String &name, void *data);
 	virtual bool initialize();
 	void updateWindowManager();
+	virtual void updateMenus();
 
 	const Graphics::Font *getFont(FontId fontId);
 	virtual const Graphics::Font *getFontByScummId(int32 id) = 0;
diff --git a/engines/scumm/macgui/macgui_indy3.cpp b/engines/scumm/macgui/macgui_indy3.cpp
index 424c0fa6d2a..9647167d3d6 100644
--- a/engines/scumm/macgui/macgui_indy3.cpp
+++ b/engines/scumm/macgui/macgui_indy3.cpp
@@ -1079,6 +1079,23 @@ void MacIndy3Gui::printCharToTextArea(int chr, int x, int y, int color) {
 	font->drawChar(&_textArea, chr, x + 5, y + 11, color);
 }
 
+void MacIndy3Gui::updateMenus() {
+	// Taken from Mac disasm...
+	// The VAR(94) part tells us whether the copy protection has
+	// failed or not, while the VAR(58) part uses bitmasks to enable
+	// or disable saving and loading during normal gameplay.
+	bool saveCondition = (_vm->VAR(58) & 0x01) && !(_vm->VAR(94) & 0x10);
+	bool loadCondition = (_vm->VAR(58) & 0x02) && !(_vm->VAR(94) & 0x10);
+
+	Graphics::MacMenu *menu = _windowManager->getMenu();
+	Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
+	Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
+	Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
+
+	loadMenu->enabled = _vm->canLoadGameStateCurrently() && loadCondition;
+	saveMenu->enabled = _vm->canSaveGameStateCurrently() && saveCondition;
+}
+
 bool MacIndy3Gui::handleMenu(int id, Common::String &name) {
 	if (MacGuiImpl::handleMenu(id, name))
 		return true;
diff --git a/engines/scumm/macgui/macgui_indy3.h b/engines/scumm/macgui/macgui_indy3.h
index d32eaae50c5..26cc6548b6d 100644
--- a/engines/scumm/macgui/macgui_indy3.h
+++ b/engines/scumm/macgui/macgui_indy3.h
@@ -78,6 +78,7 @@ public:
 protected:
 	bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
 
+	void updateMenus() override;
 	bool handleMenu(int id, Common::String &name) override;
 
 	void runAboutDialog() override;
diff --git a/engines/scumm/macgui/macgui_loom.cpp b/engines/scumm/macgui/macgui_loom.cpp
index 8efb930ad0a..78a83d5d446 100644
--- a/engines/scumm/macgui/macgui_loom.cpp
+++ b/engines/scumm/macgui/macgui_loom.cpp
@@ -130,6 +130,31 @@ void MacLoomGui::setupCursor(int &width, int &height, int &hotspotX, int &hotspo
 	resource.close();
 }
 
+void MacLoomGui::updateMenus() {
+	bool saveCondition, loadCondition;
+
+	// TODO: Complete LOOM with the rest of the proper code from disasm,
+	// for now we only have the copy protection code and a best guess in place...
+	//
+	// Details:
+	// VAR(221) & 0x4000:           Copy protection bit (the only thing I could confirm from the disasm)
+	// VAR(VAR_VERB_SCRIPT) == 5:   Best guess... it prevents saving/loading from e.g. difficulty selection screen
+	// _userPut > 0:                Best guess... it prevents saving/loading during cutscenes
+
+	saveCondition = loadCondition =
+		!(_vm->VAR(221) & 0x4000) &&
+		(_vm->VAR(_vm->VAR_VERB_SCRIPT) == 5) &&
+		(_vm->_userPut > 0);
+
+	Graphics::MacMenu *menu = _windowManager->getMenu();
+	Graphics::MacMenuItem *gameMenu = menu->getMenuItem(1);
+	Graphics::MacMenuItem *loadMenu = menu->getSubMenuItem(gameMenu, 0);
+	Graphics::MacMenuItem *saveMenu = menu->getSubMenuItem(gameMenu, 1);
+
+	loadMenu->enabled = _vm->canLoadGameStateCurrently() && loadCondition;
+	saveMenu->enabled = _vm->canSaveGameStateCurrently() && saveCondition;
+}
+
 bool MacLoomGui::handleMenu(int id, Common::String &name) {
 	if (MacGuiImpl::handleMenu(id, name))
 		return true;
diff --git a/engines/scumm/macgui/macgui_loom.h b/engines/scumm/macgui/macgui_loom.h
index d5fcb706887..914ae21192c 100644
--- a/engines/scumm/macgui/macgui_loom.h
+++ b/engines/scumm/macgui/macgui_loom.h
@@ -52,6 +52,7 @@ public:
 protected:
 	bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
 
+	void updateMenus() override;
 	bool handleMenu(int id, Common::String &name) override;
 
 	void runAboutDialog() override;
diff --git a/engines/scumm/macgui/macgui_v5.cpp b/engines/scumm/macgui/macgui_v5.cpp
index a22021b44a2..181972d7830 100644
--- a/engines/scumm/macgui/macgui_v5.cpp
+++ b/engines/scumm/macgui/macgui_v5.cpp
@@ -149,6 +149,39 @@ void MacV5Gui::setupCursor(int &width, int &height, int &hotspotX, int &hotspotY
 	resource.close();
 }
 
+void MacV5Gui::updateMenus() {
+	MacGuiImpl::updateMenus();
+
+	Graphics::MacMenu *menu = _windowManager->getMenu();
+	Graphics::MacMenuItem *windowMenu = menu->getMenuItem("Window");
+
+	if (menu->numberOfMenuItems(windowMenu) >= 8)
+		menu->getSubMenuItem(windowMenu, 7)->checked = _vm->_useMacGraphicsSmoothing;
+
+	Graphics::MacMenuItem *speechMenu = menu->getMenuItem("Speech");
+
+	if (speechMenu) {
+		menu->getSubMenuItem(speechMenu, 0)->checked = false; // Voice Only
+		menu->getSubMenuItem(speechMenu, 1)->checked = false; // Text Only
+		menu->getSubMenuItem(speechMenu, 2)->checked = false; // Voice and Text
+
+		switch (_vm->_voiceMode) {
+		case 0: // Voice Only
+			menu->getSubMenuItem(speechMenu, 0)->checked = true;
+			break;
+		case 1: // Voice and Text
+			menu->getSubMenuItem(speechMenu, 2)->checked = true;
+			break;
+		case 2: // Text Only
+			menu->getSubMenuItem(speechMenu, 1)->checked = true;
+			break;
+		default:
+			warning("MacV5Gui::updateMenus(): Invalid voice mode %d", _vm->_voiceMode);
+			break;
+		}
+	}
+}
+
 bool MacV5Gui::handleMenu(int id, Common::String &name) {
 	if (MacGuiImpl::handleMenu(id, name))
 		return true;
diff --git a/engines/scumm/macgui/macgui_v5.h b/engines/scumm/macgui/macgui_v5.h
index 0ea1bcba46b..0d2f2da9269 100644
--- a/engines/scumm/macgui/macgui_v5.h
+++ b/engines/scumm/macgui/macgui_v5.h
@@ -52,6 +52,7 @@ public:
 protected:
 	bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
 
+	void updateMenus() override;
 	bool handleMenu(int id, Common::String &name) override;
 
 	void runAboutDialog() override;
diff --git a/engines/scumm/macgui/macgui_v6.cpp b/engines/scumm/macgui/macgui_v6.cpp
index 46be6e540f3..785eba96f3b 100644
--- a/engines/scumm/macgui/macgui_v6.cpp
+++ b/engines/scumm/macgui/macgui_v6.cpp
@@ -153,6 +153,41 @@ void MacV6Gui::setupCursor(int &width, int &height, int &hotspotX, int &hotspotY
 	hotspotY = 1;
 }
 
+void MacV6Gui::updateMenus() {
+	MacGuiImpl::updateMenus();
+
+	Graphics::MacMenu *menu = _windowManager->getMenu();
+	Graphics::MacMenuItem *videoMenu = menu->getMenuItem(3);
+
+	menu->getSubMenuItem(videoMenu, 2)->checked = true;
+
+	if (_vm->_game.id != GID_MANIAC)
+		menu->getSubMenuItem(videoMenu, 3)->checked = _vm->_useMacGraphicsSmoothing;
+
+	Graphics::MacMenuItem *soundMenu = menu->getMenuItem(4);
+
+	menu->getSubMenuItem(soundMenu, 0)->checked = (_vm->_soundEnabled & 2); // Music
+	menu->getSubMenuItem(soundMenu, 1)->checked = (_vm->_soundEnabled & 1); // Effects
+	menu->getSubMenuItem(soundMenu, 5)->checked = false; // Text Only
+	menu->getSubMenuItem(soundMenu, 6)->checked = false; // Voice Only
+	menu->getSubMenuItem(soundMenu, 7)->checked = false; // Text & Voice
+
+	switch (_vm->_voiceMode) {
+	case 0:	// Voice Only
+		menu->getSubMenuItem(soundMenu, 6)->checked = true;
+		break;
+	case 1: // Voice and Text
+		menu->getSubMenuItem(soundMenu, 7)->checked = true;
+		break;
+	case 2:	// Text Only
+		menu->getSubMenuItem(soundMenu, 5)->checked = true;
+		break;
+	default:
+		warning("MacV6Gui::updateMenus(): Invalid voice mode %d", _vm->_voiceMode);
+		break;
+	}
+}
+
 bool MacV6Gui::handleMenu(int id, Common::String &name) {
 	// Don't call the original method. The menus are too different.
 	// TODO: Separate the common code into its own method?
diff --git a/engines/scumm/macgui/macgui_v6.h b/engines/scumm/macgui/macgui_v6.h
index 0956130b66f..b127f16d92b 100644
--- a/engines/scumm/macgui/macgui_v6.h
+++ b/engines/scumm/macgui/macgui_v6.h
@@ -67,6 +67,7 @@ public:
 protected:
 	bool getFontParams(FontId fontId, int &id, int &size, int &slant) const override;
 
+	void updateMenus() override;
 	bool handleMenu(int id, Common::String &name) override;
 
 	void saveScreen() override;




More information about the Scummvm-git-logs mailing list