forked from LeenkxTeam/LNXSDK
53 lines
1.1 KiB
C
53 lines
1.1 KiB
C
#include <kinc/backend/Windows.h>
|
|
#include <kinc/system.h>
|
|
#include <kinc/window.h>
|
|
|
|
#include <kinc/input/mouse.h>
|
|
|
|
void kinc_internal_mouse_lock(int window) {
|
|
kinc_mouse_hide();
|
|
HWND handle = kinc_windows_window_handle(window);
|
|
SetCapture(handle);
|
|
RECT rect;
|
|
GetWindowRect(handle, &rect);
|
|
ClipCursor(&rect);
|
|
}
|
|
|
|
void kinc_internal_mouse_unlock(void) {
|
|
kinc_mouse_show();
|
|
ReleaseCapture();
|
|
ClipCursor(NULL);
|
|
}
|
|
|
|
bool kinc_mouse_can_lock(void) {
|
|
return true;
|
|
}
|
|
|
|
void kinc_mouse_show() {
|
|
// Work around the internal counter of ShowCursor
|
|
while (ShowCursor(true) < 0) {
|
|
}
|
|
}
|
|
|
|
void kinc_mouse_hide() {
|
|
// Work around the internal counter of ShowCursor
|
|
while (ShowCursor(false) >= 0) {
|
|
}
|
|
}
|
|
|
|
void kinc_mouse_set_position(int window, int x, int y) {
|
|
POINT point;
|
|
point.x = x;
|
|
point.y = y;
|
|
ClientToScreen(kinc_windows_window_handle(window), &point);
|
|
SetCursorPos(point.x, point.y);
|
|
}
|
|
|
|
void kinc_mouse_get_position(int window, int *x, int *y) {
|
|
POINT point;
|
|
GetCursorPos(&point);
|
|
ScreenToClient(kinc_windows_window_handle(window), &point);
|
|
*x = point.x;
|
|
*y = point.y;
|
|
}
|