mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-11 05:36:12 +00:00
TITANIC: Fix arrow movements ignoring restricted moves
This commit is contained in:
parent
e44c5bdcc6
commit
3a798b09be
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user