[d3d9] Update software cursor position using SetCursorPosition #4670
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #3020 on Windows as well.
Games relying on software cursors apparently also call SetCursorPosition on each frame, and since we call ::SetCursorPos(X, Y) when that happens, on native Windows that tends to cause some strange movement feedback for some reason when we later retrieve the cursor position before present, using ::GetCursorPos(). And, you guessed it, this works just fine in Wine...
Regardless, what seems to work just as fine both on Windows and Wine is simply using the coordinates passed by the application with SetCursorPosition calls instead of us getting the position of the win32 cursor before present.
The downside is that if any game expects software cursors to work without it calling SetCursorPosition on each frame, it will be very very disappointed now.
Needs a bit more testing to confirm the above doesn't happen in practice. For now it has been confirmed to work on Windows and Linux with Dungeon Siege 2 at least.