diff --git a/src/openrct2-ui/UiContext.cpp b/src/openrct2-ui/UiContext.cpp index ceea87cd9b..ca9267f0de 100644 --- a/src/openrct2-ui/UiContext.cpp +++ b/src/openrct2-ui/UiContext.cpp @@ -302,7 +302,6 @@ public: _cursorState.middle &= ~CURSOR_CHANGED; _cursorState.right &= ~CURSOR_CHANGED; _cursorState.old = 0; - _cursorState.touch = false; SDL_Event e; while (SDL_PollEvent(&e)) @@ -401,6 +400,7 @@ public: _cursorState.old = 2; break; } + _cursorState.touch = false; break; } case SDL_MOUSEBUTTONUP: @@ -427,6 +427,7 @@ public: _cursorState.old = 4; break; } + _cursorState.touch = false; break; } // Apple sends touchscreen events for trackpads, so ignore these events on macOS diff --git a/src/openrct2-ui/input/MouseInput.cpp b/src/openrct2-ui/input/MouseInput.cpp index 25663c5a2c..ba47847ee1 100644 --- a/src/openrct2-ui/input/MouseInput.cpp +++ b/src/openrct2-ui/input/MouseInput.cpp @@ -537,6 +537,7 @@ static void input_viewport_drag_continue() rct_viewport* viewport; context_get_cursor_position(&newDragX, &newDragY); + const CursorState* cursorState = context_get_cursor_state(); dx = newDragX - gInputDragLastX; dy = newDragY - gInputDragLastY; @@ -582,7 +583,15 @@ static void input_viewport_drag_continue() } } - context_set_cursor_position(gInputDragLastX, gInputDragLastY); + if (cursorState->touch) + { + gInputDragLastX = newDragX; + gInputDragLastY = newDragY; + } + else + { + context_set_cursor_position(gInputDragLastX, gInputDragLastY); + } } static void input_viewport_drag_end()