[Scummvm-git-logs] scummvm master -> 12dcfbfd72cebb05d29f40de0d04d0e485106610
ysj1173886760
42030331+ysj1173886760 at users.noreply.github.com
Sat Jul 31 07:56:55 UTC 2021
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:
9ba14cf696 GRAPHICS: MACGUI: implement getMouseWord
dd7a3bfc53 DIRECTOR: implement getting the mouseItem
b60bcbfef7 GRAPHICS: MACGUI: implement getMouseLine
12dcfbfd72 DIRECTOR: implement getting the mouseLine
Commit: 9ba14cf6968039178b7b65f488960f1e0e404571
https://github.com/scummvm/scummvm/commit/9ba14cf6968039178b7b65f488960f1e0e404571
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-31T15:46:50+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 5e5f9ccfdb..73a208f8d7 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -1933,6 +1933,45 @@ int MacText::getMouseWord(int x, int y) {
return index + 1;
}
+int MacText::getMouseItem(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;
+ if (_textLines[i].chunks[j].getEncodedText().contains(','))
+ index++;
+ }
+ }
+
+ int cur = 0;
+ for (uint i = 0; i < _textLines[row].chunks.size(); i++) {
+ if (_textLines[row].chunks[i].text.empty())
+ continue;
+
+ for (uint j = 0; j < _textLines[row].chunks[i].text.size(); j++) {
+ cur++;
+ if (cur > col)
+ break;
+ if (_textLines[row].chunks[i].text[j] == ',')
+ index++;
+ }
+
+ if (cur > col)
+ break;
+ }
+
+ return index + 1;
+}
+
int MacText::getAlignOffset(int row) {
int alignOffset = 0;
if (_textAlignment == kTextAlignRight)
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 19b278b928..5db3ec5440 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -212,8 +212,10 @@ public:
int getTextSlant(int start, int end);
void setTextSlant(int textSlant, int start, int end);
+ // director text related-functions
int getMouseChar(int x, int y);
int getMouseWord(int x, int y);
+ int getMouseItem(int x, int y);
private:
MacFontRun getTextChunks(int start, int end);
Commit: dd7a3bfc53c784d34522130ee3435190197e3517
https://github.com/scummvm/scummvm/commit/dd7a3bfc53c784d34522130ee3435190197e3517
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-31T15:47:07+08:00
Commit Message:
DIRECTOR: implement getting the mouseItem
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 ad5f73a1c8..3f7367fa55 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -632,13 +632,25 @@ int Channel::getMouseWord(int x, int y) {
return -1;
if (!_widget) {
- warning("Channel::getMouseWord getting mouse char on a non-existing widget");
+ warning("Channel::getMouseWord getting mouse word on a non-existing widget");
return -1;
}
return ((Graphics::MacText *)_widget)->getMouseWord(x, y);
}
+int Channel::getMouseItem(int x, int y) {
+ if (_sprite->_spriteType != kTextSprite)
+ return -1;
+
+ if (!_widget) {
+ warning("Channel::getMouseItem getting mouse item on a non-existing widget");
+ return -1;
+ }
+
+ return ((Graphics::MacText *)_widget)->getMouseItem(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 d82e6a864b..764ad84b38 100644
--- a/engines/director/channel.h
+++ b/engines/director/channel.h
@@ -74,6 +74,7 @@ public:
int getMouseChar(int x, int y);
int getMouseWord(int x, int y);
+ int getMouseItem(int x, int y);
public:
Sprite *_sprite;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 656abd1cad..9a0d48f9ea 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -633,7 +633,13 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.u.i = g_director->getCurrentWindow()->getMousePos().x;
break;
case kTheMouseItem:
- getTheEntitySTUB(kTheMouseItem);
+ {
+ Common::Point pos = g_director->getCurrentWindow()->getMousePos();
+ uint16 spriteId = score->getSpriteIDFromPos(pos);
+ Channel *ch = score->getChannelById(spriteId);
+ d.u.i = ch->getMouseItem(pos.x, pos.y);
+ d.type = INT;
+ }
break;
case kTheMouseLine:
getTheEntitySTUB(kTheMouseLine);
Commit: b60bcbfef732297db285fa98115158710b36f30c
https://github.com/scummvm/scummvm/commit/b60bcbfef732297db285fa98115158710b36f30c
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-31T15:52:41+08:00
Commit Message:
GRAPHICS: MACGUI: implement getMouseLine
Changed paths:
graphics/macgui/mactext.cpp
graphics/macgui/mactext.h
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 73a208f8d7..750522f964 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -1972,6 +1972,18 @@ int MacText::getMouseItem(int x, int y) {
return index + 1;
}
+int MacText::getMouseLine(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);
+
+ return row + 1;
+}
+
int MacText::getAlignOffset(int row) {
int alignOffset = 0;
if (_textAlignment == kTextAlignRight)
diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h
index 5db3ec5440..739fe58362 100644
--- a/graphics/macgui/mactext.h
+++ b/graphics/macgui/mactext.h
@@ -216,6 +216,7 @@ public:
int getMouseChar(int x, int y);
int getMouseWord(int x, int y);
int getMouseItem(int x, int y);
+ int getMouseLine(int x, int y);
private:
MacFontRun getTextChunks(int start, int end);
Commit: 12dcfbfd72cebb05d29f40de0d04d0e485106610
https://github.com/scummvm/scummvm/commit/12dcfbfd72cebb05d29f40de0d04d0e485106610
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-07-31T15:52:57+08:00
Commit Message:
DIRECTOR: implement getting the mouseLine
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 3f7367fa55..b91906c33d 100644
--- a/engines/director/channel.cpp
+++ b/engines/director/channel.cpp
@@ -651,6 +651,18 @@ int Channel::getMouseItem(int x, int y) {
return ((Graphics::MacText *)_widget)->getMouseItem(x, y);
}
+int Channel::getMouseLine(int x, int y) {
+ if (_sprite->_spriteType != kTextSprite)
+ return -1;
+
+ if (!_widget) {
+ warning("Channel::getMouseLine getting mouse line on a non-existing widget");
+ return -1;
+ }
+
+ return ((Graphics::MacText *)_widget)->getMouseLine(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 764ad84b38..d2fd981e8a 100644
--- a/engines/director/channel.h
+++ b/engines/director/channel.h
@@ -75,6 +75,7 @@ public:
int getMouseChar(int x, int y);
int getMouseWord(int x, int y);
int getMouseItem(int x, int y);
+ int getMouseLine(int x, int y);
public:
Sprite *_sprite;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 9a0d48f9ea..70568a28fb 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -642,7 +642,13 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
}
break;
case kTheMouseLine:
- getTheEntitySTUB(kTheMouseLine);
+ {
+ Common::Point pos = g_director->getCurrentWindow()->getMousePos();
+ uint16 spriteId = score->getSpriteIDFromPos(pos);
+ Channel *ch = score->getChannelById(spriteId);
+ d.u.i = ch->getMouseLine(pos.x, pos.y);
+ d.type = INT;
+ }
break;
case kTheMouseUp:
d.type = INT;
More information about the Scummvm-git-logs
mailing list