[Scummvm-git-logs] scummvm master -> 3a798b09bea2bd49536e061388ad58d5a6d0742c

dreammaster dreammaster at scummvm.org
Sat Aug 5 04:20:31 CEST 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3a798b09be TITANIC: Fix arrow movements ignoring restricted moves


Commit: 3a798b09bea2bd49536e061388ad58d5a6d0742c
    https://github.com/scummvm/scummvm/commit/3a798b09bea2bd49536e061388ad58d5a6d0742c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-08-04T22:20:25-04:00

Commit Message:
TITANIC: Fix arrow movements ignoring restricted moves

Changed paths:
    engines/titanic/core/view_item.cpp
    engines/titanic/core/view_item.h


diff --git a/engines/titanic/core/view_item.cpp b/engines/titanic/core/view_item.cpp
index 2b58516..5f51cfc 100644
--- a/engines/titanic/core/view_item.cpp
+++ b/engines/titanic/core/view_item.cpp
@@ -374,7 +374,7 @@ bool CViewItem::VirtualKeyCharMsg(CVirtualKeyCharMsg *msg) {
 		if (!link)
 			continue;
 		
-		CursorId c = link->_cursorId;
+		CursorId c = getLinkCursor(link);
 		if ((move == LEFT && c == CURSOR_MOVE_LEFT) ||
 			(move == RIGHT && c == CURSOR_MOVE_RIGHT) ||
 			(move == FORWARDS && (c == CURSOR_MOVE_FORWARD ||
@@ -390,4 +390,26 @@ bool CViewItem::VirtualKeyCharMsg(CVirtualKeyCharMsg *msg) {
 	return false;
 }
 
+CursorId CViewItem::getLinkCursor(CLinkItem *link) {
+	Common::Point pt(link->_bounds.left, link->_bounds.top);
+	Common::Array<CGameObject *> gameObjects;
+
+	// Scan for a restricted object covering the link
+	for (CTreeItem *treeItem = scan(this); treeItem; treeItem = treeItem->scan(this)) {
+		CGameObject *gameObject = dynamic_cast<CGameObject *>(treeItem);
+		if (gameObject) {
+			if (gameObject->checkPoint(pt, false, true))
+				gameObjects.push_back(gameObject);
+		}
+	}
+
+	for (int idx = (int)gameObjects.size() - 1; idx >= 0; --idx) {
+		if (gameObjects[idx]->_cursorId == CURSOR_INVALID)
+			return CURSOR_INVALID;
+	}
+
+	// No obscuring objects, so we're free to return the link's cursor
+	return link->_cursorId;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/core/view_item.h b/engines/titanic/core/view_item.h
index e18536d..d8ec3c1 100644
--- a/engines/titanic/core/view_item.h
+++ b/engines/titanic/core/view_item.h
@@ -54,6 +54,12 @@ private:
 	 * Handles mouse button up messages
 	 */
 	void handleButtonUpMsg(CMouseButtonUpMsg *msg);
+
+	/**
+	 * Gets the cursor for a link, taking into account any
+	 * "restricted" surface that may be covering it
+	 */
+	CursorId getLinkCursor(CLinkItem *link);
 protected:
 	int _field24;
 	CResourceKey _resourceKey;





More information about the Scummvm-git-logs mailing list