static qboolean vid_initialized = false;
static qboolean vid_wassuspended = false;
static qboolean vid_usingmouse = false;
+static qboolean vid_usinghidecursor = false;
static qboolean vid_usingvsync = false;
static qboolean vid_usevsync = false;
static HICON hIcon;
void VID_Finish (void)
{
- qboolean vid_usemouse;
-
vid_usevsync = vid_vsync.integer && !cls.timedemo && gl_videosyncavailable;
if (vid_usingvsync != vid_usevsync && gl_videosyncavailable)
{
if (!fActive)
{
- VID_GrabMouse(false);
+ VID_SetMouse(false, false, false);
if (vid_isfullscreen)
{
ChangeDisplaySettings (NULL, 0);
{
LONG lRet = 1;
int fActive, fMinimized, temp;
- char state[256];
- char asciichar[4];
+ unsigned char state[256];
+ unsigned char asciichar[4];
int vkey;
int charlength;
qboolean down = false;
case WM_MOVE:
window_x = (int) LOWORD(lParam);
window_y = (int) HIWORD(lParam);
- VID_GrabMouse(false);
+ VID_SetMouse(false, false, false);
break;
case WM_KEYDOWN:
temp |= 512;
#ifdef SUPPORTDIRECTX
- if (vid_usingmouse && !dinput_acquired)
-#else
- if (vid_usingmouse)
+ if (!dinput_acquired)
#endif
{
// perform button actions
IN_Init();
}
-int VID_InitMode (int fullscreen, int width, int height, int bpp, int refreshrate, int stereobuffer, int samples)
+int VID_InitMode (int fullscreen, int *width, int *height, int bpp, int refreshrate, int stereobuffer, int samples)
{
int i;
HDC hdc;
};
int windowpass;
int pixelformat, newpixelformat;
- int numpixelformats;
+ UINT numpixelformats;
DWORD WindowStyle, ExWindowStyle;
int CenterX, CenterY;
const char *gldrivername;
foundmode = true;
gdevmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
gdevmode.dmBitsPerPel = bpp;
- gdevmode.dmPelsWidth = width;
- gdevmode.dmPelsHeight = height;
+ gdevmode.dmPelsWidth = *width;
+ gdevmode.dmPelsHeight = *height;
gdevmode.dmSize = sizeof (gdevmode);
if(refreshrate)
{
Con_Printf("wrong bpp\n");
continue;
}
- if(thismode.dmPelsWidth != (DWORD)width)
+ if(thismode.dmPelsWidth != (DWORD)*width)
{
if(developer.integer >= 100)
Con_Printf("wrong width\n");
continue;
}
- if(thismode.dmPelsHeight != (DWORD)height)
+ if(thismode.dmPelsHeight != (DWORD)*height)
{
if(developer.integer >= 100)
Con_Printf("wrong height\n");
if (!foundmode)
{
VID_Shutdown();
- Con_Printf("Unable to find the requested mode %dx%dx%dbpp\n", width, height, bpp);
+ Con_Printf("Unable to find the requested mode %dx%dx%dbpp\n", *width, *height, bpp);
return false;
}
else if(ChangeDisplaySettings (&gdevmode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
VID_Shutdown();
- Con_Printf("Unable to change to requested mode %dx%dx%dbpp\n", width, height, bpp);
+ Con_Printf("Unable to change to requested mode %dx%dx%dbpp\n", *width, *height, bpp);
return false;
}
rect.top = 0;
rect.left = 0;
- rect.right = width;
- rect.bottom = height;
+ rect.right = *width;
+ rect.bottom = *height;
AdjustWindowRectEx(&rect, WindowStyle, false, 0);
if (fullscreen)
//vid_menudrawfn = VID_MenuDraw;
//vid_menukeyfn = VID_MenuKey;
vid_usingmouse = false;
+ vid_usinghidecursor = false;
vid_usingvsync = false;
vid_hidden = false;
vid_initialized = true;
if(vid_initialized == false)
return;
- VID_GrabMouse(false);
+ VID_SetMouse(false, false, false);
VID_RestoreSystemGamma();
vid_initialized = false;
vid_isfullscreen = false;
}
-void VID_GrabMouse(qboolean grab)
+void VID_SetMouse(qboolean fullscreengrab, qboolean relative, qboolean hidecursor)
{
static qboolean restore_spi;
static int originalmouseparms[3];
if (!mouseinitialized)
return;
- if (grab)
+ if (relative)
{
if (!vid_usingmouse)
{
SetCapture (mainwindow);
ClipCursor (&window_rect);
}
- ShowCursor (false);
}
}
else
ClipCursor (NULL);
ReleaseCapture ();
}
- ShowCursor (true);
}
}
+
+ if (vid_usinghidecursor != hidecursor)
+ {
+ vid_usinghidecursor = hidecursor;
+ ShowCursor (!hidecursor);
+ }
}
*/
static void IN_MouseMove (void)
{
- int mx, my;
POINT current_pos;
+ GetCursorPos (¤t_pos);
+ in_windowmouse_x = current_pos.x - window_x;
+ in_windowmouse_y = current_pos.y - window_y;
+
if (!vid_usingmouse)
- {
- //GetCursorPos (¤t_pos);
- //ui_mouseupdate(current_pos.x - window_x, current_pos.y - window_y);
return;
- }
#ifdef SUPPORTDIRECTX
if (dinput_acquired)
DIDEVICEOBJECTDATA od;
DWORD dwElements;
HRESULT hr;
- mx = 0;
- my = 0;
for (;;)
{
switch (od.dwOfs)
{
case DIMOFS_X:
- mx += (LONG) od.dwData;
+ in_mouse_x += (LONG) od.dwData;
break;
case DIMOFS_Y:
- my += (LONG) od.dwData;
+ in_mouse_y += (LONG) od.dwData;
break;
case DIMOFS_Z:
if ((mstate_di ^ mouse_oldbuttonstate) & (1<<i))
Key_Event (buttonremap[i], 0, (mstate_di & (1<<i)) != 0);
mouse_oldbuttonstate = mstate_di;
-
- in_mouse_x = mx;
- in_mouse_y = my;
}
else
#endif
{
- GetCursorPos (¤t_pos);
- mx = current_pos.x - (window_x + vid.width / 2);
- my = current_pos.y - (window_y + vid.height / 2);
-
- in_mouse_x = mx;
- in_mouse_y = my;
+ in_mouse_x += in_windowmouse_x - (int)(vid.width / 2);
+ in_mouse_y += in_windowmouse_y - (int)(vid.height / 2);
// if the mouse has moved, force it to the center, so there's room to move
- if (!cl.csqc_wantsmousemove)
- if (mx || my)
+ if (in_mouse_x || in_mouse_y)
SetCursorPos ((window_x + vid.width / 2), (window_y + vid.height / 2));
}
}