[Scummvm-git-logs] scummvm master -> 29af23c8328bd38fddbe44769dbbff7575c975a6
ysj1173886760
42030331+ysj1173886760 at users.noreply.github.com
Thu Jul 29 04:47:11 UTC 2021
This automated email contains information about 10 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
36abd91264 GRAPHICS: MACGUI: introduce checkBoxAccess to determines what happens when user clicks the checkbox or radio button
6315f744d8 DIRECTOR: implement checkBoxAccess property
7168e9a491 DIRECTOR: skip b_alert due to the tests
c57c7b11b2 DIRECTOR: skip setting shortcut key when we only read /
53fd14b283 GRAPHICS: MACGUI: add functions for setting member checkMark and Enable of menuItem
a317110704 DIRECTOR: implement setTheMenuItemEntity
948604d79d GRAPHICS: MACGUI: text length should not bigger than maxWidth - 1
7673cbcc86 GRAPHICS: MACGUI: implement setMenuItemName
5ae035f4b5 GRAPHICS: MACGUI: implement overload version for the functions for setting menu attributes
29af23c832 DIRECTOR: fix setTheMenuItemEntity
Commit: 36abd912648694843f4a9d9316c03d204a918931
https://github.com/scummvm/scummvm/commit/36abd912648694843f4a9d9316c03d204a918931
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00
Commit Message:
GRAPHICS: MACGUI: introduce checkBoxAccess to determines what happens when user clicks the checkbox or radio button
Changed paths:
graphics/macgui/macbutton.cpp
graphics/macgui/macbutton.h
diff --git a/graphics/macgui/macbutton.cpp b/graphics/macgui/macbutton.cpp
index 2531e841e0..b74afe5190 100644
--- a/graphics/macgui/macbutton.cpp
+++ b/graphics/macgui/macbutton.cpp
@@ -43,6 +43,7 @@ MacButton::MacButton(MacButtonType buttonType, TextAlign textAlignment, MacWidge
void MacButton::init() {
_invertInner = false;
_checkBoxType = 0;
+ _checkBoxAccess = 0;
switch (_buttonType) {
case kCheckBox:
@@ -193,7 +194,22 @@ bool MacButton::processEvent(Common::Event &event) {
break;
case Common::EVENT_LBUTTONUP:
setActive(false);
- _invertInner = !_invertInner;
+
+ switch (_checkBoxAccess) {
+ case 0:
+ _invertInner = !_invertInner;
+ break;
+ case 1:
+ _invertInner = true;
+ break;
+ case 2:
+ // no op, type 2 will prevent user from setting checkboxes
+ break;
+ default:
+ warning("MacButton::processEvent can not handle checkBoxAccess with type %d", _checkBoxAccess);
+ break;
+ }
+
_wm->_hilitingWidget = false;
break;
default:
diff --git a/graphics/macgui/macbutton.h b/graphics/macgui/macbutton.h
index d8fee07375..a95b95cfb7 100644
--- a/graphics/macgui/macbutton.h
+++ b/graphics/macgui/macbutton.h
@@ -56,6 +56,7 @@ public:
void setHilite(bool hilite);
void setCheckBoxType(int type);
+ void setCheckBoxAccess(int type) { _checkBoxAccess = type; }
virtual bool draw(ManagedSurface *g, bool forceRedraw = false) override;
virtual bool draw(bool forceRedraw = false) override;
@@ -70,6 +71,7 @@ private:
MacPlotData _pd;
bool _invertInner;
int _checkBoxType;
+ int _checkBoxAccess;
};
} // End of namespace Graphics
Commit: 6315f744d866e3c127ba2eddc730e0e893e97673
https://github.com/scummvm/scummvm/commit/6315f744d866e3c127ba2eddc730e0e893e97673
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00
Commit Message:
DIRECTOR: implement checkBoxAccess property
Changed paths:
engines/director/channel.cpp
engines/director/lingo/lingo-the.cpp
engines/director/movie.cpp
engines/director/movie.h
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 5966622172..7ce2034d65 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -401,8 +401,10 @@ void Channel::updateGlobalAttr() {
((Graphics::MacText *)_widget)->setSelRange(g_director->getCurrentMovie()->_selStart, g_director->getCurrentMovie()->_selEnd);
// update button info, including checkBoxType
- if ((_sprite->_cast->_type == kCastButton || isButtonSprite(_sprite->_spriteType)) && _widget)
+ if ((_sprite->_cast->_type == kCastButton || isButtonSprite(_sprite->_spriteType)) && _widget) {
((Graphics::MacButton *)_widget)->setCheckBoxType(g_director->getCurrentMovie()->_checkBoxType);
+ ((Graphics::MacButton *)_widget)->setCheckBoxAccess(g_director->getCurrentMovie()->_checkBoxAccess);
+ }
}
void Channel::replaceSprite(Sprite *nextSprite) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index c92e064bbf..819b8c4831 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -394,7 +394,8 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.u.i = g_director->_centerStage;
break;
case kTheCheckBoxAccess:
- getTheEntitySTUB(kTheCheckBoxAccess);
+ d.type = INT;
+ d.u.i = g_director->getCurrentMovie()->_checkBoxAccess;
break;
case kTheCheckBoxType:
d.type = INT;
@@ -901,7 +902,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
g_director->_centerStage = d.asInt();
break;
case kTheCheckBoxAccess:
- setTheEntitySTUB(kTheCheckBoxAccess);
+ g_director->getCurrentMovie()->_checkBoxAccess = d.asInt();
break;
case kTheCheckBoxType:
g_director->getCurrentMovie()->_checkBoxType = d.asInt();
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 8a83bc55ab..0e737416bf 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -79,6 +79,7 @@ Movie::Movie(Window *window) {
_selStart = -1;
_checkBoxType = 0;
+ _checkBoxAccess = 0;
}
Movie::~Movie() {
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 317ed2a8b6..c89d5b25b3 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -158,6 +158,7 @@ public:
int _selEnd;
int _checkBoxType;
+ int _checkBoxAccess;
uint16 _currentHiliteChannelId;
Commit: 7168e9a491376fed911aeff2163ba7c8d63609c5
https://github.com/scummvm/scummvm/commit/7168e9a491376fed911aeff2163ba7c8d63609c5
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00
Commit Message:
DIRECTOR: skip b_alert due to the tests
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index c83e588f45..87d4dc3632 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1582,6 +1582,12 @@ void LB::b_alert(int nargs) {
Common::String alert = d.asString();
warning("b_alert(%s)", alert.c_str());
+ if (g_director->getGameGID() == GID_TEST) {
+ warning("b_alert: Skipping due to tests");
+
+ return;
+ }
+
if (!debugChannelSet(-1, kDebugFewFramesOnly)) {
g_director->_wm->clearHandlingWidgets();
GUI::MessageDialog dialog(alert.c_str(), "OK");
Commit: c57c7b11b204a579efd674c62d7b455d43392d23
https://github.com/scummvm/scummvm/commit/c57c7b11b204a579efd674c62d7b455d43392d23
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T10:52:45+08:00
Commit Message:
DIRECTOR: skip setting shortcut key when we only read /
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index b46c411638..2ad58e99e4 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -542,7 +542,9 @@ void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
item.deleteChar(shortPtr - item.c_str());
item.deleteChar(shortPtr - item.c_str());
} else {
- error("MacMenu::createSubMenuFromString(): Unexpected shortcut: '%s', item '%s' in menu '%s'", shortPtr, item.c_str(), string.c_str());
+ // if we only have one / without shortcut key, we skip it.
+ item.deleteChar(shortPtr - item.c_str());
+ // error("MacMenu::createSubMenuFromString(): Unexpected shortcut: '%s', item '%s' in menu '%s'", shortPtr, item.c_str(), string.c_str());
}
}
Commit: 53fd14b283168b3863799c74714592750cbbcb50
https://github.com/scummvm/scummvm/commit/53fd14b283168b3863799c74714592750cbbcb50
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T11:40:18+08:00
Commit Message:
GRAPHICS: MACGUI: add functions for setting member checkMark and Enable of menuItem
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 2ad58e99e4..4101ef2a68 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -486,6 +486,61 @@ void MacMenu::loadMenuBarResource(Common::MacResManager *resFork, uint16 id) {
}
}
+void MacMenu::setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ if (item) {
+ item->checked = checkMark;
+ _contentIsDirty = true;
+ }
+}
+
+void MacMenu::setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ if (item) {
+ item->enabled = enabled;
+ _contentIsDirty = true;
+ }
+}
+
+MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::String &itemId) {
+ // TODO: support arbitrary level menu item finding
+ // only support 2 level finding now.
+
+ MacMenuItem *menu = nullptr;
+ for (uint i = 0; i < _items.size(); i++) {
+ // TODO: support unicode text menu
+ // didn't support unicode item finding yet
+ if (!_items[i]->unicode) {
+ if (_items[i]->text.equalsIgnoreCase(menuId)) {
+ menu = _items[i];
+ break;
+ }
+ }
+ }
+
+ if (!menu) {
+ warning("MacMenu::findMenuItem: can not find menu with id %s", menuId.c_str());
+ return nullptr;
+ }
+
+ if (!menu->submenu) {
+ warning("MacMenu::findMenuItem: menu %s doesn't have submenu", menuId.c_str());
+ return nullptr;
+ }
+
+ for (uint i = 0; i < menu->submenu->items.size(); i++) {
+ if (!menu->submenu->items[i]->unicode) {
+ if (menu->submenu->items[i]->text.equalsIgnoreCase(itemId))
+ return menu->submenu->items[i];
+ }
+ }
+
+ warning("MacMenu::findMenuItem: menu %s doesn't have item with id %s", menuId.c_str(), itemId.c_str());
+ return nullptr;
+}
+
void MacMenu::clearSubMenu(int id) {
MacMenuItem *menu = _items[id];
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 852169fcd8..5344a141d6 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -97,6 +97,9 @@ public:
bool checkIntersects(Common::Rect &rect);
+ void setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
+ void setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+
Common::Rect _bbox;
private:
@@ -130,6 +133,8 @@ private:
void eventLoop();
+ MacMenuItem *findMenuItem(const Common::String &menuId, const Common::String &itemId);
+
ItemArray _items;
const Font *_font;
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index ee592badf5..cf66aaa341 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -426,6 +426,22 @@ void MacWindowManager::disableScreenCopy() {
g_system->copyRectToScreen(_screenCopy->getBasePtr(0, 0), _screenCopy->pitch, 0, 0, _screenCopy->w, _screenCopy->h);
}
+void MacWindowManager::setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark) {
+ if (_menu) {
+ _menu->setCheckMark(menuId, itemId, checkMark);
+ } else {
+ warning("MacWindowManager::setMenuItemCheckMark: wm doesn't have menu");
+ }
+}
+
+void MacWindowManager::setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled) {
+ if (_menu) {
+ _menu->setEnabled(menuId, itemId, enabled);
+ } else {
+ warning("MacWindowManager::setMenuItemEnabled: wm doesn't have menu");
+ }
+}
+
// this is refer to how we deal U32String in splitString in mactext
// maybe we can optimize this specifically
Common::U32String stripFormat(const Common::U32String &str) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 5ae47180a1..3eb6ebf9c0 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -334,6 +334,9 @@ public:
*/
void clearHandlingWidgets();
+ void setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
+ void setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+
public:
MacFontManager *_fontMan;
uint32 _mode;
Commit: a317110704d025ada8f99a2860d5fa019a92ae80
https://github.com/scummvm/scummvm/commit/a317110704d025ada8f99a2860d5fa019a92ae80
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T11:40:39+08:00
Commit Message:
DIRECTOR: implement setTheMenuItemEntity
Changed paths:
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 42d1a7913f..517a5a7941 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -844,9 +844,9 @@ void LC::cb_v4theentityassign() {
break;
case kTEAMenuIdItemId:
{
- /*Datum menuId = */g_lingo->pop();
- /*Datum itemId = */g_lingo->pop();
- warning("cb_v4theentityassign: STUB: kTEAMenuIdItemId");
+ Datum menuId = g_lingo->pop();
+ Datum itemId = g_lingo->pop();
+ g_lingo->setTheMenuItemEntity(entity, menuId, field, itemId, value);
}
break;
case kTEAChunk:
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 819b8c4831..28d26ac802 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1107,8 +1107,23 @@ Datum Lingo::getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &m
}
void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId, Datum &d) {
- warning("STUB: setTheMenuItemEntity(%s, %s, %s, %s, %s)", entity2str(entity), menuId.asString(true).c_str(), field2str(field),
- menuItemId.asString(true).c_str(), d.asString(true).c_str());
+ switch(field) {
+ case kTheCheckMark:
+ g_director->_wm->setMenuItemCheckMark(menuId.asString(), menuItemId.asString(), d.asInt());
+ break;
+ case kTheEnabled:
+ g_director->_wm->setMenuItemEnabled(menuId.asString(), menuItemId.asString(), d.asInt());
+ break;
+ case kTheName:
+ setTheEntitySTUB(kTheName);
+ break;
+ case kTheScript:
+ setTheEntitySTUB(kTheScript);
+ break;
+ default:
+ warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+ break;
+ }
}
Datum Lingo::getTheSprite(Datum &id1, int field) {
Commit: 948604d79dd1c46009f6c860f85fd74fa8fe5f30
https://github.com/scummvm/scummvm/commit/948604d79dd1c46009f6c860f85fd74fa8fe5f30
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:04:20+08:00
Commit Message:
GRAPHICS: MACGUI: text length should not bigger than maxWidth - 1
Changed paths:
graphics/fonts/macfont.cpp
graphics/macgui/mactext.cpp
diff --git a/graphics/fonts/macfont.cpp b/graphics/fonts/macfont.cpp
index afe7a95e4e..fe23795156 100644
--- a/graphics/fonts/macfont.cpp
+++ b/graphics/fonts/macfont.cpp
@@ -419,7 +419,7 @@ void MacFONTFont::drawChar(Surface *dst, uint32 chr, int x, int y, uint32 color)
// due to the way we are handling the generated fonts. we only add the kerning offset for the original font
if (!_data._slant)
- x += glyph->kerningOffset;
+ x += glyph->kerningOffset;
if (x >= dst->w)
return;
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 2b423d3c3e..01c4771e8f 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -275,7 +275,7 @@ MacFontRun MacText::getFgColor() {
}
// we are doing this because we may need to dealing with the plain byte. See ctor of mactext which contains String str instead of U32String str
-// thus, if we are passing the str, meaning we are using plainByteMode. And when we calculating the string width. we need to convert it to it's orignal state first;
+// thus, if we are passing the str, meaning we are using plainByteMode. And when we calculate the string width. we need to convert it to it's original state first;
int MacText::getStringWidth(MacFontRun &format, const Common::U32String &str) {
if (format.plainByteMode())
return format.getFont()->getStringWidth(Common::convertFromU32String(str, format.getEncoding()));
@@ -740,7 +740,7 @@ void MacText::splitString(const Common::U32String &str, int curLine) {
D(9, "curWidth %d word_width %d", cur_width, word_width);
// if cur_width == 0 but there`s chunks, meaning there must be empty string here
// if cur_width == 0, then you don`t have to add a newline for it
- if (cur_width + word_width > _maxWidth && cur_width != 0) {
+ if (cur_width + word_width >= _maxWidth && cur_width != 0) {
++curLine;
_textLines.insert_at(curLine, MacTextLine());
}
@@ -778,7 +778,7 @@ void MacText::splitString(const Common::U32String &str, int curLine) {
} else {
char_width = word[i].getFont()->getCharWidth(c);
}
- if (char_width + tmp_width + cur_width > _maxWidth) {
+ if (char_width + tmp_width + cur_width >= _maxWidth) {
++curLine;
_textLines.insert_at(curLine, MacTextLine());
_textLines[curLine].chunks.push_back(word[i]);
@@ -900,7 +900,7 @@ void MacText::render(int from, int to, int shadow) {
// TODO: _textMaxWidth, when -1, was not rendering ANY text.
for (uint j = 0; j < _textLines[i].chunks.size(); j++) {
- debug(9, "MacText::render: line %d[%d] h:%d at %d,%d (%s) fontid: %d on %dx%d, fgcolor: %d bgcolor: %d, font: %p",
+ debug(0, "MacText::render: line %d[%d] h:%d at %d,%d (%s) fontid: %d on %dx%d, fgcolor: %d bgcolor: %d, font: %p",
i, j, _textLines[i].height, xOffset, _textLines[i].y, _textLines[i].chunks[j].text.encode().c_str(),
_textLines[i].chunks[j].fontId, _surface->w, _surface->h, _textLines[i].chunks[j].fgcolor, _bgcolor,
(const void *)_textLines[i].chunks[j].getFont());
Commit: 7673cbcc8631b8c34baf1a13578fbc925578b1b8
https://github.com/scummvm/scummvm/commit/7673cbcc8631b8c34baf1a13578fbc925578b1b8
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:28:05+08:00
Commit Message:
GRAPHICS: MACGUI: implement setMenuItemName
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 4101ef2a68..365dfbba7f 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -504,6 +504,15 @@ void MacMenu::setEnabled(const Common::String &menuId, const Common::String &ite
}
}
+void MacMenu::setName(const Common::String &menuId, const Common::String &itemId, const Common::String &name) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ if (item) {
+ item->text = name;
+ _contentIsDirty = true;
+ }
+}
+
MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::String &itemId) {
// TODO: support arbitrary level menu item finding
// only support 2 level finding now.
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 5344a141d6..2566ecdc3d 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -99,6 +99,7 @@ public:
void setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
void setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+ void setName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
Common::Rect _bbox;
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index cf66aaa341..6d380110d7 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -442,6 +442,14 @@ void MacWindowManager::setMenuItemEnabled(const Common::String &menuId, const Co
}
}
+void MacWindowManager::setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name) {
+ if (_menu) {
+ _menu->setName(menuId, itemId, name);
+ } else {
+ warning("MacWindowManager::setMenuItemName: wm doesn't have menu");
+ }
+}
+
// this is refer to how we deal U32String in splitString in mactext
// maybe we can optimize this specifically
Common::U32String stripFormat(const Common::U32String &str) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 3eb6ebf9c0..e80383b457 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -336,6 +336,7 @@ public:
void setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
void setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
+ void setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
public:
MacFontManager *_fontMan;
Commit: 5ae035f4b55b2db621541158371356bdce30788d
https://github.com/scummvm/scummvm/commit/5ae035f4b55b2db621541158371356bdce30788d
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:45:16+08:00
Commit Message:
GRAPHICS: MACGUI: implement overload version for the functions for setting menu attributes
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 365dfbba7f..2377058c9e 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -513,6 +513,33 @@ void MacMenu::setName(const Common::String &menuId, const Common::String &itemId
}
}
+void MacMenu::setCheckMark(int menuId, int itemId, bool checkMark) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ if (item) {
+ item->checked = checkMark;
+ _contentIsDirty = true;
+ }
+}
+
+void MacMenu::setEnabled(int menuId, int itemId, bool enabled) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ if (item) {
+ item->enabled = enabled;
+ _contentIsDirty = true;
+ }
+}
+
+void MacMenu::setName(int menuId, int itemId, const Common::String &name) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ if (item) {
+ item->text = name;
+ _contentIsDirty = true;
+ }
+}
+
MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::String &itemId) {
// TODO: support arbitrary level menu item finding
// only support 2 level finding now.
@@ -550,6 +577,29 @@ MacMenuItem *MacMenu::findMenuItem(const Common::String &menuId, const Common::S
return nullptr;
}
+MacMenuItem *MacMenu::findMenuItem(int menuId, int itemId) {
+ MacMenuItem *menu = nullptr;
+
+ if ((uint)menuId < _items.size())
+ menu = _items[menuId];
+
+ if (!menu) {
+ warning("MacMenu::findMenuItem: menuId %d out of bounds", menuId);
+ return nullptr;
+ }
+
+ if (!menu->submenu) {
+ warning("MacMenu::findMenuItem: menu %d doesn't have submenu", menuId);
+ return nullptr;
+ }
+
+ if ((uint)itemId < menu->submenu->items.size())
+ return menu->submenu->items[itemId];
+
+ warning("MacMenu::findMenuItem: itemId %d out of bounds in menu %d", itemId, menuId);
+ return nullptr;
+}
+
void MacMenu::clearSubMenu(int id) {
MacMenuItem *menu = _items[id];
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 2566ecdc3d..f3852442f9 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -100,6 +100,9 @@ public:
void setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
void setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
void setName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
+ void setCheckMark(int menuId, int itemId, bool checkMark);
+ void setEnabled(int menuId, int itemId, bool enabled);
+ void setName(int menuId, int itemId, const Common::String &name);
Common::Rect _bbox;
@@ -135,6 +138,7 @@ private:
void eventLoop();
MacMenuItem *findMenuItem(const Common::String &menuId, const Common::String &itemId);
+ MacMenuItem *findMenuItem(int menuId, int itemId);
ItemArray _items;
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 6d380110d7..e2b393f5a2 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -450,6 +450,30 @@ void MacWindowManager::setMenuItemName(const Common::String &menuId, const Commo
}
}
+void MacWindowManager::setMenuItemCheckMark(int menuId, int itemId, bool checkMark) {
+ if (_menu) {
+ _menu->setCheckMark(menuId, itemId, checkMark);
+ } else {
+ warning("MacWindowManager::setMenuItemCheckMark: wm doesn't have menu");
+ }
+}
+
+void MacWindowManager::setMenuItemEnabled(int menuId, int itemId, bool enabled) {
+ if (_menu) {
+ _menu->setEnabled(menuId, itemId, enabled);
+ } else {
+ warning("MacWindowManager::setMenuItemEnabled: wm doesn't have menu");
+ }
+}
+
+void MacWindowManager::setMenuItemName(int menuId, int itemId, const Common::String &name) {
+ if (_menu) {
+ _menu->setName(menuId, itemId, name);
+ } else {
+ warning("MacWindowManager::setMenuItemName: wm doesn't have menu");
+ }
+}
+
// this is refer to how we deal U32String in splitString in mactext
// maybe we can optimize this specifically
Common::U32String stripFormat(const Common::U32String &str) {
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index e80383b457..c74339e916 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -337,6 +337,9 @@ public:
void setMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
void setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
void setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
+ void setMenuItemCheckMark(int menuId, int itemId, bool checkMark);
+ void setMenuItemEnabled(int menuId, int itemId, bool enabled);
+ void setMenuItemName(int menuId, int itemId, const Common::String &name);
public:
MacFontManager *_fontMan;
Commit: 29af23c8328bd38fddbe44769dbbff7575c975a6
https://github.com/scummvm/scummvm/commit/29af23c8328bd38fddbe44769dbbff7575c975a6
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-29T12:45:35+08:00
Commit Message:
DIRECTOR: fix setTheMenuItemEntity
Changed paths:
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 28d26ac802..291ef3775c 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1109,16 +1109,31 @@ Datum Lingo::getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &m
void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId, Datum &d) {
switch(field) {
case kTheCheckMark:
- g_director->_wm->setMenuItemCheckMark(menuId.asString(), menuItemId.asString(), d.asInt());
+ if (menuId.type == STRING && menuItemId.type == STRING)
+ g_director->_wm->setMenuItemCheckMark(menuId.asString(), menuItemId.asString(), d.asInt());
+ else if (menuId.type == INT && menuItemId.type == INT)
+ g_director->_wm->setMenuItemCheckMark(menuId.asInt() - 1, menuItemId.asInt() - 1, d.asInt());
+ else
+ warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
break;
case kTheEnabled:
- g_director->_wm->setMenuItemEnabled(menuId.asString(), menuItemId.asString(), d.asInt());
+ if (menuId.type == STRING && menuItemId.type == STRING)
+ g_director->_wm->setMenuItemEnabled(menuId.asString(), menuItemId.asString(), d.asInt());
+ else if (menuId.type == INT && menuItemId.type == INT)
+ g_director->_wm->setMenuItemEnabled(menuId.asInt() - 1, menuItemId.asInt() - 1, d.asInt());
+ else
+ warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
break;
case kTheName:
- setTheEntitySTUB(kTheName);
+ if (menuId.type == STRING && menuItemId.type == STRING)
+ g_director->_wm->setMenuItemName(menuId.asString(), menuItemId.asString(), d.asString());
+ else if (menuId.type == INT && menuItemId.type == INT)
+ g_director->_wm->setMenuItemName(menuId.asInt() - 1, menuItemId.asInt() - 1, d.asString());
+ else
+ warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
break;
case kTheScript:
- setTheEntitySTUB(kTheScript);
+ warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
break;
default:
warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
More information about the Scummvm-git-logs
mailing list