Ver Fonte

rawinput code

Thomas la Cour há 1 ano atrás
pai
commit
a4eeb6ed02
2 ficheiros alterados com 26 adições e 2 exclusões
  1. 13 2
      core/sys/windows/user32.odin
  2. 13 0
      tests/core/sys/windows/test_user32.odin

+ 13 - 2
core/sys/windows/user32.odin

@@ -373,8 +373,9 @@ GET_XBUTTON_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> WORD
 	return HIWORD(cast(DWORD)wParam)
 	return HIWORD(cast(DWORD)wParam)
 }
 }
 
 
-GET_RAWINPUT_CODE_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> BYTE {
-	return BYTE(wParam) & 0xFF
+// Retrieves the input code from wParam in WM_INPUT message.
+GET_RAWINPUT_CODE_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> RAWINPUT_CODE {
+	return RAWINPUT_CODE(wParam & 0xFF)
 }
 }
 
 
 MAKEINTRESOURCEW :: #force_inline proc "contextless" (#any_int i: int) -> LPWSTR {
 MAKEINTRESOURCEW :: #force_inline proc "contextless" (#any_int i: int) -> LPWSTR {
@@ -398,6 +399,16 @@ DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE    :: DPI_AWARENESS_CONTEXT(~uintptr(2))
 DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 :: DPI_AWARENESS_CONTEXT(~uintptr(3)) // -4
 DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 :: DPI_AWARENESS_CONTEXT(~uintptr(3)) // -4
 DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED    :: DPI_AWARENESS_CONTEXT(~uintptr(4)) // -5
 DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED    :: DPI_AWARENESS_CONTEXT(~uintptr(4)) // -5
 
 
+RAWINPUT_CODE :: enum {
+	// The input is in the regular message flow,
+	// the app is required to call DefWindowProc
+	// so that the system can perform clean ups.
+	RIM_INPUT       = 0,
+	// The input is sink only. The app is expected
+	// to behave nicely.
+	RIM_INPUTSINK   = 1,
+}
+
 RAWINPUTHEADER :: struct {
 RAWINPUTHEADER :: struct {
 	dwType: DWORD,
 	dwType: DWORD,
 	dwSize: DWORD,
 	dwSize: DWORD,

+ 13 - 0
tests/core/sys/windows/test_user32.odin

@@ -0,0 +1,13 @@
+//+build windows
+package test_core_sys_windows
+
+import "core:testing"
+import win32 "core:sys/windows"
+
+@(test)
+verify_rawinput_code :: proc(t: ^testing.T) {
+	testing.expect_value(t, win32.GET_RAWINPUT_CODE_WPARAM(0), win32.RAWINPUT_CODE.RIM_INPUT)
+	testing.expect_value(t, win32.GET_RAWINPUT_CODE_WPARAM(1), win32.RAWINPUT_CODE.RIM_INPUTSINK)
+	testing.expect_value(t, win32.GET_RAWINPUT_CODE_WPARAM(0x100), win32.RAWINPUT_CODE.RIM_INPUT)
+	testing.expect_value(t, win32.GET_RAWINPUT_CODE_WPARAM(0x101), win32.RAWINPUT_CODE.RIM_INPUTSINK)
+}