mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-02-18 09:51:50 +00:00
Windows XP raw input support (should fix rid#1217412?)
enhanced con_ocranaleds git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1120 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
ed8f285738
commit
0a25f2084f
9 changed files with 592 additions and 28 deletions
|
@ -401,10 +401,10 @@ void CL_SendConnectPacket (
|
||||||
clients = 1;
|
clients = 1;
|
||||||
if (cl_splitscreen.value)
|
if (cl_splitscreen.value)
|
||||||
{
|
{
|
||||||
if (adr.type == NA_LOOPBACK)
|
// if (adr.type == NA_LOOPBACK)
|
||||||
clients = cl_splitscreen.value+1;
|
clients = cl_splitscreen.value+1;
|
||||||
else
|
// else
|
||||||
Con_Printf("Split screens are still under development\n");
|
// Con_Printf("Split screens are still under development\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clients < 1)
|
if (clients < 1)
|
||||||
|
@ -3006,11 +3006,11 @@ void Host_Init (quakeparms_t *parms)
|
||||||
idroq_depth = COM_FDepthFile("video/idlogo.roq", true); //q2
|
idroq_depth = COM_FDepthFile("video/idlogo.roq", true); //q2
|
||||||
ol_depth = COM_FDepthFile("video/openinglogos.roq", true); //jk2
|
ol_depth = COM_FDepthFile("video/openinglogos.roq", true); //jk2
|
||||||
|
|
||||||
if (ol_depth <= idroq_depth || ol_depth <= idcin_depth)
|
if (ol_depth != 0x7fffffff && (ol_depth <= idroq_depth || ol_depth <= idcin_depth))
|
||||||
Media_PlayFilm("video/openinglogos.roq");
|
Media_PlayFilm("video/openinglogos.roq");
|
||||||
else if (idroq_depth <= idcin_depth)
|
else if (idroq_depth != 0x7fffffff && idroq_depth <= idcin_depth)
|
||||||
Media_PlayFilm("video/idlogo.roq");
|
Media_PlayFilm("video/idlogo.roq");
|
||||||
else if (idcin_depth)
|
else if (idcin_depth != 0x7fffffff)
|
||||||
Media_PlayFilm("video/idlog.cin");
|
Media_PlayFilm("video/idlog.cin");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1896,9 +1896,12 @@ void AddOcranaLEDsIndexed (qbyte *image, int h, int w)
|
||||||
int i, idx, x, y, rs;
|
int i, idx, x, y, rs;
|
||||||
int r, g, b, rd, gd, bd;
|
int r, g, b, rd, gd, bd;
|
||||||
|
|
||||||
|
// calc row size, character size
|
||||||
rs = w;
|
rs = w;
|
||||||
h /= 16;
|
h /= 16;
|
||||||
w /= 16;
|
w /= 16;
|
||||||
|
|
||||||
|
// generate palettes
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
// get palette
|
// get palette
|
||||||
|
@ -1917,14 +1920,25 @@ void AddOcranaLEDsIndexed (qbyte *image, int h, int w)
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate LED into image
|
// generate LED into image
|
||||||
|
b = (w * w + h * h) / 16;
|
||||||
|
if (b < 1)
|
||||||
|
b = 1;
|
||||||
|
rd = w + 1;
|
||||||
|
gd = h + 1;
|
||||||
|
|
||||||
point = image + (8 * rs * h) + ((6 + i) * w);
|
point = image + (8 * rs * h) + ((6 + i) * w);
|
||||||
for (y = 1; y <= h; y++)
|
for (y = 1; y <= h; y++)
|
||||||
{
|
{
|
||||||
for (x = 1; x <= w; x++)
|
for (x = 1; x <= w; x++)
|
||||||
{
|
{
|
||||||
idx = (8 * x * y) / ((w - 1) * (h - 1));
|
r = rd - (x*2); r *= r;
|
||||||
idx = bound(0, idx, 7);
|
g = gd - (y*2); g *= g;
|
||||||
*point++ = tridx[idx];
|
idx = (r + g) / b;
|
||||||
|
|
||||||
|
if (idx > 7)
|
||||||
|
*point++ = 0;
|
||||||
|
else
|
||||||
|
*point++ = tridx[idx];
|
||||||
}
|
}
|
||||||
point += rs - w;
|
point += rs - w;
|
||||||
}
|
}
|
||||||
|
|
119
engine/client/in_raw.h
Normal file
119
engine/client/in_raw.h
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
// Raw input includes
|
||||||
|
|
||||||
|
#ifndef RIM_TYPEMOUSE
|
||||||
|
#define WM_INPUT 255
|
||||||
|
|
||||||
|
#undef QS_INPUT
|
||||||
|
#define QS_RAWINPUT 1024
|
||||||
|
#define QS_INPUT 1031
|
||||||
|
|
||||||
|
#define RIM_INPUT 0x00000000
|
||||||
|
#define RIM_INPUTSINK 0x00000001
|
||||||
|
#define RIM_TYPEMOUSE 0x00000000
|
||||||
|
#define RIM_TYPEKEYBOARD 0x00000001
|
||||||
|
#define RIM_TYPEHID 0x00000002
|
||||||
|
#define MOUSE_MOVE_RELATIVE 0x00000000
|
||||||
|
#define MOUSE_MOVE_ABSOLUTE 0x00000001
|
||||||
|
#define MOUSE_VIRTUAL_DESKTOP 0x00000002
|
||||||
|
#define MOUSE_ATTRIBUTES_CHANGED 0x00000004
|
||||||
|
#define RI_MOUSE_LEFT_BUTTON_DOWN 0x0001
|
||||||
|
#define RI_MOUSE_LEFT_BUTTON_UP 0x0002
|
||||||
|
#define RI_MOUSE_RIGHT_BUTTON_DOWN 0x0004
|
||||||
|
#define RI_MOUSE_RIGHT_BUTTON_UP 0x0008
|
||||||
|
#define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010
|
||||||
|
#define RI_MOUSE_MIDDLE_BUTTON_UP 0x0020
|
||||||
|
#define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN
|
||||||
|
#define RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP
|
||||||
|
#define RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN
|
||||||
|
#define RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP
|
||||||
|
#define RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN
|
||||||
|
#define RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP
|
||||||
|
#define RI_MOUSE_BUTTON_4_DOWN 0x0040
|
||||||
|
#define RI_MOUSE_BUTTON_4_UP 0x0080
|
||||||
|
#define RI_MOUSE_BUTTON_5_DOWN 0x0100
|
||||||
|
#define RI_MOUSE_BUTTON_5_UP 0x0200
|
||||||
|
#define RI_MOUSE_WHEEL 0x0400
|
||||||
|
#define KEYBOARD_OVERRUN_MAKE_CODE 0x00ff
|
||||||
|
#define RI_KEY_MAKE 0x0000
|
||||||
|
#define RI_KEY_BREAK 0x0001
|
||||||
|
#define RI_KEY_E0 0x0002
|
||||||
|
#define RI_KEY_E1 0x0004
|
||||||
|
#define RI_KEY_TERMSRV_SET_LED 0x0008
|
||||||
|
#define RI_KEY_TERMSRV_SHADOW 0x0010
|
||||||
|
#define RID_INPUT 0x10000003
|
||||||
|
#define RID_HEADER 0x10000005
|
||||||
|
#define RIDI_PREPARSEDDATA 0x20000005
|
||||||
|
#define RIDI_DEVICENAME 0x20000007
|
||||||
|
#define RIDI_DEVICEINFO 0x2000000b
|
||||||
|
#define RIDEV_REMOVE 0x00000001
|
||||||
|
#define RIDEV_EXCLUDE 0x00000010
|
||||||
|
#define RIDEV_PAGEONLY 0x00000020
|
||||||
|
#define RIDEV_NOLEGACY 0x00000030
|
||||||
|
#define RIDEV_INPUTSINK 0x00000100
|
||||||
|
#define RIDEV_CAPTUREMOUSE 0x00000200
|
||||||
|
#define RIDEV_NOHOTKEYS 0x00000200
|
||||||
|
#define RIDEV_APPKEYS 0x00000400
|
||||||
|
|
||||||
|
DECLARE_HANDLE(HRAWINPUT);
|
||||||
|
typedef struct tagRAWINPUTHEADER {
|
||||||
|
DWORD dwType;
|
||||||
|
DWORD dwSize;
|
||||||
|
HANDLE hDevice;
|
||||||
|
WPARAM wParam;
|
||||||
|
} RAWINPUTHEADER,*PRAWINPUTHEADER;
|
||||||
|
typedef struct tagRAWMOUSE {
|
||||||
|
USHORT usFlags;
|
||||||
|
union {
|
||||||
|
ULONG ulButtons;
|
||||||
|
struct {
|
||||||
|
USHORT usButtonFlags;
|
||||||
|
USHORT usButtonData;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
ULONG ulRawButtons;
|
||||||
|
LONG lLastX;
|
||||||
|
LONG lLastY;
|
||||||
|
ULONG ulExtraInformation;
|
||||||
|
} RAWMOUSE,*PRAWMOUSE,*LPRAWMOUSE;
|
||||||
|
typedef struct tagRAWKEYBOARD {
|
||||||
|
USHORT MakeCode;
|
||||||
|
USHORT Flags;
|
||||||
|
USHORT Reserved;
|
||||||
|
USHORT VKey;
|
||||||
|
UINT Message;
|
||||||
|
ULONG ExtraInformation;
|
||||||
|
} RAWKEYBOARD,*PRAWKEYBOARD,*LPRAWKEYBOARD;
|
||||||
|
typedef struct tagRAWHID {
|
||||||
|
DWORD dwSizeHid;
|
||||||
|
DWORD dwCount;
|
||||||
|
BYTE bRawData;
|
||||||
|
} RAWHID,*PRAWHID,*LPRAWHID;
|
||||||
|
typedef struct tagRAWINPUT {
|
||||||
|
RAWINPUTHEADER header;
|
||||||
|
union {
|
||||||
|
RAWMOUSE mouse;
|
||||||
|
RAWKEYBOARD keyboard;
|
||||||
|
RAWHID hid;
|
||||||
|
} data;
|
||||||
|
} RAWINPUT,*PRAWINPUT,*LPRAWINPUT;
|
||||||
|
typedef struct tagRAWINPUTDEVICE {
|
||||||
|
USHORT usUsagePage;
|
||||||
|
USHORT usUsage;
|
||||||
|
DWORD dwFlags;
|
||||||
|
HWND hwndTarget;
|
||||||
|
} RAWINPUTDEVICE,*PRAWINPUTDEVICE,*LPRAWINPUTDEVICE;
|
||||||
|
typedef const RAWINPUTDEVICE *PCRAWINPUTDEVICE;
|
||||||
|
typedef struct tagRAWINPUTDEVICELIST {
|
||||||
|
HANDLE hDevice;
|
||||||
|
DWORD dwType;
|
||||||
|
} RAWINPUTDEVICELIST,*PRAWINPUTDEVICELIST;
|
||||||
|
|
||||||
|
WINUSERAPI LRESULT WINAPI DefRawInputProc(PRAWINPUT*,INT,UINT);
|
||||||
|
WINUSERAPI UINT WINAPI GetRawInputBuffer(PRAWINPUT,PUINT,UINT);
|
||||||
|
WINUSERAPI UINT WINAPI GetRawInputData(HRAWINPUT,UINT,LPVOID,PUINT,UINT);
|
||||||
|
WINUSERAPI UINT WINAPI GetRawInputDeviceInfoA(HANDLE,UINT,LPVOID,PUINT);
|
||||||
|
WINUSERAPI UINT WINAPI GetRawInputDeviceInfoW(HANDLE,UINT,LPVOID,PUINT);
|
||||||
|
WINUSERAPI UINT WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST,PUINT,UINT);
|
||||||
|
WINUSERAPI UINT WINAPI GetRegisteredRawInputDevices(PRAWINPUTDEVICE,PUINT,UINT);
|
||||||
|
WINUSERAPI BOOL WINAPI RegisterRawInputDevices(PCRAWINPUTDEVICE,UINT,UINT);
|
||||||
|
#endif
|
|
@ -24,6 +24,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "winquake.h"
|
#include "winquake.h"
|
||||||
//#include "dosisms.h"
|
//#include "dosisms.h"
|
||||||
|
|
||||||
|
#define USINGRAWINPUT
|
||||||
|
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
#include "in_raw.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NODIRECTX
|
#ifndef NODIRECTX
|
||||||
#include <dinput.h>
|
#include <dinput.h>
|
||||||
|
|
||||||
|
@ -51,9 +57,14 @@ cvar_t in_dinput = {"in_dinput","0", NULL, CVAR_ARCHIVE};
|
||||||
cvar_t cl_keypad = {"cl_keypad", "0"};
|
cvar_t cl_keypad = {"cl_keypad", "0"};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
HANDLE comhandle;
|
union {
|
||||||
HANDLE threadhandle;
|
struct { // serial mouse
|
||||||
DWORD threadid;
|
HANDLE comhandle;
|
||||||
|
HANDLE threadhandle;
|
||||||
|
DWORD threadid;
|
||||||
|
};
|
||||||
|
HANDLE rawinputhandle; // raw input
|
||||||
|
};
|
||||||
|
|
||||||
int numbuttons;
|
int numbuttons;
|
||||||
|
|
||||||
|
@ -220,6 +231,37 @@ static HRESULT (WINAPI *pDirectInputCreateEx)(HINSTANCE hinst,
|
||||||
|
|
||||||
static JOYINFOEX ji;
|
static JOYINFOEX ji;
|
||||||
|
|
||||||
|
// raw input specific defines
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
// defines
|
||||||
|
#define MAX_RI_DEVICE_SIZE 128
|
||||||
|
#define INIT_RIBUFFER_SIZE (sizeof(RAWINPUTHEADER)+sizeof(RAWMOUSE))
|
||||||
|
|
||||||
|
#define RI_RAWBUTTON_MASK 0x000003E0
|
||||||
|
#define RI_INVALID_POS 0x80000000
|
||||||
|
|
||||||
|
// raw input dynamic functions
|
||||||
|
typedef WINUSERAPI INT (WINAPI *pGetRawInputDeviceList)(OUT PRAWINPUTDEVICELIST pRawInputDeviceList, IN OUT PINT puiNumDevices, IN UINT cbSize);
|
||||||
|
typedef WINUSERAPI INT(WINAPI *pGetRawInputData)(IN HRAWINPUT hRawInput, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize, IN UINT cbSizeHeader);
|
||||||
|
typedef WINUSERAPI INT(WINAPI *pGetRawInputDeviceInfoA)(IN HANDLE hDevice, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize);
|
||||||
|
typedef WINUSERAPI BOOL (WINAPI *pRegisterRawInputDevices)(IN PCRAWINPUTDEVICE pRawInputDevices, IN UINT uiNumDevices, IN UINT cbSize);
|
||||||
|
|
||||||
|
pGetRawInputDeviceList _GRIDL;
|
||||||
|
pGetRawInputData _GRID;
|
||||||
|
pGetRawInputDeviceInfoA _GRIDIA;
|
||||||
|
pRegisterRawInputDevices _RRID;
|
||||||
|
|
||||||
|
mouse_t *rawmice;
|
||||||
|
int rawmicecount;
|
||||||
|
int usingindividualmice;
|
||||||
|
RAWINPUT *raw;
|
||||||
|
int ribuffersize;
|
||||||
|
|
||||||
|
cvar_t in_rawinput = {"in_rawinput", "0"};
|
||||||
|
cvar_t in_rawinput_system = {"in_rawinput_combine", "0"};
|
||||||
|
cvar_t in_rawinput_rdp = {"in_rawinput_rdp", "0"};
|
||||||
|
#endif
|
||||||
|
|
||||||
// forward-referenced functions
|
// forward-referenced functions
|
||||||
void IN_StartupJoystick (void);
|
void IN_StartupJoystick (void);
|
||||||
void Joy_AdvancedUpdate_f (void);
|
void Joy_AdvancedUpdate_f (void);
|
||||||
|
@ -528,9 +570,11 @@ void IN_RestoreOriginalMouseState (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NODIRECTX
|
#ifndef NODIRECTX
|
||||||
BOOL (FAR PASCAL IN_EnumerateDevices)(LPCDIDEVICEINSTANCE inst, LPVOID parm)
|
BOOL CALLBACK IN_EnumerateDevices(LPCDIDEVICEINSTANCE inst, LPVOID parm)
|
||||||
{
|
{
|
||||||
return TRUE;
|
Con_SafePrintf("Found: %s\n", inst->tszProductName);
|
||||||
|
|
||||||
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
|
@ -573,7 +617,7 @@ int IN_InitDInput (void)
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
IDirectInput7_EnumDevices(g_pdi7, 0, &IN_EnumerateDevices, NULL, 0);
|
IDirectInput7_EnumDevices(g_pdi7, 0, &IN_EnumerateDevices, NULL, DIEDFL_ATTACHEDONLY);
|
||||||
|
|
||||||
// obtain an interface to the system mouse device.
|
// obtain an interface to the system mouse device.
|
||||||
hr = IDirectInput7_CreateDeviceEx(g_pdi7, &GUID_SysMouse, &IID_IDirectInputDevice7, &g_pMouse7, NULL);
|
hr = IDirectInput7_CreateDeviceEx(g_pdi7, &GUID_SysMouse, &IID_IDirectInputDevice7, &g_pMouse7, NULL);
|
||||||
|
@ -631,7 +675,7 @@ int IN_InitDInput (void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
IDirectInput_EnumDevices(g_pdi, 0, &IN_EnumerateDevices, NULL, 0);
|
IDirectInput_EnumDevices(g_pdi, 0, &IN_EnumerateDevices, NULL, DIEDFL_ATTACHEDONLY);
|
||||||
|
|
||||||
// obtain an interface to the system mouse device.
|
// obtain an interface to the system mouse device.
|
||||||
hr = IDirectInput_CreateDevice(g_pdi, &GUID_SysMouse, &g_pMouse, NULL);
|
hr = IDirectInput_CreateDevice(g_pdi, &GUID_SysMouse, &g_pMouse, NULL);
|
||||||
|
@ -717,6 +761,29 @@ void IN_CloseDInput (void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
void IN_RawInput_DeInit(void)
|
||||||
|
{
|
||||||
|
RAWINPUTDEVICE Rid;
|
||||||
|
|
||||||
|
if (rawmicecount < 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// deregister raw input
|
||||||
|
Rid.usUsagePage = 0x01;
|
||||||
|
Rid.usUsage = 0x02;
|
||||||
|
Rid.dwFlags = RIDEV_REMOVE;
|
||||||
|
Rid.hwndTarget = NULL;
|
||||||
|
|
||||||
|
(*_RRID)(&Rid, 1, sizeof(Rid));
|
||||||
|
|
||||||
|
Z_Free(rawmice);
|
||||||
|
|
||||||
|
// dealloc mouse structure
|
||||||
|
rawmicecount = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void IN_SetSerialBoad(HANDLE port, int boadrate)
|
void IN_SetSerialBoad(HANDLE port, int boadrate)
|
||||||
{
|
{
|
||||||
DCB dcb;
|
DCB dcb;
|
||||||
|
@ -828,6 +895,194 @@ unsigned long __stdcall IN_SerialMSIntelliRun(void *param)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
// raw input registration functions
|
||||||
|
int IN_RawInput_Register(void)
|
||||||
|
{
|
||||||
|
// This function registers to receive the WM_INPUT messages
|
||||||
|
RAWINPUTDEVICE Rid; // Register only for mouse messages from wm_input.
|
||||||
|
|
||||||
|
//register to get wm_input messages
|
||||||
|
Rid.usUsagePage = 0x01;
|
||||||
|
Rid.usUsage = 0x02;
|
||||||
|
Rid.dwFlags = RIDEV_NOLEGACY; // adds HID mouse and also ignores legacy mouse messages
|
||||||
|
Rid.hwndTarget = NULL;
|
||||||
|
|
||||||
|
// Register to receive the WM_INPUT message for any change in mouse (buttons, wheel, and movement will all generate the same message)
|
||||||
|
if (!(*_RRID)(&Rid, 1, sizeof(Rid)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int IN_RawInput_IsRDPMouse(char *cDeviceString)
|
||||||
|
{
|
||||||
|
char cRDPString[] = "\\??\\Root#RDP_MOU#";
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (strlen(cDeviceString) < strlen(cRDPString)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = strlen(cRDPString) - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (cDeviceString[i] != cRDPString[i])
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1; // is RDP mouse
|
||||||
|
}
|
||||||
|
|
||||||
|
void IN_RawInput_Init(void)
|
||||||
|
{
|
||||||
|
// "0" to exclude, "1" to include
|
||||||
|
PRAWINPUTDEVICELIST pRawInputDeviceList;
|
||||||
|
int inputdevices, i, j, mtemp;
|
||||||
|
char dname[MAX_RI_DEVICE_SIZE];
|
||||||
|
|
||||||
|
// Return 0 if rawinput is not available
|
||||||
|
HMODULE user32 = LoadLibrary("user32.dll");
|
||||||
|
if (!user32)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: unable to load user32.dll\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_RRID = (pRegisterRawInputDevices)GetProcAddress(user32,"RegisterRawInputDevices");
|
||||||
|
if (!_RRID)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: function RegisterRawInputDevices could not be registered\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_GRIDL = (pGetRawInputDeviceList)GetProcAddress(user32,"GetRawInputDeviceList");
|
||||||
|
if (!_GRIDL)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: function GetRawInputDeviceList could not be registered\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_GRIDIA = (pGetRawInputDeviceInfoA)GetProcAddress(user32,"GetRawInputDeviceInfoA");
|
||||||
|
if (!_GRIDIA)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: function GetRawInputDeviceInfoA could not be registered\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_GRID = (pGetRawInputData)GetProcAddress(user32,"GetRawInputData");
|
||||||
|
if (!_GRID)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: function GetRawInputData could not be registered\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rawmicecount = 0;
|
||||||
|
rawmice = NULL;
|
||||||
|
usingindividualmice = 1;
|
||||||
|
raw = NULL;
|
||||||
|
ribuffersize = 0;
|
||||||
|
|
||||||
|
// 1st call to GetRawInputDeviceList: Pass NULL to get the number of devices.
|
||||||
|
if ((*_GRIDL)(NULL, &inputdevices, sizeof(RAWINPUTDEVICELIST)) != 0)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: unable to count raw input devices\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate the array to hold the DeviceList
|
||||||
|
pRawInputDeviceList = Z_Malloc(sizeof(RAWINPUTDEVICELIST) * inputdevices);
|
||||||
|
|
||||||
|
// 2nd call to GetRawInputDeviceList: Pass the pointer to our DeviceList and GetRawInputDeviceList() will fill the array
|
||||||
|
if ((*_GRIDL)(pRawInputDeviceList, &inputdevices, sizeof(RAWINPUTDEVICELIST)) == -1)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: unable to get raw input device list\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_rawinput_system.value) // use system mouse (cvar)
|
||||||
|
usingindividualmice = 0;
|
||||||
|
|
||||||
|
// Loop through all devices and count the mice
|
||||||
|
for (i = 0, mtemp = 0; i < inputdevices; i++)
|
||||||
|
{
|
||||||
|
if (pRawInputDeviceList[i].dwType == RIM_TYPEMOUSE)
|
||||||
|
{
|
||||||
|
j = MAX_RI_DEVICE_SIZE;
|
||||||
|
|
||||||
|
// Get the device name and use it to determine if it's the RDP Terminal Services virtual device.
|
||||||
|
if ((*_GRIDIA)(pRawInputDeviceList[i].hDevice, RIDI_DEVICENAME, dname, &j) < 0)
|
||||||
|
dname[0] = 0;
|
||||||
|
|
||||||
|
if (!(in_rawinput_rdp.value) && IN_RawInput_IsRDPMouse(dname)) // use rdp mouse (cvar)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// advance temp device count
|
||||||
|
mtemp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// exit out if no devices found
|
||||||
|
if (!mtemp)
|
||||||
|
{
|
||||||
|
Con_SafePrintf("Raw input: no usable device found\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop again and bind devices
|
||||||
|
rawmice = Z_Malloc(sizeof(mouse_t) * mtemp);
|
||||||
|
for (i = 0; i < inputdevices; i++)
|
||||||
|
{
|
||||||
|
if (pRawInputDeviceList[i].dwType == RIM_TYPEMOUSE)
|
||||||
|
{
|
||||||
|
j = MAX_RI_DEVICE_SIZE;
|
||||||
|
|
||||||
|
// Get the device name and use it to determine if it's the RDP Terminal Services virtual device.
|
||||||
|
if ((*_GRIDIA)(pRawInputDeviceList[i].hDevice, RIDI_DEVICENAME, dname, &j) < 0)
|
||||||
|
dname[0] = 0;
|
||||||
|
|
||||||
|
if (!(in_rawinput_rdp.value) && IN_RawInput_IsRDPMouse(dname)) // use rdp mouse (cvar)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// print pretty message about the mouse
|
||||||
|
dname[MAX_RI_DEVICE_SIZE - 1] = 0;
|
||||||
|
for (mtemp = strlen(dname); mtemp >= 0; mtemp--)
|
||||||
|
{
|
||||||
|
if (dname[mtemp] == '#')
|
||||||
|
{
|
||||||
|
dname[mtemp + 1] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Con_SafePrintf("Raw input: [%i] %s\n", i, dname);
|
||||||
|
|
||||||
|
// set handle
|
||||||
|
rawmice[rawmicecount].rawinputhandle = pRawInputDeviceList[i].hDevice;
|
||||||
|
rawmice[rawmicecount].numbuttons = 10;
|
||||||
|
rawmice[rawmicecount].pos[0] = RI_INVALID_POS;
|
||||||
|
rawmicecount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// free the RAWINPUTDEVICELIST
|
||||||
|
Z_Free(pRawInputDeviceList);
|
||||||
|
|
||||||
|
// finally, register to recieve raw input WM_INPUT messages
|
||||||
|
if (!IN_RawInput_Register()) {
|
||||||
|
Con_SafePrintf("Raw input: unable to register raw input\n");
|
||||||
|
|
||||||
|
// quick deinit
|
||||||
|
rawmicecount = 0;
|
||||||
|
Z_Free(rawmice);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// alloc raw input buffer
|
||||||
|
raw = BZ_Malloc(INIT_RIBUFFER_SIZE);
|
||||||
|
ribuffersize = INIT_RIBUFFER_SIZE;
|
||||||
|
|
||||||
|
Con_SafePrintf("Raw input: initialized with %i mice\n", rawmicecount);
|
||||||
|
|
||||||
|
return; // success
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
IN_StartupMouse
|
IN_StartupMouse
|
||||||
|
@ -881,6 +1136,13 @@ void IN_StartupMouse (void)
|
||||||
newmouseparms[2] = originalmouseparms[2];
|
newmouseparms[2] = originalmouseparms[2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
if (in_rawinput.value)
|
||||||
|
{
|
||||||
|
IN_RawInput_Init();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (COM_CheckParm("-m_mwhook"))
|
if (COM_CheckParm("-m_mwhook"))
|
||||||
|
@ -980,6 +1242,12 @@ void IN_Init (void)
|
||||||
Cmd_AddCommand ("joyadvancedupdate", Joy_AdvancedUpdate_f);
|
Cmd_AddCommand ("joyadvancedupdate", Joy_AdvancedUpdate_f);
|
||||||
|
|
||||||
uiWheelMessage = RegisterWindowMessage ( "MSWHEEL_ROLLMSG" );
|
uiWheelMessage = RegisterWindowMessage ( "MSWHEEL_ROLLMSG" );
|
||||||
|
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
Cvar_Register (&in_rawinput, "Input stuff");
|
||||||
|
Cvar_Register (&in_rawinput_system, "Input stuff");
|
||||||
|
Cvar_Register (&in_rawinput_rdp, "Input stuff");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1005,6 +1273,9 @@ void IN_Shutdown (void)
|
||||||
#ifndef NODIRECTX
|
#ifndef NODIRECTX
|
||||||
IN_CloseDInput();
|
IN_CloseDInput();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
IN_RawInput_DeInit();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1339,6 +1610,26 @@ void IN_MouseMove (usercmd_t *cmd, int pnum)
|
||||||
sysmouse.buttons = sysmouse.oldbuttons; //don't do it!!! Our buttons are event driven. We don't want to merge em and forget do we now?
|
sysmouse.buttons = sysmouse.oldbuttons; //don't do it!!! Our buttons are event driven. We don't want to merge em and forget do we now?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
if (rawmicecount)
|
||||||
|
{
|
||||||
|
if (!usingindividualmice && pnum == 0)
|
||||||
|
{
|
||||||
|
// not the right way to do this but it'll work for now
|
||||||
|
int x;
|
||||||
|
|
||||||
|
for (x = 0; x < rawmicecount; x++)
|
||||||
|
{
|
||||||
|
ProcessMouse(rawmice + x, cmd, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pnum < rawmicecount)
|
||||||
|
{
|
||||||
|
ProcessMouse(rawmice + pnum, cmd, pnum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (pnum == 0)
|
if (pnum == 0)
|
||||||
ProcessMouse(&sysmouse, cmd, pnum);
|
ProcessMouse(&sysmouse, cmd, pnum);
|
||||||
|
|
||||||
|
@ -1375,18 +1666,138 @@ void IN_Accumulate (void)
|
||||||
{
|
{
|
||||||
if (mouseactive && !dinput)
|
if (mouseactive && !dinput)
|
||||||
{
|
{
|
||||||
POINT current_pos;
|
#ifdef USINGRAWINPUT
|
||||||
|
if (rawmicecount)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
POINT current_pos;
|
||||||
|
|
||||||
GetCursorPos (¤t_pos);
|
GetCursorPos (¤t_pos);
|
||||||
|
|
||||||
sysmouse.delta[0] += current_pos.x - window_center_x;
|
sysmouse.delta[0] += current_pos.x - window_center_x;
|
||||||
sysmouse.delta[1] += current_pos.y - window_center_y;
|
sysmouse.delta[1] += current_pos.y - window_center_y;
|
||||||
|
}
|
||||||
|
|
||||||
// force the mouse to the center, so there's room to move
|
// force the mouse to the center, so there's room to move
|
||||||
SetCursorPos (window_center_x, window_center_y);
|
SetCursorPos (window_center_x, window_center_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USINGRAWINPUT
|
||||||
|
void IN_RawInput_MouseRead(HANDLE in_device_handle)
|
||||||
|
{
|
||||||
|
int i = 0, tbuttons, j;
|
||||||
|
int dwSize;
|
||||||
|
|
||||||
|
// get raw input
|
||||||
|
if ((*_GRID)((HRAWINPUT)in_device_handle, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER)) == -1)
|
||||||
|
{
|
||||||
|
Con_Printf("Raw input: unable to add to get size of raw input header.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwSize > ribuffersize)
|
||||||
|
{
|
||||||
|
ribuffersize = dwSize;
|
||||||
|
raw = BZ_Realloc(raw, dwSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*_GRID)((HRAWINPUT)in_device_handle, RID_INPUT, raw, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize ) {
|
||||||
|
Con_Printf("Raw input: unable to add to get raw input header.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find mouse in our mouse list
|
||||||
|
for (; i < rawmicecount; i++)
|
||||||
|
{
|
||||||
|
if (rawmice[i].rawinputhandle == raw->header.hDevice)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == rawmicecount) // we're not tracking this mouse
|
||||||
|
return;
|
||||||
|
|
||||||
|
// movement
|
||||||
|
if (raw->data.mouse.usFlags & MOUSE_MOVE_ABSOLUTE)
|
||||||
|
{
|
||||||
|
if (rawmice[i].pos[0] != RI_INVALID_POS)
|
||||||
|
{
|
||||||
|
rawmice[i].delta[0] += raw->data.mouse.lLastX - rawmice[i].pos[0];
|
||||||
|
rawmice[i].delta[1] += raw->data.mouse.lLastY - rawmice[i].pos[1];
|
||||||
|
}
|
||||||
|
rawmice[i].pos[0] = raw->data.mouse.lLastX;
|
||||||
|
rawmice[i].pos[1] = raw->data.mouse.lLastY;
|
||||||
|
}
|
||||||
|
else // RELATIVE
|
||||||
|
{
|
||||||
|
rawmice[i].delta[0] += raw->data.mouse.lLastX;
|
||||||
|
rawmice[i].delta[1] += raw->data.mouse.lLastY;
|
||||||
|
rawmice[i].pos[0] = RI_INVALID_POS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// buttons
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_DOWN)
|
||||||
|
Key_Event(K_MOUSE1, true);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_UP)
|
||||||
|
Key_Event(K_MOUSE1, false);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_2_DOWN)
|
||||||
|
Key_Event(K_MOUSE2, true);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_2_UP)
|
||||||
|
Key_Event(K_MOUSE2, false);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_3_DOWN)
|
||||||
|
Key_Event(K_MOUSE3, true);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_3_UP)
|
||||||
|
Key_Event(K_MOUSE3, false);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_4_DOWN)
|
||||||
|
Key_Event(K_MOUSE4, true);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_4_UP)
|
||||||
|
Key_Event(K_MOUSE4, false);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_5_DOWN)
|
||||||
|
Key_Event(K_MOUSE5, true);
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_5_UP)
|
||||||
|
Key_Event(K_MOUSE5, false);
|
||||||
|
|
||||||
|
// mouse wheel
|
||||||
|
if (raw->data.mouse.usButtonFlags & RI_MOUSE_WHEEL) { // If the current message has a mouse_wheel message
|
||||||
|
if ((SHORT)raw->data.mouse.usButtonData > 0) {
|
||||||
|
Key_Event(K_MWHEELUP, true);
|
||||||
|
Key_Event(K_MWHEELUP, false);
|
||||||
|
}
|
||||||
|
if ((SHORT)raw->data.mouse.usButtonData < 0) {
|
||||||
|
Key_Event(K_MWHEELDOWN, true);
|
||||||
|
Key_Event(K_MWHEELDOWN, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// extra buttons
|
||||||
|
tbuttons = raw->data.mouse.ulRawButtons & RI_RAWBUTTON_MASK;
|
||||||
|
for (j=6 ; j<rawmice[i].numbuttons ; j++)
|
||||||
|
{
|
||||||
|
if ( (tbuttons & (1<<j)) &&
|
||||||
|
!(rawmice[i].buttons & (1<<j)) )
|
||||||
|
{
|
||||||
|
Key_Event (K_MOUSE1 + j, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !(tbuttons & (1<<j)) &&
|
||||||
|
(rawmice[i].buttons & (1<<j)) )
|
||||||
|
{
|
||||||
|
Key_Event (K_MOUSE1 + j, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
rawmice[i].buttons &= ~RI_RAWBUTTON_MASK;
|
||||||
|
rawmice[i].buttons |= tbuttons;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void IN_RawInput_MouseRead(HANDLE in_device_handle)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===================
|
===================
|
||||||
|
|
|
@ -159,6 +159,7 @@ void IN_ActivateMouse (void);
|
||||||
void IN_RestoreOriginalMouseState (void);
|
void IN_RestoreOriginalMouseState (void);
|
||||||
void IN_SetQuakeMouseState (void);
|
void IN_SetQuakeMouseState (void);
|
||||||
void IN_MouseEvent (int mstate);
|
void IN_MouseEvent (int mstate);
|
||||||
|
void IN_RawInput_MouseRead(HANDLE in_device_handle);
|
||||||
|
|
||||||
extern qboolean winsock_lib_initialized;
|
extern qboolean winsock_lib_initialized;
|
||||||
|
|
||||||
|
|
|
@ -735,18 +735,16 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
||||||
draw_chars = W_SafeGetLumpName ("conchars");
|
draw_chars = W_SafeGetLumpName ("conchars");
|
||||||
if (draw_chars)
|
if (draw_chars)
|
||||||
{
|
{
|
||||||
x = CRC_Block(draw_chars, 128*128); // take CRC before we change anything
|
// add ocrana leds
|
||||||
|
if (con_ocranaleds.value)
|
||||||
|
{
|
||||||
|
if (con_ocranaleds.value != 2 || CRC_Block(draw_chars, 128*128) == 798)
|
||||||
|
AddOcranaLEDsIndexed (draw_chars, 128, 128);
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0 ; i<128*128 ; i++)
|
for (i=0 ; i<128*128 ; i++)
|
||||||
if (draw_chars[i] == 0)
|
if (draw_chars[i] == 0)
|
||||||
draw_chars[i] = 255; // proper transparent color
|
draw_chars[i] = 255; // proper transparent color
|
||||||
|
|
||||||
// add ocrana leds
|
|
||||||
if (con_ocranaleds.value)
|
|
||||||
{
|
|
||||||
if (con_ocranaleds.value != 2 || x == 798)
|
|
||||||
AddOcranaLEDsIndexed (draw_chars, 128, 128);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// now turn them into textures
|
// now turn them into textures
|
||||||
|
@ -801,6 +799,10 @@ TRACE(("dbg: GLDraw_ReInit: Allocating upload buffers\n"));
|
||||||
}
|
}
|
||||||
Z_Free(tempchars);
|
Z_Free(tempchars);
|
||||||
|
|
||||||
|
// add ocrana leds
|
||||||
|
if (con_ocranaleds.value && con_ocranaleds.value != 2)
|
||||||
|
AddOcranaLEDsIndexed (draw_chars, 128, 128);
|
||||||
|
|
||||||
for (i=0 ; i<128*128 ; i++)
|
for (i=0 ; i<128*128 ; i++)
|
||||||
if (draw_chars[i] == 0)
|
if (draw_chars[i] == 0)
|
||||||
draw_chars[i] = 255; // proper transparent color
|
draw_chars[i] = 255; // proper transparent color
|
||||||
|
|
|
@ -46,6 +46,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define MK_XBUTTON7 0x0800
|
#define MK_XBUTTON7 0x0800
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WM_INPUT
|
||||||
|
#define WM_INPUT 255
|
||||||
|
#endif
|
||||||
|
|
||||||
extern cvar_t vid_conwidth;
|
extern cvar_t vid_conwidth;
|
||||||
|
|
||||||
|
@ -1233,6 +1236,11 @@ LONG WINAPI GLMainWndProc (
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_INPUT:
|
||||||
|
// raw input handling
|
||||||
|
IN_RawInput_MouseRead((HANDLE)lParam);
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
if (!vid_initializing)
|
if (!vid_initializing)
|
||||||
{
|
{
|
||||||
|
|
|
@ -488,6 +488,7 @@ void SWDraw_Init (void)
|
||||||
if (con_ocranaleds.value != 2 || concrc == 798)
|
if (con_ocranaleds.value != 2 || concrc == 798)
|
||||||
AddOcranaLEDsIndexed (draw_chars, 128, 128);
|
AddOcranaLEDsIndexed (draw_chars, 128, 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_disc = W_SafeGetLumpName ("disc");
|
draw_disc = W_SafeGetLumpName ("disc");
|
||||||
draw_backtile = W_SafeGetLumpName ("backtile");
|
draw_backtile = W_SafeGetLumpName ("backtile");
|
||||||
if (!draw_backtile)
|
if (!draw_backtile)
|
||||||
|
|
|
@ -60,6 +60,10 @@ extern int r_flushcache;
|
||||||
#define MK_XBUTTON7 0x0800
|
#define MK_XBUTTON7 0x0800
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WM_INPUT
|
||||||
|
#define WM_INPUT 255
|
||||||
|
#endif
|
||||||
|
|
||||||
void R_GammaCorrectAndSetPalette(const unsigned char *pal)
|
void R_GammaCorrectAndSetPalette(const unsigned char *pal)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -425,6 +429,10 @@ LONG WINAPI MainWndProc (
|
||||||
Key_Event(K_MWHEELDOWN, false);
|
Key_Event(K_MWHEELDOWN, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case WM_INPUT:
|
||||||
|
// raw input handling
|
||||||
|
IN_RawInput_MouseRead((HANDLE)lParam);
|
||||||
|
break;
|
||||||
// KJB: Added these new palette functions
|
// KJB: Added these new palette functions
|
||||||
/* case WM_PALETTECHANGED:
|
/* case WM_PALETTECHANGED:
|
||||||
if ((HWND)wParam == hWnd)
|
if ((HWND)wParam == hWnd)
|
||||||
|
|
Loading…
Reference in a new issue