[Scummvm-git-logs] scummvm master -> ab1e526c1ec2ca4533c83fcb81e54ac5a8781b5f
ysj1173886760
42030331+ysj1173886760 at users.noreply.github.com
Fri Jul 30 08:38:51 UTC 2021
This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
99447ca832 GRAPHICS: MACGUI: implement getting member of menuItem
0bc678e47b DIRECTOR: implement getTheMenuItemEntity
a33ca9d831 DIRECTOR: amend coding format
b1f5de3501 GRAPHICS: MACGUI: implement mouseChar
928e76538f DIRECTOR: implement getting the MouseChar
87cd99126a GRAPHICS: MACGUI: implement getMouseWord
ab1e526c1e DIRECTOR: implement getting the MouseWord
Commit: 99447ca832cbf482c7c0bc8d880474441557ead0
https://github.com/scummvm/scummvm/commit/99447ca832cbf482c7c0bc8d880474441557ead0
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-30T15:43:00+08:00
Commit Message:
GRAPHICS: MACGUI: implement getting member 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 65a9e2f09f..05f5b95374 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -556,6 +556,55 @@ void MacMenu::setAction(int menuId, int itemId, int actionId) {
}
}
+bool MacMenu::getCheckMark(int menuId, int itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ // if item doesn't exist, this will be warned at findMenuItem
+ return item ? item->checked : false;
+}
+
+bool MacMenu::getCheckMark(const Common::String &menuId, const Common::String &itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ return item ? item->checked : false;
+}
+
+bool MacMenu::getEnabled(int menuId, int itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ return item ? item->enabled : false;
+}
+
+bool MacMenu::getEnabled(const Common::String &menuId, const Common::String &itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ return item ? item->enabled : false;
+}
+
+Common::String MacMenu::getName(int menuId, int itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ return item ? item->text : Common::String();
+}
+
+Common::String MacMenu::getName(const Common::String &menuId, const Common::String &itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ return item ? item->text : Common::String();
+}
+
+int MacMenu::getAction(int menuId, int itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ return item ? item->action : 0;
+}
+
+int MacMenu::getAction(const Common::String &menuId, const Common::String &itemId) {
+ MacMenuItem *item = findMenuItem(menuId, itemId);
+
+ return item ? item->action : 0;
+}
+
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 16900fc605..3c7cb58367 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -97,14 +97,26 @@ public:
bool checkIntersects(Common::Rect &rect);
+ // macmenuItem operations
void setCheckMark(const Common::String &menuId, const Common::String &itemId, bool checkMark);
void setCheckMark(int menuId, int itemId, bool checkMark);
+ bool getCheckMark(const Common::String &menuId, const Common::String &itemId);
+ bool getCheckMark(int menuId, int itemId);
+
void setEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
void setEnabled(int menuId, int itemId, bool enabled);
+ bool getEnabled(const Common::String &menuId, const Common::String &itemId);
+ bool getEnabled(int menuId, int itemId);
+
void setName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
void setName(int menuId, int itemId, const Common::String &name);
+ Common::String getName(const Common::String &menuId, const Common::String &itemId);
+ Common::String getName(int menuId, int itemId);
+
void setAction(const Common::String &menuId, const Common::String &itemId, int actionId);
void setAction(int menuId, int itemId, int actionId);
+ int getAction(const Common::String &menuId, const Common::String &itemId);
+ int getAction(int menuId, int itemId);
Common::Rect _bbox;
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index fc26839637..dd5c060978 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -490,6 +490,78 @@ void MacWindowManager::setMenuItemAction(int menuId, int itemId, int actionId) {
}
}
+bool MacWindowManager::getMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId) {
+ if (_menu) {
+ return _menu->getCheckMark(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemCheckMark: wm doesn't have menu");
+ return false;
+ }
+}
+
+bool MacWindowManager::getMenuItemCheckMark(int menuId, int itemId) {
+ if (_menu) {
+ return _menu->getCheckMark(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemCheckMark: wm doesn't have menu");
+ return false;
+ }
+}
+
+bool MacWindowManager::getMenuItemEnabled(const Common::String &menuId, const Common::String &itemId) {
+ if (_menu) {
+ return _menu->getEnabled(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemEnabled: wm doesn't have menu");
+ return false;
+ }
+}
+
+bool MacWindowManager::getMenuItemEnabled(int menuId, int itemId) {
+ if (_menu) {
+ return _menu->getEnabled(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemEnabled: wm doesn't have menu");
+ return false;
+ }
+}
+
+Common::String MacWindowManager::getMenuItemName(const Common::String &menuId, const Common::String &itemId) {
+ if (_menu) {
+ return _menu->getName(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemName: wm doesn't have menu");
+ return Common::String();
+ }
+}
+
+Common::String MacWindowManager::getMenuItemName(int menuId, int itemId) {
+ if (_menu) {
+ return _menu->getName(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemName: wm doesn't have menu");
+ return Common::String();
+ }
+}
+
+int MacWindowManager::getMenuItemAction(const Common::String &menuId, const Common::String &itemId) {
+ if (_menu) {
+ return _menu->getAction(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemAction: wm doesn't have menu");
+ return 0;
+ }
+}
+
+int MacWindowManager::getMenuItemAction(int menuId, int itemId) {
+ if (_menu) {
+ return _menu->getAction(menuId, itemId);
+ } else {
+ warning("MacWindowManager::getMenuItemAction: wm doesn't have menu");
+ return 0;
+ }
+}
+
// 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 9eaac3d0be..80c6c1117d 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -335,14 +335,23 @@ 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);
- void setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
void setMenuItemCheckMark(int menuId, int itemId, bool checkMark);
+ void setMenuItemEnabled(const Common::String &menuId, const Common::String &itemId, bool enabled);
void setMenuItemEnabled(int menuId, int itemId, bool enabled);
+ void setMenuItemName(const Common::String &menuId, const Common::String &itemId, const Common::String &name);
void setMenuItemName(int menuId, int itemId, const Common::String &name);
void setMenuItemAction(const Common::String &menuId, const Common::String &itemId, int actionId);
void setMenuItemAction(int menuId, int itemId, int actionId);
+ bool getMenuItemCheckMark(const Common::String &menuId, const Common::String &itemId);
+ bool getMenuItemCheckMark(int menuId, int itemId);
+ bool getMenuItemEnabled(const Common::String &menuId, const Common::String &itemId);
+ bool getMenuItemEnabled(int menuId, int itemId);
+ Common::String getMenuItemName(const Common::String &menuId, const Common::String &itemId);
+ Common::String getMenuItemName(int menuId, int itemId);
+ int getMenuItemAction(const Common::String &menuId, const Common::String &itemId);
+ int getMenuItemAction(int menuId, int itemId);
+
public:
MacFontManager *_fontMan;
uint32 _mode;
Commit: 0bc678e47b71ec7f27167002e417d3546068ea47
https://github.com/scummvm/scummvm/commit/0bc678e47b71ec7f27167002e417d3546068ea47
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-30T15:43:16+08:00
Commit Message:
DIRECTOR: implement getTheMenuItemEntity
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 5e2994938c..e6aacdbd99 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1100,10 +1100,57 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
}
Datum Lingo::getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId) {
- warning("STUB: getTheMenuItemEntity(%s, %s, %s, %s)", entity2str(entity), menuId.asString(true).c_str(), field2str(field),
- menuItemId.asString(true).c_str());
+ Datum d;
- return Datum();
+ switch(field) {
+ case kTheCheckMark:
+ if (menuId.type == STRING && menuItemId.type == STRING) {
+ d.type = INT;
+ d.u.i = g_director->_wm->getMenuItemCheckMark(menuId.asString(), menuItemId.asString());
+ } else if (menuId.type == INT && menuItemId.type == INT) {
+ d.type = INT;
+ d.u.i = g_director->_wm->getMenuItemCheckMark(menuId.asInt(), menuItemId.asInt());
+ } else
+ warning("Lingo::getTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+ break;
+ case kTheEnabled:
+ if (menuId.type == STRING && menuItemId.type == STRING) {
+ d.type = INT;
+ d.u.i = g_director->_wm->getMenuItemEnabled(menuId.asString(), menuItemId.asString());
+ } else if (menuId.type == INT && menuItemId.type == INT) {
+ d.type = INT;
+ d.u.i = g_director->_wm->getMenuItemEnabled(menuId.asInt(), menuItemId.asInt());
+ } else
+ warning("Lingo::getTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+ break;
+ case kTheName:
+ if (menuId.type == STRING && menuItemId.type == STRING) {
+ d.type = STRING;
+ d.u.s = new Common::String;
+ *(d.u.s) = g_director->_wm->getMenuItemName(menuId.asString(), menuItemId.asString());
+ } else if (menuId.type == INT && menuItemId.type == INT) {
+ d.type = STRING;
+ d.u.s = new Common::String;
+ *(d.u.s) = g_director->_wm->getMenuItemName(menuId.asInt(), menuItemId.asInt());
+ } else
+ warning("Lingo::getTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+ break;
+ case kTheScript:
+ if (menuId.type == STRING && menuItemId.type == STRING) {
+ d.type = INT;
+ d.u.i = g_director->_wm->getMenuItemAction(menuId.asString(), menuItemId.asString());
+ } else if (menuId.type == INT && menuItemId.type == INT) {
+ d.type = INT;
+ d.u.i = g_director->_wm->getMenuItemAction(menuId.asInt(), menuItemId.asInt());
+ } else
+ warning("Lingo::getTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+ break;
+ default:
+ warning("Lingo::getTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+ break;
+ }
+
+ return d;
}
void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId, Datum &d) {
Commit: a33ca9d8316b5bf2cd40124b4f8aeddd2c3d9cfe
https://github.com/scummvm/scummvm/commit/a33ca9d8316b5bf2cd40124b4f8aeddd2c3d9cfe
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-30T16:00:01+08:00
Commit Message:
DIRECTOR: amend coding format
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 e6aacdbd99..68ccb19f99 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1154,10 +1154,6 @@ Datum Lingo::getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &m
}
void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId, Datum &d) {
- // only used in kTheScript
- LingoArchive *mainArchive = g_director->getCurrentMovie()->getMainLingoArch();
- int commandId = 100;
-
switch(field) {
case kTheCheckMark:
if (menuId.type == STRING && menuItemId.type == STRING)
@@ -1184,16 +1180,20 @@ void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &me
warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
break;
case kTheScript:
- while (mainArchive->getScriptContext(kEventScript, commandId))
- commandId++;
- mainArchive->addCode(d.asString(), kEventScript, commandId);
-
- if (menuId.type == STRING && menuItemId.type == STRING)
- g_director->_wm->setMenuItemAction(menuId.asString(), menuItemId.asString(), commandId);
- else if (menuId.type == INT && menuItemId.type == INT)
- g_director->_wm->setMenuItemAction(menuId.asInt() - 1, menuItemId.asInt() - 1, commandId);
- else
- warning("Lingo::setTheMenuItemEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
+ {
+ LingoArchive *mainArchive = g_director->getCurrentMovie()->getMainLingoArch();
+ int commandId = 100;
+ while (mainArchive->getScriptContext(kEventScript, commandId))
+ commandId++;
+ mainArchive->addCode(d.asString(), kEventScript, commandId);
+
+ if (menuId.type == STRING && menuItemId.type == STRING)
+ g_director->_wm->setMenuItemAction(menuId.asString(), menuItemId.asString(), commandId);
+ else if (menuId.type == INT && menuItemId.type == INT)
+ g_director->_wm->setMenuItemAction(menuId.asInt() - 1, menuItemId.asInt() - 1, commandId);
+ else
+ 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));
Commit: b1f5de35016a3a26494ba6886f6017144b450f84
https://github.com/scummvm/scummvm/commit/b1f5de35016a3a26494ba6886f6017144b450f84
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-30T16:25:51+08:00
Commit Message:
GRAPHICS: MACGUI: implement mouseChar
Changed paths:
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 01c4771e8f..789e8ed669 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -1884,6 +1884,24 @@ void MacText::updateTextSelection(int x, int y) {
_contentIsDirty = true;
}
+int MacText::getMouseChar(int x, int y) {
+ Common::Point offset = calculateOffset();
+ x -= getDimensions().left - offset.x;
+ y -= getDimensions().top - offset.y;
+
+ y += _scrollPos;
+ int dx, dy, row, col;
+
+ getRowCol(x, y, &dx, &dy, &row, &col);
+
+ int index = 0;
+ for (int r = 0; r < row; r++)
+ index += getLineCharWidth(r);
+
+ index += col;
+ return index + 1;
+}
+
int MacText::getAlignOffset(int row) {
int alignOffset = 0;
if (_textAlignment == kTextAlignRight)
@@ -1903,7 +1921,7 @@ void MacText::getRowCol(int x, int y, int *sx, int *sy, int *row, int *col) {
y = CLIP(y, 0, _textMaxHeight);
nrow = _textLines.size();
- // use [lb, ub) bsearch here, final anser would we lb
+ // use [lb, ub) bsearch here, final answer would be lb
int lb = 0, ub = nrow;
while (ub - lb > 1) {
int mid = (ub + lb) / 2;
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index fc1e9ce7e1..3a6ee2857f 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -212,6 +212,8 @@ public:
int getTextSlant(int start, int end);
void setTextSlant(int textSlant, int start, int end);
+ int getMouseChar(int x, int y);
+
private:
MacFontRun getTextChunks(int start, int end);
void setTextChunks(int start, int end, int param, void (*callback)(MacFontRun &, int));
Commit: 928e76538fabfbbb36e31f46c20b0c23644c362b
https://github.com/scummvm/scummvm/commit/928e76538fabfbbb36e31f46c20b0c23644c362b
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-30T16:26:36+08:00
Commit Message:
DIRECTOR: implement getting the MouseChar
Changed paths:
engines/director/channel.cpp
engines/director/channel.h
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 7ce2034d65..3d901ce8ec 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -608,6 +608,18 @@ void Channel::addDelta(Common::Point pos) {
_delta += pos;
}
+int Channel::getMouseChar(int x, int y) {
+ if (_sprite->_spriteType != kTextSprite)
+ return -1;
+
+ if (!_widget) {
+ warning("Channel::getMouseChar getting mouse char on a non-existing widget");
+ return -1;
+ }
+
+ return ((Graphics::MacText *)_widget)->getMouseChar(x, y);
+}
+
Common::Point Channel::getPosition() {
Common::Point res = _currentPoint;
addRegistrationOffset(res);
diff --git a/engines/director/channel.h b/engines/director/channel.h
index 557facf3b4..c07d5c5ee5 100644
--- a/engines/director/channel.h
+++ b/engines/director/channel.h
@@ -72,6 +72,8 @@ public:
bool canKeepWidget(CastMemberID castId);
bool canKeepWidget(Sprite *currentSprite, Sprite *nextSprite);
+ int getMouseChar(int x, int y);
+
public:
Sprite *_sprite;
Cursor _cursor;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 68ccb19f99..580213b765 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -608,7 +608,14 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
}
break;
case kTheMouseChar:
- getTheEntitySTUB(kTheMouseChar);
+ {
+ // maybe a better handling is iterate channels and check the text sprite that enclose the cursor
+ Common::Point pos = g_director->getCurrentWindow()->getMousePos();
+ uint16 spriteId = score->getSpriteIDFromPos(pos);
+ Channel *ch = score->getChannelById(spriteId);
+ d.u.i = ch->getMouseChar(pos.x, pos.y);
+ d.type = INT;
+ }
break;
case kTheMouseDown:
d.type = INT;
Commit: 87cd99126a2a7a07fb67b3f8b164bbd1173f7221
https://github.com/scummvm/scummvm/commit/87cd99126a2a7a07fb67b3f8b164bbd1173f7221
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-30T16:38:15+08:00
Commit Message:
GRAPHICS: MACGUI: implement getMouseWord
Changed paths:
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 789e8ed669..5e5f9ccfdb 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -1888,17 +1888,48 @@ int MacText::getMouseChar(int x, int y) {
Common::Point offset = calculateOffset();
x -= getDimensions().left - offset.x;
y -= getDimensions().top - offset.y;
-
y += _scrollPos;
- int dx, dy, row, col;
+ int dx, dy, row, col;
getRowCol(x, y, &dx, &dy, &row, &col);
int index = 0;
for (int r = 0; r < row; r++)
index += getLineCharWidth(r);
-
index += col;
+
+ return index + 1;
+}
+
+int MacText::getMouseWord(int x, int y) {
+ Common::Point offset = calculateOffset();
+ x -= getDimensions().left - offset.x;
+ y -= getDimensions().top - offset.y;
+ y += _scrollPos;
+
+ int dx, dy, row, col;
+ getRowCol(x, y, &dx, &dy, &row, &col);
+
+ int index = 0;
+ for (int i = 0; i < row; i++) {
+ for (uint j = 0; j < _textLines[i].chunks.size(); j++) {
+ if (_textLines[i].chunks[j].text.empty())
+ continue;
+ index++;
+ }
+ }
+
+ int cur = 0;
+ for (uint j = 0; j < _textLines[row].chunks.size(); j++) {
+ if (_textLines[row].chunks[j].text.empty())
+ continue;
+ cur += _textLines[row].chunks[j].text.size();
+ if (cur <= col)
+ index++;
+ else
+ break;
+ }
+
return index + 1;
}
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 3a6ee2857f..19b278b928 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -213,6 +213,7 @@ public:
void setTextSlant(int textSlant, int start, int end);
int getMouseChar(int x, int y);
+ int getMouseWord(int x, int y);
private:
MacFontRun getTextChunks(int start, int end);
Commit: ab1e526c1ec2ca4533c83fcb81e54ac5a8781b5f
https://github.com/scummvm/scummvm/commit/ab1e526c1ec2ca4533c83fcb81e54ac5a8781b5f
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-30T16:38:31+08:00
Commit Message:
DIRECTOR: implement getting the MouseWord
Changed paths:
engines/director/channel.cpp
engines/director/channel.h
engines/director/lingo/lingo-the.cpp
diff --git a/engines/director/channel.cpp b/engines/director/channel.cpp
index 3d901ce8ec..ef36130271 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -620,6 +620,18 @@ int Channel::getMouseChar(int x, int y) {
return ((Graphics::MacText *)_widget)->getMouseChar(x, y);
}
+int Channel::getMouseWord(int x, int y) {
+ if (_sprite->_spriteType != kTextSprite)
+ return -1;
+
+ if (!_widget) {
+ warning("Channel::getMouseWord getting mouse char on a non-existing widget");
+ return -1;
+ }
+
+ return ((Graphics::MacText *)_widget)->getMouseWord(x, y);
+}
+
Common::Point Channel::getPosition() {
Common::Point res = _currentPoint;
addRegistrationOffset(res);
diff --git a/engines/director/channel.h b/engines/director/channel.h
index c07d5c5ee5..d82e6a864b 100644
--- a/engines/director/channel.h
+++ b/engines/director/channel.h
@@ -73,6 +73,7 @@ public:
bool canKeepWidget(Sprite *currentSprite, Sprite *nextSprite);
int getMouseChar(int x, int y);
+ int getMouseWord(int x, int y);
public:
Sprite *_sprite;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 580213b765..656abd1cad 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -654,7 +654,14 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.u.i = g_director->getCurrentWindow()->getMousePos().y;
break;
case kTheMouseWord:
- getTheEntitySTUB(kTheMouseWord);
+ {
+ // same issue as MouseChar, check MouseChar above
+ Common::Point pos = g_director->getCurrentWindow()->getMousePos();
+ uint16 spriteId = score->getSpriteIDFromPos(pos);
+ Channel *ch = score->getChannelById(spriteId);
+ d.u.i = ch->getMouseWord(pos.x, pos.y);
+ d.type = INT;
+ }
break;
case kTheMovie:
case kTheMovieName:
More information about the Scummvm-git-logs
mailing list