BOOL (WINAPI *qwglSwapIntervalEXT)(int interval);
const char *(WINAPI *qwglGetExtensionsStringARB)(HDC hdc);
-static gl_extensionfunctionlist_t wglfuncs[] =
+static dllfunction_t wglfuncs[] =
{
{"wglChoosePixelFormat", (void **) &qwglChoosePixelFormat},
{"wglDescribePixelFormat", (void **) &qwglDescribePixelFormat},
{NULL, NULL}
};
-static gl_extensionfunctionlist_t wglswapintervalfuncs[] =
+static dllfunction_t wglswapintervalfuncs[] =
{
{"wglSwapIntervalEXT", (void **) &qwglSwapIntervalEXT},
{NULL, NULL}
};
-void VID_RestoreGameGamma(void);
-void VID_GetSystemGamma(void);
-void VID_RestoreSystemGamma(void);
-
qboolean scr_skipupdate;
static DEVMODE gdevmode;
qbyte scantokey[128] =
{
-// 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 0 ,27 ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,K_BACKSPACE,9 , // 0
- 'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,'o' ,'p' ,'[' ,']' ,13 ,K_CTRL ,'a' ,'s' , // 1
- 'd' ,'f' ,'g' ,'h' ,'j' ,'k' ,'l' ,';' ,'\'' ,'`' ,K_SHIFT,'\\' ,'z' ,'x' ,'c' ,'v' , // 2
- 'b' ,'n' ,'m' ,',' ,'.' ,'/' ,K_SHIFT,'*' ,K_ALT ,' ' ,0 ,K_F1 ,K_F2 ,K_F3 ,K_F4 ,K_F5 , // 3
- K_F6 ,K_F7 ,K_F8 ,K_F9 ,K_F10,K_PAUSE,0 ,K_HOME,K_UPARROW,K_PGUP,'-' ,K_LEFTARROW,'5' ,K_RIGHTARROW,'+' ,K_END , // 4
- K_DOWNARROW,K_PGDN,K_INS,K_DEL,0 ,0 ,0 ,K_F11 ,K_F12 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
- 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
+// 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0 ,27 ,'1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' ,'0' ,'-' ,'=' ,K_BACKSPACE,9 ,//0
+ 'q' ,'w' ,'e' ,'r' ,'t' ,'y' ,'u' ,'i' ,'o' ,'p' ,'[' ,']' ,13 ,K_CTRL ,'a' ,'s' ,//1
+ 'd' ,'f' ,'g' ,'h' ,'j' ,'k' ,'l' ,';' ,'\'' ,'`' ,K_SHIFT ,'\\' ,'z' ,'x' ,'c' ,'v' ,//2
+ 'b' ,'n' ,'m' ,',' ,'.' ,'/' ,K_SHIFT,'*' ,K_ALT ,' ' ,0 ,K_F1 ,K_F2 ,K_F3 ,K_F4 ,K_F5 ,//3
+ K_F6 ,K_F7 ,K_F8 ,K_F9 ,K_F10,K_PAUSE,0 ,K_HOME,K_UPARROW,K_PGUP,K_KP_MINUS,K_LEFTARROW,K_KP_5,K_RIGHTARROW,K_KP_PLUS ,K_END,//4
+ K_DOWNARROW,K_PGDN,K_INS,K_DEL,0 ,0 ,0 ,K_F11 ,K_F12 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,//5
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,//6
+ 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 //7
};
*/
int MapKey (int key, int virtualkey)
{
- key = (key>>16)&255;
- if (key > 127)
- return 0;
- if (scantokey[key] == 0)
- Con_DPrintf("key 0x%02x has no translation\n", key);
- return scantokey[key];
+ int result;
+ int modified = (key >> 16) & 255;
+ qboolean is_extended = false;
+
+ if (modified < 128 && scantokey[modified])
+ result = scantokey[modified];
+ else
+ {
+ result = 0;
+ Con_DPrintf("key 0x%02x (0x%8x, 0x%8x) has no translation\n", modified, key, virtualkey);
+ }
+
+ if (key & (1 << 24))
+ is_extended = true;
+
+ if ( !is_extended )
+ {
+ switch ( result )
+ {
+ case K_HOME:
+ return K_KP_HOME;
+ case K_UPARROW:
+ return K_KP_UPARROW;
+ case K_PGUP:
+ return K_KP_PGUP;
+ case K_LEFTARROW:
+ return K_KP_LEFTARROW;
+ case K_RIGHTARROW:
+ return K_KP_RIGHTARROW;
+ case K_END:
+ return K_KP_END;
+ case K_DOWNARROW:
+ return K_KP_DOWNARROW;
+ case K_PGDN:
+ return K_KP_PGDN;
+ case K_INS:
+ return K_KP_INS;
+ case K_DEL:
+ return K_KP_DEL;
+ default:
+ return result;
+ }
+ }
+ else
+ {
+ switch ( result )
+ {
+ case 0x0D:
+ return K_KP_ENTER;
+ case 0x2F:
+ return K_KP_SLASH;
+ case 0xAF:
+ return K_KP_PLUS;
+ }
+ return result;
+ }
}
/*
IN_ClearStates ();
}
-void VID_RestoreGameGamma(void);
extern qboolean host_loopactive;
void AppActivate(BOOL fActive, BOOL minimize)
if (fActive)
{
+ vid_allowhwgamma = true;
if (vid_isfullscreen)
{
if (vid_wassuspended)
// LordHavoc: from dabb, fix for alt-tab bug in NVidia drivers
MoveWindow(mainwindow,0,0,gdevmode.dmPelsWidth,gdevmode.dmPelsHeight,false);
}
- if (host_loopactive)
- VID_RestoreGameGamma();
}
if (!fActive)
{
+ vid_allowhwgamma = false;
vid_usingmouse = false;
IN_DeactivateMouse ();
IN_ShowMouse ();
return lRet;
}
-
-//static int grabsysgamma = true;
-WORD systemgammaramps[3][256], currentgammaramps[3][256];
-
-int VID_SetGamma(float prescale, float gamma, float scale, float base)
+int VID_SetGamma(unsigned short *ramps)
{
- int i;
- HDC hdc;
- hdc = GetDC (NULL);
-
- BuildGammaTable16(prescale, gamma, scale, base, ¤tgammaramps[0][0]);
- for (i = 0;i < 256;i++)
- currentgammaramps[1][i] = currentgammaramps[2][i] = currentgammaramps[0][i];
-
- i = SetDeviceGammaRamp(hdc, ¤tgammaramps[0][0]);
-
+ HDC hdc = GetDC (NULL);
+ int i = SetDeviceGammaRamp(hdc, ramps);
ReleaseDC (NULL, hdc);
return i; // return success or failure
}
-void VID_RestoreGameGamma(void)
-{
- VID_UpdateGamma(true);
-}
-
-void VID_GetSystemGamma(void)
-{
- HDC hdc;
- hdc = GetDC (NULL);
-
- GetDeviceGammaRamp(hdc, &systemgammaramps[0][0]);
-
- ReleaseDC (NULL, hdc);
-}
-
-void VID_RestoreSystemGamma(void)
+int VID_GetGamma(unsigned short *ramps)
{
- HDC hdc;
- hdc = GetDC (NULL);
-
- SetDeviceGammaRamp(hdc, &systemgammaramps[0][0]);
-
+ HDC hdc = GetDC (NULL);
+ int i = GetDeviceGammaRamp(hdc, ramps);
ReleaseDC (NULL, hdc);
+ return i; // return success or failure
}
-
static HINSTANCE gldll;
int GL_OpenLibrary(const char *name)
memset(&gdevmode, 0, sizeof(gdevmode));
- VID_GetSystemGamma();
-
vid_isfullscreen = false;
if (fullscreen)
{
// fix the leftover Alt from any Alt-Tab or the like that switched us away
ClearAllStates ();
-
+
hdc = GetDC(mainwindow);
if ((pixelformat = ChoosePixelFormat(hdc, &pfd)) == 0)
HGLRC hRC = 0;
HDC hDC = 0;
+ VID_RestoreSystemGamma();
+
vid_initialized = false;
IN_Shutdown();
if (qwglGetCurrentContext)
ChangeDisplaySettings (NULL, 0);
vid_isfullscreen = false;
AppActivate(false, false);
- VID_RestoreSystemGamma();
if (mainwindow)
DestroyWindow(mainwindow);
mainwindow = 0;
if (!hInstDI)
{
hInstDI = LoadLibrary("dinput.dll");
-
+
if (hInstDI == NULL)
{
Con_SafePrintf ("Couldn't load dinput.dll\n");
*/
void IN_StartupMouse (void)
{
- if (COM_CheckParm ("-nomouse") || COM_CheckParm("-safe"))
+ if (COM_CheckParm ("-nomouse") || COM_CheckParm("-safe"))
return;
mouseinitialized = true;
if (mouseparmsvalid)
{
- if ( COM_CheckParm ("-noforcemspd") )
+ if ( COM_CheckParm ("-noforcemspd") )
newmouseparms[2] = originalmouseparms[2];
- if ( COM_CheckParm ("-noforcemaccel") )
+ if ( COM_CheckParm ("-noforcemaccel") )
{
newmouseparms[0] = originalmouseparms[0];
newmouseparms[1] = originalmouseparms[1];
}
- if ( COM_CheckParm ("-noforcemparms") )
+ if ( COM_CheckParm ("-noforcemparms") )
{
newmouseparms[0] = originalmouseparms[0];
newmouseparms[1] = originalmouseparms[1];
{
Key_Event (K_MOUSE1 + i, false);
}
- }
-
+ }
+
mouse_oldbuttonstate = mstate;
}
}
}
-/*
-===============
-IN_StartupJoystick
+/*
+===============
+IN_StartupJoystick
===============
-*/
-void IN_StartupJoystick (void)
+*/
+void IN_StartupJoystick (void)
{
int numdevs;
JOYCAPS jc;
MMRESULT mmr;
mmr = 0;
-
+
// assume no joystick
- joy_avail = false;
+ joy_avail = false;
// abort startup if user requests no joystick
- if (COM_CheckParm ("-nojoy") || COM_CheckParm("-safe"))
- return;
-
+ if (COM_CheckParm ("-nojoy") || COM_CheckParm("-safe"))
+ return;
+
// verify joystick driver is present
if ((numdevs = joyGetNumDevs ()) == 0)
{
if ((mmr = joyGetPosEx (joy_id, &ji)) == JOYERR_NOERROR)
break;
- }
+ }
// abort startup if we didn't find a valid joystick
if (mmr != JOYERR_NOERROR)
memset (&jc, 0, sizeof(jc));
if ((mmr = joyGetDevCaps (joy_id, &jc, sizeof(jc))) != JOYERR_NOERROR)
{
- Con_Printf ("\njoystick not found -- invalid joystick capabilities (%x)\n\n", mmr);
+ Con_Printf ("\njoystick not found -- invalid joystick capabilities (%x)\n\n", mmr);
return;
}
// mark the joystick as available and advanced initialization not completed
// this is needed as cvars are not available during initialization
- joy_avail = true;
+ joy_avail = true;
joy_advancedinit = false;
- Con_Printf ("\njoystick detected\n\n");
+ Con_Printf ("\njoystick detected\n\n");
}
}
-/*
-===============
+/*
+===============
IN_ReadJoystick
-===============
-*/
+===============
+*/
qboolean IN_ReadJoystick (void)
{
// verify joystick is available and that the user wants to use it
if (!joy_avail || !in_joystick.integer)
{
- return;
+ return;
}
// collect the joystick data, if possible
}
}
- // convert range from -32768..32767 to -1..1
+ // convert range from -32768..32767 to -1..1
fAxisValue /= 32768.0;
switch (dwAxisMap[i])
{
// user wants forward control to become look control
if (fabs(fAxisValue) > joy_pitchthreshold.value)
- {
+ {
// if mouse invert is on, invert the joystick pitch value
// only absolute control support here (joy_advanced is false)
if (m_pitch.value < 0.0)