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

bluegr noreply at scummvm.org
Wed Jan 8 18:00:50 UTC 2025


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

Summary:
796719cd05 GRAPHICS: MACGUI: Allow menus in the menu bar to be drawn disabled
67da94f031 GRAPHICS: MACGUI: Disable keyboard shortcuts for disabled menus
f489b45282 GRAPHICS: MACGUI: Draw submenu arrow correctly on disabled menu items
c64c763fd2 GRAPHICS: MACGUI: Don't expand disabled submenus


Commit: 796719cd05500f650d795976f2391db880ce1498
    https://github.com/scummvm/scummvm/commit/796719cd05500f650d795976f2391db880ce1498
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-08T20:00:45+02:00

Commit Message:
GRAPHICS: MACGUI: Allow menus in the menu bar to be drawn disabled

Disabled menus can still be opened. Menu items in disabled menus will
look and act as if they were individually disabled. Enabling the menu
will restore it to its pre-disabled state.

Changed paths:
    graphics/macgui/macmenu.cpp


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 8fe534f8578..e1948b34c63 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -970,7 +970,6 @@ template <typename T>
 static void drawMenuPattern(ManagedSurface &srcSurf, ManagedSurface &destSurf, const byte *pattern, int x, int y, int width, uint32 colorKey) {
 	// I am lazy to extend drawString() with plotProc as a parameter, so
 	// fake it here
-
 	for (int ii = 0; ii < srcSurf.h; ii++) {
 		const T *src = (const T *)srcSurf.getBasePtr(0, ii);
 		T *dst = (T *)destSurf.getBasePtr(x, y + ii);
@@ -1066,16 +1065,33 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
 		int x = _align == kTextAlignRight ? -kMenuLeftMargin : kMenuLeftMargin;
 		x += it->bbox.left;
 
+		ManagedSurface *s = &_screen;
+		int tx = x, ty = y;
+
+		if (!it->enabled) {
+			s = &_tempSurface;
+			tx = 0;
+			ty = 0;
+			_tempSurface.clear(_wm->_colorGreen);
+		}
+
 		if (it->unicode) {
 			int accOff = _align == kTextAlignRight ? it->bbox.width() - _font->getStringWidth(it->unicodeText) : 0;
 			Common::UnicodeBiDiText utxt(it->unicodeText);
 
-			_font->drawString(&_screen, utxt.visual, x, y, it->bbox.width(), color, _align, 0, true);
-			underlineAccelerator(&_screen, _font, utxt, x + accOff, y, it->shortcutPos, color);
+			_font->drawString(s, utxt.visual, tx, ty, it->bbox.width(), color, _align, 0, true);
+			underlineAccelerator(s, _font, utxt, tx + accOff, ty, it->shortcutPos, color);
 		} else {
 			const Font *font = getMenuFont(it->style);
+			font->drawString(s, it->text, tx, ty, it->bbox.width(), color, Graphics::kTextAlignLeft, 0, true);
+		}
 
-			font->drawString(&_screen, it->text, x, y, it->bbox.width(), color, Graphics::kTextAlignLeft, 0, true);
+		if (!it->enabled) {
+			if (_wm->_pixelformat.bytesPerPixel == 1) {
+				drawMenuPattern<byte>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, it->bbox.width(), _wm->_colorGreen);
+			} else {
+				drawMenuPattern<uint32>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, it->bbox.width(), _wm->_colorGreen);
+			}
 		}
 	}
 
@@ -1102,6 +1118,8 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
 	if (r->width() == 0 || r->height() == 0)
 		return;
 
+	bool menuEnabled = _items[_activeItem]->enabled;
+
 	_screen.fillRect(*r, _wm->_colorWhite);
 	_screen.frameRect(*r, _wm->_colorBlack);
 	_screen.vLine(r->right, r->top + 3, r->bottom + 1, _wm->_colorBlack);
@@ -1152,7 +1170,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
 		}
 
 		int color = _wm->_colorBlack;
-		if (i == menu->highlight && (!text.empty() || !unicodeText.empty()) && menu->items[i]->enabled) {
+		if (i == menu->highlight && (!text.empty() || !unicodeText.empty()) && menuEnabled && menu->items[i]->enabled) {
 			color = _wm->_colorWhite;
 			Common::Rect trect(r->left, y - (_wm->_fontMan->hasBuiltInFonts() ? 1 : 0), r->right, y + _font->getFontHeight());
 
@@ -1163,7 +1181,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
 			ManagedSurface *s = &_screen;
 			int tx = x, ty = y;
 
-			if (!menu->items[i]->enabled) {
+			if (!menuEnabled || !menu->items[i]->enabled) {
 				s = &_tempSurface;
 				tx = 0;
 				ty = 0;
@@ -1199,7 +1217,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
 			if (menu->items[i]->submenu != nullptr)
 				drawSubMenuArrow(s, arrowX, ty, color);
 
-			if (!menu->items[i]->enabled) {
+			if (!menuEnabled || !menu->items[i]->enabled) {
 				if (_wm->_pixelformat.bytesPerPixel == 1) {
 					drawMenuPattern<byte>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, r->width(), _wm->_colorGreen);
 				} else {
@@ -1551,7 +1569,7 @@ bool MacMenu::mouseRelease(int x, int y) {
 		return false;
 
 	bool haveCallBack = false;
-	if (_activeItem != -1 && _activeSubItem != -1 && _menustack.back()->items[_activeSubItem]->enabled) {
+	if (_activeItem != -1 && _activeSubItem != -1 && _items[_activeItem]->enabled && _menustack.back()->items[_activeSubItem]->enabled) {
 		// no action if item has submenu
 		if (_menustack.back()->items[_activeSubItem]->submenu) {
 			return false;


Commit: 67da94f03168d906bd84fa55a64f452e73b14360
    https://github.com/scummvm/scummvm/commit/67da94f03168d906bd84fa55a64f452e73b14360
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-08T20:00:45+02:00

Commit Message:
GRAPHICS: MACGUI: Disable keyboard shortcuts for disabled menus

Changed paths:
    graphics/macgui/macmenu.cpp


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index e1948b34c63..815590f0581 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -1603,7 +1603,7 @@ bool MacMenu::processMenuShortCut(uint16 ascii) {
 	ascii = tolower(ascii);
 
 	for (uint i = 0; i < _items.size(); i++) {
-		if (_items[i]->submenu != nullptr) {
+		if (_items[i]->enabled && _items[i]->submenu != nullptr) {
 			for (uint j = 0; j < _items[i]->submenu->items.size(); j++) {
 				if (_items[i]->submenu->items[j]->enabled && tolower(_items[i]->submenu->items[j]->shortcut) == ascii) {
 					if (_items[i]->submenu->items[j]->unicode) {


Commit: f489b4528213c592ac06b701ef68650deea80814
    https://github.com/scummvm/scummvm/commit/f489b4528213c592ac06b701ef68650deea80814
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-08T20:00:45+02:00

Commit Message:
GRAPHICS: MACGUI: Draw submenu arrow correctly on disabled menu items

Changed paths:
    graphics/macgui/macmenu.cpp


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 815590f0581..c3fcd3b1d95 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -1186,6 +1186,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
 				tx = 0;
 				ty = 0;
 				accelX -= x;
+				arrowX -= x;
 
 				_tempSurface.clear(_wm->_colorGreen);
 			}


Commit: c64c763fd2f144a71b3ee0759da5635862434f72
    https://github.com/scummvm/scummvm/commit/c64c763fd2f144a71b3ee0759da5635862434f72
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-01-08T20:00:45+02:00

Commit Message:
GRAPHICS: MACGUI: Don't expand disabled submenus

Changed paths:
    graphics/macgui/macmenu.cpp


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index c3fcd3b1d95..e69d4b7a630 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -1237,7 +1237,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
 		y += _menuDropdownItemHeight;
 	}
 
-	if (recursive && menu->highlight != -1 && menu->items[menu->highlight]->submenu != nullptr)
+	if (recursive && menu->highlight != -1 && _items[_activeItem]->enabled && menu->items[menu->highlight]->enabled && menu->items[menu->highlight]->submenu != nullptr)
 		renderSubmenu(menu->items[menu->highlight]->submenu, false);
 
 	if (_wm->_mode & kWMModalMenuMode) {
@@ -1337,7 +1337,7 @@ static void scrollCallback(void *data) {
 }
 
 bool MacMenu::mouseClick(int x, int y) {
-	if (!_isModal &&_bbox.contains(x, y)) {
+	if (!_isModal && _bbox.contains(x, y)) {
 		for (uint i = 0; i < _items.size(); i++) {
 			if (_items[i]->bbox.contains(x, y)) {
 				if ((uint)_activeItem == i)
@@ -1383,7 +1383,7 @@ bool MacMenu::mouseClick(int x, int y) {
 
 		if (numSubItem != _activeSubItem) {
 			if (_wm->_mode & kWMModalMenuMode) {
-				if (_activeSubItem == -1 || menu->items[_activeSubItem]->submenu != nullptr)
+				if (_activeSubItem == -1 || (_items[_activeItem]->enabled && menu->items[_activeSubItem]->enabled && menu->items[_activeSubItem]->submenu != nullptr))
 					g_system->copyRectToScreen(_wm->_screenCopy->getPixels(), _wm->_screenCopy->pitch, 0, 0, _wm->_screenCopy->w, _wm->_screenCopy->h);
 			}
 
@@ -1435,9 +1435,11 @@ bool MacMenu::mouseClick(int x, int y) {
 		}
 	}
 
-	if (_activeSubItem != -1 && _menustack.back()->items[_activeSubItem]->submenu != nullptr) {
-		if (_menustack.back()->items[_activeSubItem]->submenu->bbox.contains(x, y)) {
-			_menustack.push_back(_menustack.back()->items[_activeSubItem]->submenu);
+	if (_activeSubItem != -1 && _items[_activeItem]->enabled) {
+		Graphics::MacMenuItem *subitem = _menustack.back()->items[_activeSubItem];
+
+		if (subitem->submenu != nullptr && subitem->enabled && subitem->submenu->bbox.contains(x, y)) {
+			_menustack.push_back(subitem->submenu);
 
 			_activeSubItem = 0;
 			_contentIsDirty = true;




More information about the Scummvm-git-logs mailing list