[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