aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/cursor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/agos/cursor.cpp')
-rw-r--r--engines/agos/cursor.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/engines/agos/cursor.cpp b/engines/agos/cursor.cpp
index 012308b3a4..5c97d008b9 100644
--- a/engines/agos/cursor.cpp
+++ b/engines/agos/cursor.cpp
@@ -344,6 +344,13 @@ void AGOSEngine::handleMouseMoved() {
resetVerbs();
}
+ if (_leftButton == 0) {
+ if (_dragMode != 0) {
+ _dragEnd = 1;
+ }
+ _dragCount = 0;
+ }
+
if (getGameType() == GType_FF) {
if (getBitFlag(99)) { // Oracle
if (_mouseX >= 10 && _mouseX <= 635 && _mouseY >= 5 && _mouseY <= 475) {
@@ -398,6 +405,29 @@ void AGOSEngine::handleMouseMoved() {
if (_mouseX != _mouseXOld || _mouseY != _mouseYOld)
_needHitAreaRecalc++;
+ if (_leftButtonOld == 0 && _leftButtonCount != 0) {
+ _lastClickRem = 0;
+ boxController(_mouseX, _mouseY, 3);
+ }
+ _leftButtonOld = _leftButton;
+
+ if (_dragMode != 0 || _lastHitArea3 != 0) {
+ x = 0;
+ if (_needHitAreaRecalc == 0)
+ goto get_out;
+ else
+ goto boxstuff;
+ }
+
+ if (_leftButton != 0 && _dragAccept != 0 && _lastClickRem != NULL) {
+ _dragCount++;
+ if (_dragCount == 2) {
+ _dragMode = 1;
+ _dragFlag = 1;
+ _needHitAreaRecalc++;
+ }
+ }
+
x = 0;
if (_lastHitArea3 == 0 && _leftButtonDown != 0) {
if (getGameType() == GType_PP)
@@ -413,6 +443,7 @@ void AGOSEngine::handleMouseMoved() {
goto get_out;
}
+boxstuff:
boxController(_mouseX, _mouseY, x);
_lastHitArea3 = _lastHitArea;
if (x == 1 && _lastHitArea == NULL)
@@ -483,6 +514,9 @@ void AGOSEngine::drawMousePointer() {
memset(_mouseData, 0xFF, _maxCursorWidth * _maxCursorHeight);
uint cursor = (_mouseCursor == 0) ? _mouseCursor : _mouseCursor - 1;
+ if (_dragFlag != 0)
+ cursor = 1;
+
src = _common_cursors[cursor];
for (i = 0; i < 16; i++) {