[Scummvm-git-logs] scummvm master -> e3888d51f4e5cea2da41868375158c19750b68a1
sev-
sev at scummvm.org
Sun Oct 13 23:48:53 CEST 2019
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:
df93f8a658 GRAPHICS: MACGUI: Process tab symbol in Windows menus
e3888d51f4 GRAPHICS: MACGUI: Fix menu width when there is a submenu
Commit: df93f8a65802b1ecd126a51f9edf58ce813a7f2a
https://github.com/scummvm/scummvm/commit/df93f8a65802b1ecd126a51f9edf58ce813a7f2a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-13T23:48:42+02:00
Commit Message:
GRAPHICS: MACGUI: Process tab symbol in Windows menus
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 87298e2..9594aee 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -257,6 +257,9 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
}
}
}
+
+ menu->processTabs();
+
delete menuData;
if (gDebugLevel > 5)
@@ -556,6 +559,97 @@ const Common::String MacMenu::getAcceleratorString(MacMenuItem *item, const char
return Common::String::format("%s%c%c", prefix, (_wm->_fontMan->hasBuiltInFonts() ? '^' : '\x11'), item->shortcut);
}
+void MacMenu::processTabs() {
+ for (uint i = 0; i < _items.size(); i++)
+ processSubmenuTabs(_items[i]->submenu);
+}
+
+void MacMenu::processSubmenuTabs(MacMenuSubMenu *submenu) {
+ if (submenu == nullptr)
+ return;
+
+ for (uint i = 0; i < submenu->items.size(); i++) {
+ MacMenuSubMenu *menu = submenu->items[i]->submenu;
+
+ if (menu != nullptr)
+ processSubmenuTabs(menu);
+ }
+
+ int maxWidth = 0;
+ bool haveTabs = false;
+
+ Common::U32String tabSymbol("\t");
+
+ // First, we replace \t with one space, and thus, obtain
+ // the widest string
+ for (uint i = 0; i < submenu->items.size(); i++) {
+ MacMenuItem *item = submenu->items[i];
+ if (item->unicodeText.empty())
+ continue;
+
+ int pos = item->unicodeText.find(tabSymbol);
+
+ if (pos == Common::U32String::npos)
+ continue;
+
+ // Sanity check
+ if (pos == 0 || pos >= item->unicodeText.size())
+ error("Malformed menu: tab position");
+
+ if (item->unicodeText.find(tabSymbol, pos + 1) != Common::U32String::npos)
+ error("Malformed menu: extra tab");
+
+ haveTabs = true;
+
+ Common::U32String start(item->unicodeText.c_str(), &item->unicodeText.c_str()[pos]);
+ Common::U32String end(&item->unicodeText.c_str()[pos + 1]);
+ Common::U32String res;
+
+ res = start;
+ res += Common::U32String(" ");
+ res += end;
+
+ int width = _font->getStringWidth(res);
+ if (width > maxWidth) {
+ maxWidth = width;
+ }
+ }
+
+ if (!haveTabs)
+ return;
+
+ // Now expand each tab to the relevant width
+ // And yes, right edge is going to be uneven
+ for (uint i = 0; i < submenu->items.size(); i++) {
+ MacMenuItem *item = submenu->items[i];
+ if (item->unicodeText.empty())
+ continue;
+
+ int pos = item->unicodeText.find(tabSymbol);
+
+ if (pos == Common::U32String::npos)
+ continue;
+
+ Common::U32String start(item->unicodeText.c_str(), &item->unicodeText.c_str()[pos]);
+ Common::U32String end(&item->unicodeText.c_str()[pos + 1]);
+ Common::U32String res;
+ Common::U32String spaces(" ");
+ int width;
+
+ do {
+ res = start;
+ res += spaces;
+ res += end;
+
+ width = _font->getStringWidth(res);
+
+ spaces += spaces[0];
+ } while (width < maxWidth);
+
+ item->unicodeText = res;
+ }
+}
+
int MacMenu::calcSubMenuWidth(MacMenuSubMenu *submenu) {
int maxWidth = 0;
if (submenu == nullptr)
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 49606f1..e7c172c 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -94,6 +94,9 @@ private:
private:
const Font *getMenuFont();
const Common::String getAcceleratorString(MacMenuItem *item, const char *prefix);
+ void processTabs();
+ void processSubmenuTabs(MacMenuSubMenu *submenu);
+
int calcSubMenuWidth(MacMenuSubMenu *menu);
void calcSubMenuBounds(MacMenuSubMenu *menu, int x, int y);
void renderSubmenu(MacMenuSubMenu *menu, bool recursive = true);
Commit: e3888d51f4e5cea2da41868375158c19750b68a1
https://github.com/scummvm/scummvm/commit/e3888d51f4e5cea2da41868375158c19750b68a1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-13T23:48:42+02:00
Commit Message:
GRAPHICS: MACGUI: Fix menu width when there is a submenu
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 9594aee..25db9af 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -580,34 +580,34 @@ void MacMenu::processSubmenuTabs(MacMenuSubMenu *submenu) {
Common::U32String tabSymbol("\t");
- // First, we replace \t with one space, and thus, obtain
+ // First, we replace \t with two spaces, and thus, obtain
// the widest string
for (uint i = 0; i < submenu->items.size(); i++) {
MacMenuItem *item = submenu->items[i];
if (item->unicodeText.empty())
continue;
- int pos = item->unicodeText.find(tabSymbol);
+ Common::U32String res(item->unicodeText);
- if (pos == Common::U32String::npos)
- continue;
+ int pos = item->unicodeText.find(tabSymbol);
- // Sanity check
- if (pos == 0 || pos >= item->unicodeText.size())
- error("Malformed menu: tab position");
+ if (pos != Common::U32String::npos) {
+ // Sanity check
+ if (pos == 0 || pos >= item->unicodeText.size())
+ error("Malformed menu: tab position");
- if (item->unicodeText.find(tabSymbol, pos + 1) != Common::U32String::npos)
- error("Malformed menu: extra tab");
+ if (item->unicodeText.find(tabSymbol, pos + 1) != Common::U32String::npos)
+ error("Malformed menu: extra tab");
- haveTabs = true;
+ haveTabs = true;
- Common::U32String start(item->unicodeText.c_str(), &item->unicodeText.c_str()[pos]);
- Common::U32String end(&item->unicodeText.c_str()[pos + 1]);
- Common::U32String res;
+ Common::U32String start(item->unicodeText.c_str(), &item->unicodeText.c_str()[pos]);
+ Common::U32String end(&item->unicodeText.c_str()[pos + 1]);
- res = start;
- res += Common::U32String(" ");
- res += end;
+ res = start;
+ res += Common::U32String(" ");
+ res += end;
+ }
int width = _font->getStringWidth(res);
if (width > maxWidth) {
@@ -672,8 +672,12 @@ int MacMenu::calcSubMenuWidth(MacMenuSubMenu *submenu) {
maxWidth = width;
}
} else if (!item->unicodeText.empty()) {
- // add accelerator
- int width = _font->getStringWidth(item->unicodeText);
+ Common::U32String text(item->unicodeText);
+
+ if (item->submenu != nullptr) // If we're drawing triangle
+ text += Common::U32String(" ");
+
+ int width = _font->getStringWidth(text);
if (width > maxWidth) {
maxWidth = width;
}
More information about the Scummvm-git-logs
mailing list