[Scummvm-git-logs] scummvm master -> 35773e76b9835bcd07416c0ffc5d494cb8afe0ee
sev-
sev at scummvm.org
Fri Oct 4 15:55:09 CEST 2019
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:
72a5d9d4ba JANITORIAL: Whitespace fixes
dbf56a3b29 COMMON: Add methods to U32String to match String
48b261cf6b GRAPHICS: MACGUI: Implement Windows-style shortcut underlining
35773e76b9 GRAPHICS: MACGUI: Unify MacMenuItem and MacMenuSubItem
Commit: 72a5d9d4baa569c4f3904fd8180a07da937090ed
https://github.com/scummvm/scummvm/commit/72a5d9d4baa569c4f3904fd8180a07da937090ed
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-04T15:54:48+02:00
Commit Message:
JANITORIAL: Whitespace fixes
Changed paths:
common/ustr.cpp
diff --git a/common/ustr.cpp b/common/ustr.cpp
index f3d1b7b..c53c428 100644
--- a/common/ustr.cpp
+++ b/common/ustr.cpp
@@ -500,7 +500,7 @@ String convertUtf32ToUtf8(const U32String &u32str) {
bytesToWrite = 3;
ch = 0x0000FFFD;
}
-
+
Common::String buffer;
switch (bytesToWrite) {
@@ -593,15 +593,15 @@ static const uint32 g_windows1253ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x
0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x00FF};
-static const uint32 g_windows1254ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x008E, 0x008F,
- 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x009E, 0x0178,
- 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
+static const uint32 g_windows1254ConversionTable[] = {0x20AC, 0x0081, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
+ 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
+ 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x009D, 0x009E, 0x0178,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7,
0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
- 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
@@ -726,7 +726,7 @@ String convertFromU32String(const U32String &string, CodePage page) {
charsetString += string[i];
continue;
}
-
+
if (!conversionTable) {
continue;
}
@@ -737,7 +737,7 @@ String convertFromU32String(const U32String &string, CodePage page) {
break;
}
}
- }
+ }
return charsetString;
}
Commit: dbf56a3b2954330813a47ff86dae17831f9980a6
https://github.com/scummvm/scummvm/commit/dbf56a3b2954330813a47ff86dae17831f9980a6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-04T15:54:48+02:00
Commit Message:
COMMON: Add methods to U32String to match String
Changed paths:
common/ustr.cpp
common/ustr.h
diff --git a/common/ustr.cpp b/common/ustr.cpp
index c53c428..3a78239 100644
--- a/common/ustr.cpp
+++ b/common/ustr.cpp
@@ -232,6 +232,30 @@ void U32String::deleteChar(uint32 p) {
_size--;
}
+void U32String::deleteLastChar() {
+ if (_size > 0)
+ deleteChar(_size - 1);
+}
+
+void U32String::erase(uint32 p, uint32 len) {
+ assert(p < _size);
+
+ makeUnique();
+ // If len == npos or p + len is over the end, remove all the way to the end
+ if (len == npos || p + len >= _size) {
+ // Delete char at p as well. So _size = (p - 1) + 1
+ _size = p;
+ // Null terminate
+ _str[_size] = 0;
+ return;
+ }
+
+ for ( ; p + len <= _size; p++) {
+ _str[p] = _str[p + len];
+ }
+ _size -= len;
+}
+
void U32String::clear() {
decRefCount(_extern._refCount);
diff --git a/common/ustr.h b/common/ustr.h
index 5205216..431cd96 100644
--- a/common/ustr.h
+++ b/common/ustr.h
@@ -162,6 +162,12 @@ public:
*/
void deleteChar(uint32 p);
+ /** Remove the last character from the string. */
+ void deleteLastChar();
+
+ /** Remove all characters from position p to the p + len. If len = String::npos, removes all characters to the end */
+ void erase(uint32 p, uint32 len = npos);
+
/** Clears the string, making it empty. */
void clear();
Commit: 48b261cf6b3714ed5e9f224149272e2808e00f09
https://github.com/scummvm/scummvm/commit/48b261cf6b3714ed5e9f224149272e2808e00f09
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-04T15:54:48+02:00
Commit Message:
GRAPHICS: MACGUI: Implement Windows-style shortcut underlining
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index d8b5a43..a20f320 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -78,15 +78,18 @@ struct MacMenuSubItem {
int action;
int style;
char shortcut;
+ int shortcutPos;
bool enabled;
Common::Rect bbox;
MacMenuSubMenu *submenu;
- MacMenuSubItem(const Common::String &t, int a, int s = 0, char sh = 0, bool e = true) :
- text(t), unicode(false), action(a), style(s), shortcut(sh), enabled(e), submenu(nullptr) {}
- MacMenuSubItem(const Common::U32String &t, int a, int s = 0, char sh = 0, bool e = true) :
- unicodeText(t), unicode(true), action(a), style(s), shortcut(sh), enabled(e), submenu(nullptr) {}
+ MacMenuSubItem(const Common::String &t, int a, int s = 0, char sh = 0, int sp = -1, bool e = true) :
+ text(t), unicode(false), action(a), style(s), shortcut(sh),
+ shortcutPos(sp), enabled(e), submenu(nullptr) {}
+ MacMenuSubItem(const Common::U32String &t, int a, int s = 0, char sh = 0, int sp = -1, bool e = true) :
+ unicodeText(t), unicode(true), action(a), style(s), shortcut(sh),
+ shortcutPos(sp), enabled(e), submenu(nullptr) {}
~MacMenuSubItem();
};
@@ -118,9 +121,10 @@ struct MacMenuItem {
bool unicode;
MacMenuSubMenu *submenu;
Common::Rect bbox;
+ int shortcutPos;
- MacMenuItem(const Common::String &n) : name(n), unicode(false), submenu(nullptr) {}
- MacMenuItem(const Common::U32String &n) : unicodeName(n), unicode(true), submenu(nullptr) {}
+ MacMenuItem(const Common::String &n, int sp = -1) : name(n), shortcutPos(sp), unicode(false), submenu(nullptr) {}
+ MacMenuItem(const Common::U32String &n, int sp = -1) : unicodeName(n), shortcutPos(sp), unicode(true), submenu(nullptr) {}
~MacMenuItem() {
if (submenu)
@@ -339,16 +343,18 @@ int MacMenu::addMenuItem(const Common::String &name) {
int MacMenu::addMenuItem(const Common::U32String &name) {
Common::U32String amp("&");
Common::U32String res;
+ int shortcutPos = -1;
for (uint i = 0; i < name.size(); i++)
if (name[i] == amp[0]) {
//shortcut = amp[0] & 0xff;
+ shortcutPos = i;
} else {
res += name[i];
}
- MacMenuItem *i = new MacMenuItem(res);
+ MacMenuItem *i = new MacMenuItem(res, shortcutPos);
_items.push_back(i);
_dimensionsDirty = true;
@@ -372,7 +378,7 @@ void MacMenu::addMenuSubItem(int id, const Common::String &text, int action, int
if (_items[id]->submenu == nullptr)
_items[id]->submenu = new MacMenuSubMenu();
- _items[id]->submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
+ _items[id]->submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, -1, enabled));
}
void MacMenu::addMenuSubItem(int id, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
@@ -383,15 +389,17 @@ void MacMenu::addMenuSubItem(int id, const Common::U32String &text, int action,
Common::U32String amp("&");
Common::U32String res;
+ int shortcutPos = -1;
for (uint i = 0; i < text.size(); i++)
if (text[i] == amp[0]) {
- shortcut = amp[0] & 0xff;
+ shortcut = text[i + 1] & 0xff;
+ shortcutPos = i;
} else {
res += text[i];
}
- _items[id]->submenu->subitems.push_back(new MacMenuSubItem(res, action, style, shortcut, enabled));
+ _items[id]->submenu->subitems.push_back(new MacMenuSubItem(res, action, style, shortcut, shortcutPos, enabled));
}
void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action, int style, char shortcut, bool enabled) {
@@ -399,7 +407,7 @@ void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::String &text
_dimensionsDirty = true;
- submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
+ submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, -1, enabled));
}
void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
@@ -409,15 +417,17 @@ void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &t
Common::U32String amp("&");
Common::U32String res;
+ int shortcutPos = -1;
for (uint i = 0; i < text.size(); i++)
if (text[i] == amp[0]) {
- shortcut = amp[0] & 0xff;
+ shortcut = text[i + 1] & 0xff;
+ shortcutPos = i;
} else {
res += text[i];
}
- submenu->subitems.push_back(new MacMenuSubItem(res, action, style, shortcut, enabled));
+ submenu->subitems.push_back(new MacMenuSubItem(res, action, style, shortcut, shortcutPos, enabled));
}
void MacMenu::calcDimensions() {
@@ -646,6 +656,20 @@ static void drawFilledRoundRect(ManagedSurface *surface, Common::Rect &rect, int
drawRoundRect(rect, arc, color, true, drawPixelPlain, surface);
}
+static void underlineAccelerator(ManagedSurface *dst, const Font *font, const Common::U32String &str, int x, int y, int shortcutPos, uint32 color) {
+ if (shortcutPos == -1)
+ return;
+
+ Common::U32String s(str);
+
+ s.erase(shortcutPos + 1);
+ int pos2 = font->getStringWidth(s);
+ s.deleteLastChar();
+ int pos1 = font->getStringWidth(s);
+
+ dst->hLine(x + pos1, y + font->getFontHeight(), x + pos2 - 1, color);
+}
+
bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
Common::Rect r(_bbox);
@@ -686,12 +710,14 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
color = _wm->_colorWhite;
}
+ int x = it->bbox.left + kMenuLeftMargin;
+ int y = it->bbox.top + (_wm->_fontMan->hasBuiltInFonts() ? 2 : 1);
+
if (it->unicode) {
- _font->drawString(&_screen, it->unicodeName, it->bbox.left + kMenuLeftMargin,
- it->bbox.top + (_wm->_fontMan->hasBuiltInFonts() ? 2 : 1), it->bbox.width(), color);
+ _font->drawString(&_screen, it->unicodeName, x, y, it->bbox.width(), color);
+ underlineAccelerator(&_screen, _font, it->unicodeName, x, y, it->shortcutPos, color);
} else {
- _font->drawString(&_screen, it->name, it->bbox.left + kMenuLeftMargin,
- it->bbox.top + (_wm->_fontMan->hasBuiltInFonts() ? 2 : 1), it->bbox.width(), color);
+ _font->drawString(&_screen, it->name, x, y, it->bbox.width(), color);
}
}
@@ -726,7 +752,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
Common::String acceleratorText(getAcceleratorString(menu->subitems[i], ""));
Common::U32String unicodeText(menu->subitems[i]->unicodeText);
- // add unicode accelerator
+ int shortcutPos = menu->subitems[i]->shortcutPos;
int accelX = r->right - 25;
int arrowX = r->right - 14;
@@ -752,12 +778,14 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
_tempSurface.clear(kColorGreen);
}
- if (menu->subitems[i]->unicode)
+ if (menu->subitems[i]->unicode) {
_font->drawString(s, unicodeText, tx, ty, r->width(), color);
- else
+ underlineAccelerator(s, _font, unicodeText, tx, ty, shortcutPos, color);
+ } else {
_font->drawString(s, text, tx, ty, r->width(), color);
+ }
- if (!acceleratorText.empty())
+ if (!acceleratorText.empty() && shortcutPos == -1)
_font->drawString(s, acceleratorText, accelX, ty, r->width(), color);
if (menu->subitems[i]->submenu != nullptr)
Commit: 35773e76b9835bcd07416c0ffc5d494cb8afe0ee
https://github.com/scummvm/scummvm/commit/35773e76b9835bcd07416c0ffc5d494cb8afe0ee
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-04T15:54:48+02:00
Commit Message:
GRAPHICS: MACGUI: Unify MacMenuItem and MacMenuSubItem
Changed paths:
engines/macventure/gui.cpp
engines/wage/gui.cpp
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
diff --git a/engines/macventure/gui.cpp b/engines/macventure/gui.cpp
index cc1de7c..d7b6405 100644
--- a/engines/macventure/gui.cpp
+++ b/engines/macventure/gui.cpp
@@ -410,7 +410,7 @@ bool Gui::loadMenus() {
if ((resArray = _resourceManager->getResIDArray(MKTAG('M', 'E', 'N', 'U'))).size() == 0)
return false;
- _menu->addMenuSubItem(0, "Abb", kMenuActionAbout, 0, 'A', true);
+ _menu->addMenuItem(nullptr, "Abb", kMenuActionAbout, 0, 'A', true);
int i = 1;
for (iter = resArray.begin(); iter != resArray.end(); ++iter) {
@@ -430,7 +430,8 @@ bool Gui::loadMenus() {
title[titleLength] = '\0';
if (titleLength > 1) {
- _menu->addMenuItem(title);
+ _menu->addMenuItem(nullptr, title);
+ Graphics::MacMenuSubMenu *submenu = _menu->addSubMenu(nullptr);
// Read submenu items
while ((titleLength = res->readByte())) {
@@ -445,7 +446,7 @@ bool Gui::loadMenus() {
res->readUint16BE();
// Read style
style = res->readUint16BE();
- _menu->addMenuSubItem(i, title, 0, style, key, false);
+ _menu->addMenuItem(submenu, title, 0, style, key, false);
}
}
diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp
index 9538da1..99dcfca 100644
--- a/engines/wage/gui.cpp
+++ b/engines/wage/gui.cpp
@@ -100,13 +100,14 @@ Gui::Gui(WageEngine *engine) {
_menu->setCommandsCallback(menuCommandsCallback, this);
_menu->addStaticMenus(menuSubItems);
- _menu->addMenuSubItem(kMenuAbout, _engine->_world->getAboutMenuItemName(), kMenuActionAbout);
+ _menu->addSubMenu(nullptr, kMenuAbout);
+ _menu->addMenuItem(_menu->getSubmenu(nullptr, kMenuAbout), _engine->_world->getAboutMenuItemName(), kMenuActionAbout);
- _commandsMenuId = _menu->addMenuItem(_engine->_world->_commandsMenuName);
+ _commandsMenuId = _menu->addMenuItem(nullptr, _engine->_world->_commandsMenuName);
regenCommandsMenu();
if (!_engine->_world->_weaponMenuDisabled) {
- _weaponsMenuId = _menu->addMenuItem(_engine->_world->_weaponsMenuName);
+ _weaponsMenuId = _menu->addMenuItem(nullptr, _engine->_world->_weaponsMenuName);
regenWeaponsMenu();
} else {
@@ -221,6 +222,10 @@ void Gui::regenWeaponsMenu() {
bool empty = true;
+ Graphics::MacMenuSubMenu *submenu = _menu->getSubmenu(nullptr, _weaponsMenuId);
+ if (submenu == nullptr)
+ submenu = _menu->addSubMenu(nullptr, _weaponsMenuId);
+
for (uint i = 0; i < weapons->size(); i++) {
Obj *obj = (*weapons)[i];
if (obj->_type == Obj::REGULAR_WEAPON ||
@@ -230,7 +235,7 @@ void Gui::regenWeaponsMenu() {
command += " ";
command += obj->_name;
- _menu->addMenuSubItem(_weaponsMenuId, command, kMenuActionCommand, 0, 0, true);
+ _menu->addMenuItem(submenu, command, kMenuActionCommand, 0, 0, true);
empty = false;
}
@@ -238,7 +243,7 @@ void Gui::regenWeaponsMenu() {
delete weapons;
if (empty)
- _menu->addMenuSubItem(_weaponsMenuId, "You have no weapons", 0, 0, 0, false);
+ _menu->addMenuItem(submenu, "You have no weapons", 0, 0, 0, false);
}
bool Gui::processEvent(Common::Event &event) {
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index a20f320..51ab94f 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -69,9 +69,19 @@ enum {
struct MacMenuSubMenu;
-typedef Common::Array<MacMenuSubItem *> SubItemArray;
+struct MacMenuSubMenu {
+ ItemArray items;
+ Common::Rect bbox;
+ int highlight;
+
+ MacMenuSubMenu() : highlight(-1) {}
+
+ ~MacMenuSubMenu();
-struct MacMenuSubItem {
+ int ytoItem(int y) { return MIN<int>((y - bbox.top) / kMenuDropdownItemHeight, items.size() - 1); }
+};
+
+struct MacMenuItem {
Common::String text;
Common::U32String unicodeText;
bool unicode;
@@ -84,54 +94,24 @@ struct MacMenuSubItem {
MacMenuSubMenu *submenu;
- MacMenuSubItem(const Common::String &t, int a, int s = 0, char sh = 0, int sp = -1, bool e = true) :
+ MacMenuItem(const Common::String &t, int a = -1, int s = 0, char sh = 0, int sp = -1, bool e = true) :
text(t), unicode(false), action(a), style(s), shortcut(sh),
shortcutPos(sp), enabled(e), submenu(nullptr) {}
- MacMenuSubItem(const Common::U32String &t, int a, int s = 0, char sh = 0, int sp = -1, bool e = true) :
+ MacMenuItem(const Common::U32String &t, int a = -1, int s = 0, char sh = 0, int sp = -1, bool e = true) :
unicodeText(t), unicode(true), action(a), style(s), shortcut(sh),
shortcutPos(sp), enabled(e), submenu(nullptr) {}
- ~MacMenuSubItem();
-};
-
-struct MacMenuSubMenu {
- SubItemArray subitems;
- Common::Rect bbox;
- int highlight;
-
- MacMenuSubMenu() : highlight(-1) {}
-
- ~MacMenuSubMenu() {
- for (uint i = 0; i < subitems.size(); i++)
- delete subitems[i];
- }
-
- int ytoItem(int y) { return MIN<int>((y - bbox.top) / kMenuDropdownItemHeight, subitems.size() - 1); }
-};
-
-MacMenuSubItem::~MacMenuSubItem() {
- if (submenu)
- delete submenu;
-}
-
-
-struct MacMenuItem {
- Common::String name;
- Common::U32String unicodeName;
- bool unicode;
- MacMenuSubMenu *submenu;
- Common::Rect bbox;
- int shortcutPos;
-
- MacMenuItem(const Common::String &n, int sp = -1) : name(n), shortcutPos(sp), unicode(false), submenu(nullptr) {}
- MacMenuItem(const Common::U32String &n, int sp = -1) : unicodeName(n), shortcutPos(sp), unicode(true), submenu(nullptr) {}
-
~MacMenuItem() {
if (submenu)
delete submenu;
}
};
+MacMenuSubMenu::~MacMenuSubMenu() {
+ for (uint i = 0; i < items.size(); i++)
+ delete items[i];
+}
+
MacMenu::MacMenu(int id, const Common::Rect &bounds, MacWindowManager *wm)
: BaseMacWindow(id, false, wm) {
_font = getMenuFont();
@@ -241,10 +221,10 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
uint16 flags = menuData->readUint16LE();
if (flags & kPopUp) {
if (depth == 0) {
- menu->addMenuItem(readUnicodeString(menuData));
+ menu->addMenuItem(nullptr, readUnicodeString(menuData));
} else {
Common::U32String name = readUnicodeString(menuData);
- menu->addSubMenuItem(menus.top(), name, action, 0, 0, !(flags & kGrayed));
+ menu->addMenuItem(menus.top(), name, action, 0, 0, !(flags & kGrayed));
action++;
}
@@ -259,7 +239,7 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
menuData->readUint16LE(); // menu id
Common::U32String name = readUnicodeString(menuData);
if (depth > 0) {
- menu->addSubMenuItem(menus.top(), name, action, 0, 0, !(flags & kGrayed));
+ menu->addMenuItem(menus.top(), name, action, 0, 0, !(flags & kGrayed));
}
if (!name.empty()) {
action++;
@@ -293,21 +273,21 @@ MacMenu *MacMenu::createMenuFromPEexe(Common::PEResources &exe, MacWindowManager
void MacMenu::printMenu(int level, MacMenuSubMenu *submenu) {
if (!level) {
for (uint i = 0; i < _items.size(); i++) {
- debug("0. %s", _items[i]->unicode ? convertFromU32String(_items[i]->unicodeName).c_str() : _items[i]->name.c_str());
+ debug("0. %s", _items[i]->unicode ? convertFromU32String(_items[i]->unicodeText).c_str() : _items[i]->text.c_str());
if (_items[i]->submenu != nullptr)
printMenu(level + 1, _items[i]->submenu);
}
} else {
- for (uint i = 0; i < submenu->subitems.size(); i++) {
+ for (uint i = 0; i < submenu->items.size(); i++) {
debugN("%d. ", level);
for (int j = 0; j < level; j++)
debugN(" ");
- debug("%s", submenu->subitems[i]->unicode ? convertFromU32String(submenu->subitems[i]->unicodeText).c_str() : submenu->subitems[i]->text.c_str());
+ debug("%s", submenu->items[i]->unicode ? convertFromU32String(submenu->items[i]->unicodeText).c_str() : submenu->items[i]->text.c_str());
- if (submenu->subitems[i]->submenu != nullptr)
- printMenu(level + 1, submenu->subitems[i]->submenu);
+ if (submenu->items[i]->submenu != nullptr)
+ printMenu(level + 1, submenu->items[i]->submenu);
}
}
}
@@ -318,101 +298,75 @@ void MacMenu::addStaticMenus(const MacMenuData *data) {
for (int i = 0; data[i].menunum; i++) {
const MacMenuData *m = &data[i];
+ MacMenuSubMenu *submenu = getSubmenu(nullptr, m->menunum);
if (m->menunum == kMenuHighLevel) {
- addMenuItem(m->title);
+ addMenuItem(nullptr, m->title);
continue;
}
- addMenuSubItem(m->menunum, m->title, m->action, 0, m->shortcut, m->enabled);
+ if (submenu == nullptr)
+ submenu = addSubMenu(nullptr, m->menunum);
+
+ addMenuItem(submenu, m->title, m->action, 0, m->shortcut, m->enabled);
}
+ printMenu();
+
calcDimensions();
}
-int MacMenu::addMenuItem(const Common::String &name) {
- MacMenuItem *i = new MacMenuItem(name);
- _items.push_back(i);
-
+MacMenuSubMenu *MacMenu::addSubMenu(MacMenuSubMenu *submenu, int index) {
_dimensionsDirty = true;
- return _items.size() - 1;
-}
-
-int MacMenu::addMenuItem(const Common::U32String &name) {
- Common::U32String amp("&");
- Common::U32String res;
- int shortcutPos = -1;
-
- for (uint i = 0; i < name.size(); i++)
- if (name[i] == amp[0]) {
- //shortcut = amp[0] & 0xff;
- shortcutPos = i;
- } else {
- res += name[i];
- }
-
-
- MacMenuItem *i = new MacMenuItem(res, shortcutPos);
- _items.push_back(i);
+ if (submenu == nullptr) {
+ if (index == -1)
+ index = _items.size() - 1;
- _dimensionsDirty = true;
+ if (_items[index]->submenu != nullptr)
+ warning("Overwritting submenu #%d", index);
+ return (_items[index]->submenu = new MacMenuSubMenu());
+ } else {
+ if (index == -1)
+ index = submenu->items.size() - 1;
- return _items.size() - 1;
+ if (submenu->items[index]->submenu != nullptr)
+ warning("Overwritting submenu #%d", index);
+ return (submenu->items[index]->submenu = new MacMenuSubMenu());
+ }
}
-MacMenuSubMenu *MacMenu::addSubMenu(MacMenuSubMenu *submenu) {
- _dimensionsDirty = true;
-
+MacMenuSubMenu *MacMenu::getSubmenu(MacMenuSubMenu *submenu, int index) {
if (submenu == nullptr) {
- return (_items.back()->submenu = new MacMenuSubMenu());
+ if (index >= _items.size())
+ return nullptr;
+ return _items[index]->submenu;
} else {
- return (submenu->subitems.back()->submenu = new MacMenuSubMenu());
+ if (index >= submenu->items.size())
+ return nullptr;
+ return submenu->items[index]->submenu;
}
}
-void MacMenu::addMenuSubItem(int id, const Common::String &text, int action, int style, char shortcut, bool enabled) {
+int MacMenu::addMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action, int style, char shortcut, bool enabled) {
_dimensionsDirty = true;
- if (_items[id]->submenu == nullptr)
- _items[id]->submenu = new MacMenuSubMenu();
+ if (submenu == nullptr) {
+ MacMenuItem *i = new MacMenuItem(text);
+ _items.push_back(i);
- _items[id]->submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, -1, enabled));
-}
+ return _items.size() - 1;
+ }
-void MacMenu::addMenuSubItem(int id, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
_dimensionsDirty = true;
- if (_items[id]->submenu == nullptr)
- _items[id]->submenu = new MacMenuSubMenu();
-
- Common::U32String amp("&");
- Common::U32String res;
- int shortcutPos = -1;
+ submenu->items.push_back(new MacMenuItem(text, action, style, shortcut, -1, enabled));
- for (uint i = 0; i < text.size(); i++)
- if (text[i] == amp[0]) {
- shortcut = text[i + 1] & 0xff;
- shortcutPos = i;
- } else {
- res += text[i];
- }
-
- _items[id]->submenu->subitems.push_back(new MacMenuSubItem(res, action, style, shortcut, shortcutPos, enabled));
-}
-
-void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action, int style, char shortcut, bool enabled) {
- assert(submenu != nullptr);
-
- _dimensionsDirty = true;
-
- submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, -1, enabled));
+ return submenu->items.size() - 1;
}
-void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
- assert(submenu != nullptr);
-
+int MacMenu::addMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
_dimensionsDirty = true;
Common::U32String amp("&");
@@ -427,7 +381,15 @@ void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &t
res += text[i];
}
- submenu->subitems.push_back(new MacMenuSubItem(res, action, style, shortcut, shortcutPos, enabled));
+ if (submenu == nullptr) {
+ _items.push_back(new MacMenuItem(res, -1, 0, shortcut, shortcutPos));
+
+ return _items.size() - 1;
+ }
+
+ submenu->items.push_back(new MacMenuItem(res, action, style, shortcut, shortcutPos, enabled));
+
+ return submenu->items.size() - 1;
}
void MacMenu::calcDimensions() {
@@ -436,7 +398,7 @@ void MacMenu::calcDimensions() {
int x = 18;
for (uint i = 0; i < _items.size(); i++) {
- int w = _items[i]->unicode ? _font->getStringWidth(_items[i]->unicodeName) : _font->getStringWidth(_items[i]->name);
+ int w = _items[i]->unicode ? _font->getStringWidth(_items[i]->unicodeText) : _font->getStringWidth(_items[i]->text);
if (_items[i]->bbox.bottom == 0) {
_items[i]->bbox.left = x - kMenuLeftMargin;
@@ -466,7 +428,8 @@ void MacMenu::loadMenuResource(Common::MacResManager *resFork, uint16 id) {
Common::String menuTitle = res->readPascalString();
if (!menuTitle.empty()) {
- int menu = addMenuItem(menuTitle);
+ addMenuItem(nullptr, menuTitle);
+ MacMenuSubMenu *submenu = addSubMenu(nullptr);
initialState >>= 1;
// Read submenu items
@@ -481,7 +444,8 @@ void MacMenu::loadMenuResource(Common::MacResManager *resFork, uint16 id) {
/* uint8 mark = */ res->readByte();
uint8 style = res->readByte();
- addMenuSubItem(menu, subMenuTitle, action++, style, key, initialState & 1);
+ addMenuItem(submenu, subMenuTitle, action++, style, key, initialState & 1);
+
initialState >>= 1;
}
}
@@ -505,10 +469,10 @@ void MacMenu::clearSubMenu(int id) {
if (menu->submenu == nullptr)
return;
- for (uint j = 0; j < menu->submenu->subitems.size(); j++)
- delete menu->submenu->subitems[j];
+ for (uint j = 0; j < menu->submenu->items.size(); j++)
+ delete menu->submenu->items[j];
- menu->submenu->subitems.clear();
+ menu->submenu->items.clear();
}
void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
@@ -516,13 +480,17 @@ void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
Common::String string(str);
Common::String item;
+ MacMenuSubMenu *submenu = getSubmenu(nullptr, id);
+
+ if (submenu == nullptr)
+ submenu = addSubMenu(nullptr, id);
for (uint i = 0; i < string.size(); i++) {
while(i < string.size() && string[i] != ';') // Read token
item += string[i++];
if (item == "(-") {
- addMenuSubItem(id, NULL, 0);
+ addMenuItem(submenu, NULL, 0);
} else {
bool enabled = true;
int style = 0;
@@ -571,7 +539,7 @@ void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
}
}
- addMenuSubItem(id, item, commandId, style, shortcut, enabled);
+ addMenuItem(submenu, item, commandId, style, shortcut, enabled);
}
item.clear();
@@ -582,7 +550,7 @@ const Font *MacMenu::getMenuFont() {
return _wm->_fontMan->getFont(Graphics::MacFont(kMacFontChicago, 12));
}
-const Common::String MacMenu::getAcceleratorString(MacMenuSubItem *item, const char *prefix) {
+const Common::String MacMenu::getAcceleratorString(MacMenuItem *item, const char *prefix) {
if (item->shortcut == 0)
return Common::String();
@@ -594,8 +562,8 @@ int MacMenu::calcSubMenuWidth(MacMenuSubMenu *submenu) {
if (submenu == nullptr)
return maxWidth;
- for (uint i = 0; i < submenu->subitems.size(); i++) {
- MacMenuSubItem *item = submenu->subitems[i];
+ for (uint i = 0; i < submenu->items.size(); i++) {
+ MacMenuItem *item = submenu->items[i];
if (!item->text.empty()) {
Common::String text(item->text);
Common::String acceleratorText(getAcceleratorString(item, " "));
@@ -630,15 +598,15 @@ void MacMenu::calcSubMenuBounds(MacMenuSubMenu *submenu, int x, int y) {
int x1 = x;
int y1 = y;
int x2 = x1 + maxWidth + kMenuDropdownPadding * 2 - 4;
- int y2 = y1 + submenu->subitems.size() * kMenuDropdownItemHeight + 2;
+ int y2 = y1 + submenu->items.size() * kMenuDropdownItemHeight + 2;
submenu->bbox.left = x1;
submenu->bbox.top = y1;
submenu->bbox.right = x2;
submenu->bbox.bottom = y2;
- for (uint i = 0; i < submenu->subitems.size(); i++) {
- MacMenuSubMenu *menu = submenu->subitems[i]->submenu;
+ for (uint i = 0; i < submenu->items.size(); i++) {
+ MacMenuSubMenu *menu = submenu->items[i]->submenu;
if (menu != nullptr)
calcSubMenuBounds(menu, x2 - 4, y1 + i * kMenuDropdownItemHeight + 1);
@@ -714,10 +682,10 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
int y = it->bbox.top + (_wm->_fontMan->hasBuiltInFonts() ? 2 : 1);
if (it->unicode) {
- _font->drawString(&_screen, it->unicodeName, x, y, it->bbox.width(), color);
- underlineAccelerator(&_screen, _font, it->unicodeName, x, y, it->shortcutPos, color);
+ _font->drawString(&_screen, it->unicodeText, x, y, it->bbox.width(), color);
+ underlineAccelerator(&_screen, _font, it->unicodeText, x, y, it->shortcutPos, color);
} else {
- _font->drawString(&_screen, it->name, x, y, it->bbox.width(), color);
+ _font->drawString(&_screen, it->text, x, y, it->bbox.width(), color);
}
}
@@ -747,18 +715,18 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
int x = r->left + kMenuDropdownPadding;
int y = r->top + 1;
- for (uint i = 0; i < menu->subitems.size(); i++) {
- Common::String text(menu->subitems[i]->text);
- Common::String acceleratorText(getAcceleratorString(menu->subitems[i], ""));
+ for (uint i = 0; i < menu->items.size(); i++) {
+ Common::String text(menu->items[i]->text);
+ Common::String acceleratorText(getAcceleratorString(menu->items[i], ""));
- Common::U32String unicodeText(menu->subitems[i]->unicodeText);
- int shortcutPos = menu->subitems[i]->shortcutPos;
+ Common::U32String unicodeText(menu->items[i]->unicodeText);
+ int shortcutPos = menu->items[i]->shortcutPos;
int accelX = r->right - 25;
int arrowX = r->right - 14;
int color = _wm->_colorBlack;
- if (i == (uint)menu->highlight && (!text.empty() || !unicodeText.empty()) && menu->subitems[i]->enabled) {
+ if (i == (uint)menu->highlight && (!text.empty() || !unicodeText.empty()) && menu->items[i]->enabled) {
color = _wm->_colorWhite;
Common::Rect trect(r->left, y - (_wm->_fontMan->hasBuiltInFonts() ? 1 : 0), r->right, y + _font->getFontHeight());
@@ -769,7 +737,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
ManagedSurface *s = &_screen;
int tx = x, ty = y;
- if (!menu->subitems[i]->enabled) {
+ if (!menu->items[i]->enabled) {
s = &_tempSurface;
tx = 0;
ty = 0;
@@ -778,7 +746,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
_tempSurface.clear(kColorGreen);
}
- if (menu->subitems[i]->unicode) {
+ if (menu->items[i]->unicode) {
_font->drawString(s, unicodeText, tx, ty, r->width(), color);
underlineAccelerator(s, _font, unicodeText, tx, ty, shortcutPos, color);
} else {
@@ -788,10 +756,10 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
if (!acceleratorText.empty() && shortcutPos == -1)
_font->drawString(s, acceleratorText, accelX, ty, r->width(), color);
- if (menu->subitems[i]->submenu != nullptr)
+ if (menu->items[i]->submenu != nullptr)
drawSubMenuArrow(s, arrowX, ty, color);
- if (!menu->subitems[i]->enabled) {
+ if (!menu->items[i]->enabled) {
// I am lazy to extend drawString() with plotProc as a parameter, so
// fake it here
for (int ii = 0; ii < _tempSurface.h; ii++) {
@@ -818,8 +786,8 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
y += kMenuDropdownItemHeight;
}
- if (recursive && menu->highlight != -1 && menu->subitems[menu->highlight]->submenu != nullptr)
- renderSubmenu(menu->subitems[menu->highlight]->submenu, false);
+ if (recursive && menu->highlight != -1 && menu->items[menu->highlight]->submenu != nullptr)
+ renderSubmenu(menu->items[menu->highlight]->submenu, false);
_contentIsDirty = true;
//g_system->copyRectToScreen(_screen.getBasePtr(r->left, r->top), _screen.pitch, r->left, r->top, r->width() + 2, r->height() + 2);
@@ -911,9 +879,9 @@ bool MacMenu::mouseClick(int x, int y) {
return true;
}
- if (_activeSubItem != -1 && _menustack.back()->subitems[_activeSubItem]->submenu != nullptr) {
- if (_menustack.back()->subitems[_activeSubItem]->submenu->bbox.contains(x, y)) {
- _menustack.push_back(_menustack.back()->subitems[_activeSubItem]->submenu);
+ 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);
_activeSubItem = 0;
_contentIsDirty = true;
@@ -981,13 +949,13 @@ bool MacMenu::mouseRelease(int x, int y) {
g_system->copyRectToScreen(_wm->_screenCopy->getBasePtr(0, 0), _wm->_screenCopy->pitch, 0, 0, _wm->_screenCopy->w, _wm->_screenCopy->h);
}
- if (_activeItem != -1 && _activeSubItem != -1 && _menustack.back()->subitems[_activeSubItem]->enabled) {
- if (_menustack.back()->subitems[_activeSubItem]->unicode) {
- (*_unicodeccallback)(_menustack.back()->subitems[_activeSubItem]->action,
- _menustack.back()->subitems[_activeSubItem]->unicodeText, _cdata);
+ if (_activeItem != -1 && _activeSubItem != -1 && _menustack.back()->items[_activeSubItem]->enabled) {
+ if (_menustack.back()->items[_activeSubItem]->unicode) {
+ (*_unicodeccallback)(_menustack.back()->items[_activeSubItem]->action,
+ _menustack.back()->items[_activeSubItem]->unicodeText, _cdata);
} else {
- (*_ccallback)(_menustack.back()->subitems[_activeSubItem]->action,
- _menustack.back()->subitems[_activeSubItem]->text, _cdata);
+ (*_ccallback)(_menustack.back()->items[_activeSubItem]->action,
+ _menustack.back()->items[_activeSubItem]->text, _cdata);
}
}
@@ -1009,12 +977,12 @@ bool MacMenu::processMenuShortCut(byte flags, uint16 ascii) {
if (flags & (Common::KBD_CTRL | Common::KBD_META)) {
for (uint i = 0; i < _items.size(); i++)
if (_items[i]->submenu != nullptr) {
- for (uint j = 0; j < _items[i]->submenu->subitems.size(); j++)
- if (_items[i]->submenu->subitems[j]->enabled && tolower(_items[i]->submenu->subitems[j]->shortcut) == ascii) {
- if (_items[i]->submenu->subitems[j]->unicode) {
- (*_unicodeccallback)(_items[i]->submenu->subitems[j]->action, _items[i]->submenu->subitems[j]->unicodeText, _cdata);
+ 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) {
+ (*_unicodeccallback)(_items[i]->submenu->items[j]->action, _items[i]->submenu->items[j]->unicodeText, _cdata);
} else {
- (*_ccallback)(_items[i]->submenu->subitems[j]->action, _items[i]->submenu->subitems[j]->text, _cdata);
+ (*_ccallback)(_items[i]->submenu->items[j]->action, _items[i]->submenu->items[j]->text, _cdata);
}
return true;
}
@@ -1028,9 +996,9 @@ void MacMenu::enableCommand(int menunum, int action, bool state) {
if (!_items[menunum]->submenu)
return;
- for (uint i = 0; i < _items[menunum]->submenu->subitems.size(); i++)
- if (_items[menunum]->submenu->subitems[i]->action == action)
- _items[menunum]->submenu->subitems[i]->enabled = state;
+ for (uint i = 0; i < _items[menunum]->submenu->items.size(); i++)
+ if (_items[menunum]->submenu->items[i]->action == action)
+ _items[menunum]->submenu->items[i]->enabled = state;
_contentIsDirty = true;
}
@@ -1040,7 +1008,7 @@ void MacMenu::enableCommand(const char *menuitem, const char *menuaction, bool s
while (menunum < _items.size()) {
assert(!_items[menunum]->unicode);
- if (_items[menunum]->name.equalsIgnoreCase(menuitem))
+ if (_items[menunum]->text.equalsIgnoreCase(menuitem))
break;
else
menunum++;
@@ -1049,10 +1017,10 @@ void MacMenu::enableCommand(const char *menuitem, const char *menuaction, bool s
return;
if (_items[menunum]->submenu != nullptr)
- for (uint i = 0; i < _items[menunum]->submenu->subitems.size(); i++) {
- assert(!_items[menunum]->submenu->subitems[i]->unicode);
- if (_items[menunum]->submenu->subitems[i]->text.equalsIgnoreCase(menuaction))
- _items[menunum]->submenu->subitems[i]->enabled = state;
+ for (uint i = 0; i < _items[menunum]->submenu->items.size(); i++) {
+ assert(!_items[menunum]->submenu->items[i]->unicode);
+ if (_items[menunum]->submenu->items[i]->text.equalsIgnoreCase(menuaction))
+ _items[menunum]->submenu->items[i]->enabled = state;
}
_contentIsDirty = true;
@@ -1063,7 +1031,7 @@ void MacMenu::enableCommand(const Common::U32String &menuitem, const Common::U32
while (menunum < _items.size()) {
assert(_items[menunum]->unicode);
- if (_items[menunum]->unicodeName.equals(menuitem))
+ if (_items[menunum]->unicodeText.equals(menuitem))
break;
else
menunum++;
@@ -1072,10 +1040,10 @@ void MacMenu::enableCommand(const Common::U32String &menuitem, const Common::U32
return;
if (_items[menunum]->submenu != nullptr)
- for (uint i = 0; i < _items[menunum]->submenu->subitems.size(); i++) {
- assert(_items[menunum]->submenu->subitems[i]->unicode);
- if (_items[menunum]->submenu->subitems[i]->unicodeText.equals(menuaction))
- _items[menunum]->submenu->subitems[i]->enabled = state;
+ for (uint i = 0; i < _items[menunum]->submenu->items.size(); i++) {
+ assert(_items[menunum]->submenu->items[i]->unicode);
+ if (_items[menunum]->submenu->items[i]->unicodeText.equals(menuaction))
+ _items[menunum]->submenu->items[i]->enabled = state;
}
_contentIsDirty = true;
@@ -1084,8 +1052,8 @@ void MacMenu::enableCommand(const Common::U32String &menuitem, const Common::U32
void MacMenu::disableAllMenus() {
for (uint i = 1; i < _items.size(); i++) // Leave About menu on
if (_items[i]->submenu != nullptr)
- for (uint j = 0; j < _items[i]->submenu->subitems.size(); j++)
- _items[i]->submenu->subitems[j]->enabled = false;
+ for (uint j = 0; j < _items[i]->submenu->items.size(); j++)
+ _items[i]->submenu->items[j]->enabled = false;
_contentIsDirty = true;
}
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 3b21647..49606f1 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -34,8 +34,8 @@ class MacResManager;
namespace Graphics {
struct MacMenuItem;
-struct MacMenuSubItem;
struct MacMenuSubMenu;
+typedef Common::Array<MacMenuItem *> ItemArray;
struct MacMenuData {
int menunum;
@@ -59,18 +59,16 @@ public:
void addStaticMenus(const MacMenuData *data);
void calcDimensions();
- MacMenuSubMenu *addSubMenu(MacMenuSubMenu *submenu);
- int addMenuItem(const Common::String &name);
- int addMenuItem(const Common::U32String &name);
- void addMenuSubItem(int id, const Common::String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
- void addMenuSubItem(int id, const Common::U32String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
- void addSubMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
- void addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action, int style = 0, char shortcut = 0, bool enabled = true);
+ MacMenuSubMenu *addSubMenu(MacMenuSubMenu *submenu, int index = -1);
+ int addMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action = -1, int style = 0, char shortcut = 0, bool enabled = true);
+ int addMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action = 0, int style = 0, char shortcut = 0, bool enabled = true);
void loadMenuResource(Common::MacResManager *resFork, uint16 id);
void loadMenuBarResource(Common::MacResManager *resFork, uint16 id);
void createSubMenuFromString(int id, const char *string, int commandId);
void clearSubMenu(int id);
+ MacMenuSubMenu *getSubmenu(MacMenuSubMenu *submenu, int index);
+
bool draw(ManagedSurface *g, bool forceRedraw = false);
bool processEvent(Common::Event &event);
@@ -85,6 +83,8 @@ public:
bool isVisible() { return _isVisible; }
void setVisible(bool visible) { _isVisible = visible; _contentIsDirty = true; }
+ void printMenu(int level = 0, MacMenuSubMenu *submenu = nullptr);
+
Common::Rect _bbox;
private:
@@ -93,7 +93,7 @@ private:
private:
const Font *getMenuFont();
- const Common::String getAcceleratorString(MacMenuSubItem *item, const char *prefix);
+ const Common::String getAcceleratorString(MacMenuItem *item, const char *prefix);
int calcSubMenuWidth(MacMenuSubMenu *menu);
void calcSubMenuBounds(MacMenuSubMenu *menu, int x, int y);
void renderSubmenu(MacMenuSubMenu *menu, bool recursive = true);
@@ -107,9 +107,7 @@ private:
void drawSubMenuArrow(ManagedSurface *dst, int x, int y, int color);
- void printMenu(int level = 0, MacMenuSubMenu *submenu = nullptr);
-
- Common::Array<MacMenuItem *> _items;
+ ItemArray _items;
const Font *_font;
More information about the Scummvm-git-logs
mailing list