mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-18 03:55:19 -04:00
experimental raw mouse movement on windows
This commit is contained in:
parent
cea7f095bb
commit
696c86cf5c
49
src/Window.c
49
src/Window.c
@ -115,6 +115,7 @@ void GraphicsMode_MakeDefault(struct GraphicsMode* m) {
|
|||||||
#define WM_XBUTTONDOWN 0x020B
|
#define WM_XBUTTONDOWN 0x020B
|
||||||
#define WM_XBUTTONUP 0x020C
|
#define WM_XBUTTONUP 0x020C
|
||||||
#endif
|
#endif
|
||||||
|
static bool rawMouseInited, rawMouseEnabled;
|
||||||
|
|
||||||
static HINSTANCE win_instance;
|
static HINSTANCE win_instance;
|
||||||
static HWND win_handle;
|
static HWND win_handle;
|
||||||
@ -330,6 +331,30 @@ static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wPara
|
|||||||
Key_SetPressed(HIWORD(wParam) == 1 ? KEY_XBUTTON1 : KEY_XBUTTON2, false);
|
Key_SetPressed(HIWORD(wParam) == 1 ? KEY_XBUTTON1 : KEY_XBUTTON2, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_INPUT:
|
||||||
|
{
|
||||||
|
RAWINPUT raw;
|
||||||
|
UINT rawSize = sizeof(RAWINPUT);
|
||||||
|
int dx, dy;
|
||||||
|
|
||||||
|
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, &raw, &rawSize, sizeof(RAWINPUTHEADER));
|
||||||
|
if (raw.header.dwType != RIM_TYPEMOUSE) break;
|
||||||
|
|
||||||
|
if (raw.data.mouse.usFlags == MOUSE_MOVE_RELATIVE) {
|
||||||
|
dx = raw.data.mouse.lLastX;
|
||||||
|
dy = raw.data.mouse.lLastY;
|
||||||
|
} else if (raw.data.mouse.usFlags == MOUSE_MOVE_ABSOLUTE) {
|
||||||
|
static Point2D prevPos;
|
||||||
|
dx = raw.data.mouse.lLastX - prevPos.X;
|
||||||
|
dy = raw.data.mouse.lLastY - prevPos.Y;
|
||||||
|
|
||||||
|
prevPos.X = raw.data.mouse.lLastX;
|
||||||
|
prevPos.Y = raw.data.mouse.lLastY;
|
||||||
|
} else { break; }
|
||||||
|
|
||||||
|
if (rawMouseEnabled) Event_RaiseMouseMove(&MouseEvents.RawMoved, dx, dy);
|
||||||
|
} break;
|
||||||
|
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
@ -658,9 +683,26 @@ void Window_DrawRaw(Rect2D r) {
|
|||||||
SelectObject(draw_DC, oldSrc);
|
SelectObject(draw_DC, oldSrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window_EnableRawMouse(void) { Window_DefaultEnableRawMouse(); }
|
void Window_EnableRawMouse(void) {
|
||||||
void Window_UpdateRawMouse(void) { Window_DefaultUpdateRawMouse(); }
|
RAWINPUTDEVICE rid;
|
||||||
void Window_DisableRawMouse(void) { Window_DefaultDisableRawMouse(); }
|
rawMouseEnabled = true;
|
||||||
|
Window_DefaultEnableRawMouse();
|
||||||
|
|
||||||
|
if (rawMouseInited) return;
|
||||||
|
rawMouseInited = true;
|
||||||
|
|
||||||
|
rid.usUsagePage = 1; /* HID_USAGE_PAGE_GENERIC; */
|
||||||
|
rid.usUsage = 2; /* HID_USAGE_GENERIC_MOUSE; */
|
||||||
|
rid.dwFlags = RIDEV_INPUTSINK;
|
||||||
|
rid.hwndTarget = win_handle;
|
||||||
|
RegisterRawInputDevices(&rid, 1, sizeof(rid));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window_UpdateRawMouse(void) { Window_CentreMousePosition(); }
|
||||||
|
void Window_DisableRawMouse(void) {
|
||||||
|
rawMouseEnabled = false;
|
||||||
|
Window_DefaultDisableRawMouse();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -2778,6 +2820,7 @@ void Window_Init(void) {
|
|||||||
if (window.cc_copyText) {
|
if (window.cc_copyText) {
|
||||||
e.clipboardData.setData('text/plain', window.cc_copyText);
|
e.clipboardData.setData('text/plain', window.cc_copyText);
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
window.cc_copyText = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user