diff options
Diffstat (limited to 'engines/sci/gui/gui.cpp')
-rw-r--r-- | engines/sci/gui/gui.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/engines/sci/gui/gui.cpp b/engines/sci/gui/gui.cpp index 6180a4a6d7..50c0298d11 100644 --- a/engines/sci/gui/gui.cpp +++ b/engines/sci/gui/gui.cpp @@ -403,7 +403,7 @@ void SciGui::setNowSeen(reg_t objectReference) { _gfx->SetNowSeen(objectReference); } -void SciGui::moveCursor(int16 x, int16 y) { +void SciGui::moveCursor(int16 x, int16 y, int16 scaleFactor) { Common::Point newPos; x += _windowMgr->_picWind->rect.left; @@ -411,7 +411,16 @@ void SciGui::moveCursor(int16 x, int16 y) { newPos.x = CLIP<int16>(x, _windowMgr->_picWind->rect.left, _windowMgr->_picWind->rect.right - 1); newPos.y = CLIP<int16>(y, _windowMgr->_picWind->rect.top, _windowMgr->_picWind->rect.bottom - 1); - gfxop_set_pointer_position(_s->gfx_state, newPos); + if (x > _screen->_width || y > _screen->_height) { + debug("[GFX] Attempt to place pointer at invalid coordinates (%d, %d)\n", x, y); + return; // Not fatal + } + + g_system->warpMouse(x * scaleFactor, y * scaleFactor); + + // Trigger event reading to make sure the mouse coordinates will + // actually have changed the next time we read them. + gfxop_get_event(_s->gfx_state, SCI_EVT_PEEK); } } // End of namespace Sci |