mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-10 06:53:03 +00:00
Merge pull request #1982 from Lperlind/staging/raw_windows_input
Add much of Win32's Raw Input API
This commit is contained in:
@@ -190,6 +190,14 @@ foreign user32 {
|
||||
SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL ---
|
||||
CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||
EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL ---
|
||||
|
||||
DefRawInputProc :: proc(paRawInput: ^PRAWINPUT, nInput: INT, cbSizeHeader: UINT) -> LRESULT ---
|
||||
GetRawInputBuffer :: proc(pRawInput: PRAWINPUT, pcbSize: PUINT, cbSizeHeader: UINT) -> UINT ---
|
||||
GetRawInputData :: proc(hRawInput: HRAWINPUT, uiCommand: UINT, pData: LPVOID, pcbSize: PUINT, cbSizeHeader: UINT) -> UINT ---
|
||||
GetRawInputDeviceInfoW :: proc(hDevice: HANDLE, uiCommand: UINT, pData: LPVOID, pcbSize: PUINT) -> UINT ---
|
||||
GetRawInputDeviceList :: proc(pRawInputDeviceList: PRAWINPUTDEVICELIST, puiNumDevices: PUINT, cbSize: UINT) -> UINT ---
|
||||
GetRegisteredRawInputDevices :: proc(pRawInputDevices: PRAWINPUTDEVICE, puiNumDevices: PUINT, cbSize: UINT) -> UINT ---
|
||||
RegisterRawInputDevices :: proc(pRawInputDevices: PCRAWINPUTDEVICE, uiNumDevices: UINT, cbSize: UINT) -> BOOL ---
|
||||
}
|
||||
|
||||
CreateWindowW :: #force_inline proc "stdcall" (
|
||||
@@ -277,3 +285,146 @@ DPI_AWARENESS_CONTEXT_SYSTEM_AWARE :: DPI_AWARENESS_CONTEXT(~uintptr(1))
|
||||
DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE :: DPI_AWARENESS_CONTEXT(~uintptr(2)) // -3
|
||||
DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 :: DPI_AWARENESS_CONTEXT(~uintptr(3)) // -4
|
||||
DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED :: DPI_AWARENESS_CONTEXT(~uintptr(4)) // -5
|
||||
|
||||
RAWINPUTHEADER :: struct {
|
||||
dwType: DWORD,
|
||||
dwSize: DWORD,
|
||||
hDevice: HANDLE,
|
||||
wParam: WPARAM,
|
||||
}
|
||||
|
||||
RAWHID :: struct {
|
||||
dwSizeHid: DWORD,
|
||||
dwCount: DWORD,
|
||||
bRawData: [1]BYTE,
|
||||
}
|
||||
|
||||
RAWMOUSE :: struct {
|
||||
usFlags: USHORT,
|
||||
DUMMYUNIONNAME: struct #raw_union {
|
||||
ulButtons: ULONG,
|
||||
DUMMYSTRUCTNAME: struct {
|
||||
usButtonFlags: USHORT,
|
||||
usButtonData: USHORT,
|
||||
},
|
||||
},
|
||||
ulRawButtons: ULONG,
|
||||
lLastX: LONG,
|
||||
lLastY: LONG,
|
||||
ulExtraInformation: ULONG,
|
||||
}
|
||||
|
||||
RAWKEYBOARD :: struct {
|
||||
MakeCode: USHORT,
|
||||
Flags: USHORT,
|
||||
Rserved: USHORT,
|
||||
VKey: USHORT,
|
||||
Message: UINT,
|
||||
ExtraInformation: ULONG,
|
||||
}
|
||||
|
||||
RAWINPUT :: struct {
|
||||
header: RAWINPUTHEADER,
|
||||
data: struct #raw_union {
|
||||
mouse: RAWMOUSE,
|
||||
keyboard: RAWKEYBOARD,
|
||||
hid: RAWHID,
|
||||
},
|
||||
}
|
||||
|
||||
PRAWINPUT :: ^RAWINPUT
|
||||
HRAWINPUT :: distinct LPARAM
|
||||
|
||||
RAWINPUTDEVICE :: struct {
|
||||
usUsagePage: USHORT,
|
||||
usUsage: USHORT,
|
||||
dwFlags: DWORD,
|
||||
hwndTarget: HWND,
|
||||
}
|
||||
|
||||
PRAWINPUTDEVICE :: ^RAWINPUTDEVICE
|
||||
PCRAWINPUTDEVICE :: PRAWINPUTDEVICE
|
||||
|
||||
RAWINPUTDEVICELIST :: struct {
|
||||
hDevice: HANDLE,
|
||||
dwType: DWORD,
|
||||
}
|
||||
|
||||
PRAWINPUTDEVICELIST :: ^RAWINPUTDEVICELIST
|
||||
|
||||
RID_DEVICE_INFO_HID :: struct {
|
||||
dwVendorId: DWORD,
|
||||
dwProductId: DWORD,
|
||||
dwVersionNumber: DWORD,
|
||||
usUsagePage: USHORT,
|
||||
usUsage: USHORT,
|
||||
}
|
||||
|
||||
RID_DEVICE_INFO_KEYBOARD :: struct {
|
||||
dwType: DWORD,
|
||||
dwSubType: DWORD,
|
||||
dwKeyboardMode: DWORD,
|
||||
dwNumberOfFunctionKeys: DWORD,
|
||||
dwNumberOfIndicators: DWORD,
|
||||
dwNumberOfKeysTotal: DWORD,
|
||||
}
|
||||
|
||||
RID_DEVICE_INFO_MOUSE :: struct {
|
||||
dwId: DWORD,
|
||||
dwNumberOfButtons: DWORD,
|
||||
dwSampleRate: DWORD,
|
||||
fHasHorizontalWheel: BOOL,
|
||||
}
|
||||
|
||||
RID_DEVICE_INFO :: struct {
|
||||
cbSize: DWORD,
|
||||
dwType: DWORD,
|
||||
DUMMYUNIONNAME: struct #raw_union {
|
||||
mouse: RID_DEVICE_INFO_MOUSE,
|
||||
keyboard: RID_DEVICE_INFO_KEYBOARD,
|
||||
hid: RID_DEVICE_INFO_HID,
|
||||
},
|
||||
}
|
||||
|
||||
RIDEV_REMOVE :: 0x00000001
|
||||
RIDEV_EXCLUDE :: 0x00000010
|
||||
RIDEV_PAGEONLY :: 0x00000020
|
||||
RIDEV_NOLEGACY :: 0x00000030
|
||||
RIDEV_INPUTSINK :: 0x00000100
|
||||
RIDEV_CAPTUREMOUSE :: 0x00000200
|
||||
RIDEV_NOHOTKEYS :: 0x00000200
|
||||
RIDEV_APPKEYS :: 0x00000400
|
||||
RIDEV_EXINPUTSINK :: 0x00001000
|
||||
RIDEV_DEVNOTIFY :: 0x00002000
|
||||
|
||||
RID_HEADER :: 0x10000005
|
||||
RID_INPUT :: 0x10000003
|
||||
|
||||
RIM_TYPEMOUSE :: 0
|
||||
RIM_TYPEKEYBOARD :: 1
|
||||
RIM_TYPEHID :: 2
|
||||
|
||||
MOUSE_MOVE_RELATIVE :: 0x00
|
||||
MOUSE_MOVE_ABSOLUTE :: 0x01
|
||||
MOUSE_VIRTUAL_DESKTOP :: 0x02
|
||||
MOUSE_ATTRIUBTTES_CHANGED :: 0x04
|
||||
MOUSE_MOVE_NOCOALESCE :: 0x08
|
||||
|
||||
RI_MOUSE_BUTTON_1_DOWN :: 0x0001
|
||||
RI_MOUSE_LEFT_BUTTON_DOWNS :: RI_MOUSE_BUTTON_1_DOWN
|
||||
RI_MOUSE_BUTTON_1_UP :: 0x0002
|
||||
RI_MOUSE_LEFT_BUTTON_UP :: RI_MOUSE_BUTTON_1_UP
|
||||
RI_MOUSE_BUTTON_2_DOWN :: 0x0004
|
||||
RI_MOUSE_RIGHT_BUTTON_DOWN :: RI_MOUSE_BUTTON_2_DOWN
|
||||
RI_MOUSE_BUTTON_2_UP :: 0x0008
|
||||
RI_MOUSE_RIGHT_BUTTON_UP :: RI_MOUSE_BUTTON_2_UP
|
||||
RI_MOUSE_BUTTON_3_DOWN :: 0x0010
|
||||
RI_MOUSE_MIDDLE_BUTTON_DOWN :: RI_MOUSE_BUTTON_3_DOWN
|
||||
RI_MOUSE_BUTTON_3_UP :: 0x0020
|
||||
RI_MOUSE_MIDDLE_BUTTON_UP :: RI_MOUSE_BUTTON_3_UP
|
||||
RI_MOUSE_BUTTON_4_DOWN :: 0x0040
|
||||
RI_MOUSE_BUTTON_4_UP :: 0x0080
|
||||
RI_MOUSE_BUTTON_5_DOWN :: 0x0100
|
||||
RI_MOUSE_BUTTON_5_UP :: 0x0200
|
||||
RI_MOUSE_WHEEL :: 0x0400
|
||||
RI_MOUSE_HWHEEL :: 0x0800
|
||||
|
||||
Reference in New Issue
Block a user