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

sev- sev at scummvm.org
Wed Oct 2 01:10:20 CEST 2019


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:
ff32309261 GRAPHICS: MACGUI: Change notion of bbox computation to submenus
bd7aa647de GRAPHICS: MACGUI: Take submenu arrow indicator width into account
cf6e509cc9 GRAPHICS: MACGUI: Render submenus recursively


Commit: ff323092619e97157d3826a7f3c821f45b67635f
    https://github.com/scummvm/scummvm/commit/ff323092619e97157d3826a7f3c821f45b67635f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-02T00:31:48+02:00

Commit Message:
GRAPHICS: MACGUI: Change notion of bbox computation to submenus

Changed paths:
    graphics/macgui/macmenu.cpp
    graphics/macgui/macmenu.h


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index d31ee69..09ccd31 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -309,7 +309,7 @@ void MacMenu::addMenuSubItem(int id, const Common::String &text, int action, int
 
 	_items[id]->submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
 
-	calcSubMenuBounds(_items[id]);
+	calcSubMenuBounds(_items[id]->submenu, _items[id]->bbox.left - 1, _items[id]->bbox.bottom + 1);
 }
 
 void MacMenu::addMenuSubItem(int id, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
@@ -318,7 +318,7 @@ void MacMenu::addMenuSubItem(int id, const Common::U32String &text, int action,
 
 	_items[id]->submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
 
-	calcSubMenuBounds(_items[id]);
+	calcSubMenuBounds(_items[id]->submenu, _items[id]->bbox.left - 1, _items[id]->bbox.bottom + 1);
 }
 
 void MacMenu::calcDimensions() {
@@ -336,7 +336,7 @@ void MacMenu::calcDimensions() {
 			_items[i]->bbox.bottom = y + _font->getFontHeight() + (_wm->_fontMan->hasBuiltInFonts() ? 3 : 2);
 		}
 
-		calcSubMenuBounds(_items[i]);
+		calcSubMenuBounds(_items[i]->submenu, _items[i]->bbox.left - 1, _items[i]->bbox.bottom + 1);
 
 		x += w + kMenuSpacing;
 	}
@@ -470,7 +470,7 @@ void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
 		item.clear();
 	}
 
-	calcSubMenuBounds(menu);
+	calcSubMenuBounds(menu->submenu, menu->bbox.left - 1, menu->bbox.bottom + 1);
 }
 
 const Font *MacMenu::getMenuFont() {
@@ -484,13 +484,13 @@ const Common::String MacMenu::getAcceleratorString(MacMenuSubItem *item, const c
 	return Common::String::format("%s%c%c", prefix, (_wm->_fontMan->hasBuiltInFonts() ? '^' : '\x11'), item->shortcut);
 }
 
-int MacMenu::calculateMenuWidth(MacMenuItem *menu) {
+int MacMenu::calcSubMenuWidth(MacMenuSubMenu *submenu) {
 	int maxWidth = 0;
-	if (menu->submenu == nullptr)
+	if (submenu == nullptr)
 		return maxWidth;
 
-	for (uint i = 0; i < menu->submenu->subitems.size(); i++) {
-		MacMenuSubItem *item = menu->submenu->subitems[i];
+	for (uint i = 0; i < submenu->subitems.size(); i++) {
+		MacMenuSubItem *item = submenu->subitems[i];
 		if (!item->text.empty()) {
 			Common::String text(item->text);
 			Common::String acceleratorText(getAcceleratorString(item, "  "));
@@ -513,21 +513,21 @@ int MacMenu::calculateMenuWidth(MacMenuItem *menu) {
 	return maxWidth;
 }
 
-void MacMenu::calcSubMenuBounds(MacMenuItem *menu) {
-	if (menu->submenu == nullptr)
+void MacMenu::calcSubMenuBounds(MacMenuSubMenu *submenu, int x, int y) {
+	if (submenu == nullptr)
 		return;
 
 	// TODO: cache maxWidth
-	int maxWidth = calculateMenuWidth(menu);
-	int x1 = menu->bbox.left - 1;
-	int y1 = menu->bbox.bottom + 1;
+	int maxWidth = calcSubMenuWidth(submenu);
+	int x1 = x;
+	int y1 = y;
 	int x2 = x1 + maxWidth + kMenuDropdownPadding * 2 - 4;
-	int y2 = y1 + menu->submenu->subitems.size() * kMenuDropdownItemHeight + 2;
+	int y2 = y1 + submenu->subitems.size() * kMenuDropdownItemHeight + 2;
 
-	menu->submenu->bbox.left = x1;
-	menu->submenu->bbox.top = y1;
-	menu->submenu->bbox.right = x2;
-	menu->submenu->bbox.bottom = y2;
+	submenu->bbox.left = x1;
+	submenu->bbox.top = y1;
+	submenu->bbox.right = x2;
+	submenu->bbox.bottom = y2;
 }
 
 static void drawPixelPlain(int x, int y, int color, void *data) {
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 8d89889..ad02b23 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -91,8 +91,8 @@ private:
 private:
 	const Font *getMenuFont();
 	const Common::String getAcceleratorString(MacMenuSubItem *item, const char *prefix);
-	int calculateMenuWidth(MacMenuItem *menu);
-	void calcSubMenuBounds(MacMenuItem *menu);
+	int calcSubMenuWidth(MacMenuSubMenu *menu);
+	void calcSubMenuBounds(MacMenuSubMenu *menu, int x, int y);
 	void renderSubmenu(MacMenuSubMenu *menu);
 
 	bool keyEvent(Common::Event &event);


Commit: bd7aa647de713df4a77ac02662bda7e40e03006f
    https://github.com/scummvm/scummvm/commit/bd7aa647de713df4a77ac02662bda7e40e03006f
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-02T00:33:34+02:00

Commit Message:
GRAPHICS: MACGUI: Take submenu arrow indicator width into account

Changed paths:
    graphics/macgui/macmenu.cpp


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 09ccd31..d06aa57 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -498,6 +498,9 @@ int MacMenu::calcSubMenuWidth(MacMenuSubMenu *submenu) {
 				text += acceleratorText;
 			}
 
+			if (item->submenu != nullptr) // If we're drawing triangle
+				text += "  ";
+
 			int width = _font->getStringWidth(text);
 			if (width > maxWidth) {
 				maxWidth = width;


Commit: cf6e509cc9d737edb0ac6b43fae714459e50ab4c
    https://github.com/scummvm/scummvm/commit/cf6e509cc9d737edb0ac6b43fae714459e50ab4c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-02T01:09:49+02:00

Commit Message:
GRAPHICS: MACGUI: Render submenus recursively

Changed paths:
    graphics/macgui/macmenu.cpp
    graphics/macgui/macmenu.h


diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index d06aa57..522144f 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -684,6 +684,9 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu) {
 		y += kMenuDropdownItemHeight;
 	}
 
+	if (menu->subitems[_activeSubItem]->submenu != nullptr)
+		renderSubmenu(menu->subitems[_activeSubItem]->submenu);
+
 	_contentIsDirty = true;
 	//g_system->copyRectToScreen(_screen.getBasePtr(r->left, r->top), _screen.pitch, r->left, r->top, r->width() + 2, r->height() + 2);
 }
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index ad02b23..2ff2bf0 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -112,6 +112,7 @@ private:
 	bool _isVisible;
 
 	int _activeItem;
+	Common::Array<int> _menustack;
 	int _activeSubItem;
 
 	void (*_ccallback)(int action, Common::String &text, void *data);





More information about the Scummvm-git-logs mailing list