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; | ||
|  | } |