mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
e8abb98858
Thanks Ryan for the updated patch/ As Ryan pointed out. Mount & Blade II requires that last point to be different from the point or else it cannot workout what direction the mouse moved. This would need some sort of server side cache of mouse movements which this function could ask for.
75 lines
2.3 KiB
Diff
75 lines
2.3 KiB
Diff
From 9df9c77fe5f5fef1e22cf46e780de5eca8ffd274 Mon Sep 17 00:00:00 2001
|
|
From: "Ryan S. Northrup (RyNo)" <northrup@yellowapple.us>
|
|
Date: Wed, 1 Apr 2020 19:59:53 -0700
|
|
Subject: [PATCH v2] user32: Semi-stub GetMouseMovePointsEx
|
|
|
|
---
|
|
dlls/user32/input.c | 43 +++++++++++++++++++++++++++++++++++++++----
|
|
1 file changed, 39 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
|
|
index 0325e2ce3d..bf029093bf 100644
|
|
--- a/dlls/user32/input.c
|
|
+++ b/dlls/user32/input.c
|
|
@@ -1268,7 +1268,12 @@ TrackMouseEvent (TRACKMOUSEEVENT *ptme)
|
|
* Success: count of point set in the buffer
|
|
* Failure: -1
|
|
*/
|
|
-int WINAPI GetMouseMovePointsEx(UINT size, LPMOUSEMOVEPOINT ptin, LPMOUSEMOVEPOINT ptout, int count, DWORD res) {
|
|
+int WINAPI GetMouseMovePointsEx(UINT size, LPMOUSEMOVEPOINT ptin, LPMOUSEMOVEPOINT ptout, int count, DWORD res)
|
|
+{
|
|
+ POINT pos;
|
|
+ static BOOL once;
|
|
+ static INT last_x = 0;
|
|
+ static INT last_y = 0;
|
|
|
|
if((size != sizeof(MOUSEMOVEPOINT)) || (count < 0) || (count > 64)) {
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
@@ -1280,10 +1285,40 @@ int WINAPI GetMouseMovePointsEx(UINT size, LPMOUSEMOVEPOINT ptin, LPMOUSEMOVEPOI
|
|
return -1;
|
|
}
|
|
|
|
- FIXME("(%d %p %p %d %d) stub\n", size, ptin, ptout, count, res);
|
|
+ if (!once++)
|
|
+ FIXME("(%d %p %p %d %d) semi-stub\n", size, ptin, ptout, count, res);
|
|
+ else
|
|
+ TRACE("(%d %p %p %d %d) semi-stub\n", size, ptin, ptout, count, res);
|
|
+
|
|
+ TRACE(" ptin: %d %d\n", ptin->x, ptin->y);
|
|
+
|
|
+ if (res == GMMP_USE_HIGH_RESOLUTION_POINTS)
|
|
+ {
|
|
+ WARN("GMMP_USE_HIGH_RESOLUTION_POINTS not supported");
|
|
+ SetLastError(ERROR_POINT_NOT_FOUND);
|
|
+ return -1;
|
|
+ }
|
|
|
|
- SetLastError(ERROR_POINT_NOT_FOUND);
|
|
- return -1;
|
|
+ GetCursorPos(&pos);
|
|
+
|
|
+ ptout[0].x = pos.x;
|
|
+ ptout[0].y = pos.y;
|
|
+ ptout[0].time = GetTickCount();
|
|
+ ptout[0].dwExtraInfo = 0;
|
|
+ TRACE(" ptout[0]: %d %d\n", pos.x, pos.y);
|
|
+
|
|
+ if (count > 1) {
|
|
+ ptout[1].x = last_x;
|
|
+ ptout[1].y = last_y;
|
|
+ ptout[1].time = GetTickCount();
|
|
+ ptout[1].dwExtraInfo = 0;
|
|
+ TRACE(" ptout[1]: %d %d\n", last_x, last_y);
|
|
+ }
|
|
+
|
|
+ last_x = pos.x;
|
|
+ last_y = pos.y;
|
|
+
|
|
+ return count > 1 ? 2 : 1;
|
|
}
|
|
|
|
/***********************************************************************
|
|
--
|
|
2.24.1
|
|
|