Backport from main trunk:

Honor _windowed_mouse in addition to LibGGI's native Ctrl-Alt-m method.
Requires current LibGII.
Added support for numpad keys and some other ones missing.
This commit is contained in:
Marcus Sundberg 2000-03-19 20:29:42 +00:00
parent 47f1a075fd
commit 27528735bd

View file

@ -44,8 +44,8 @@ cvar_t m_filter = {"m_filter","0", true};
static qboolean mouse_avail;
static float mouse_x, mouse_y;
static float old_mouse_x, old_mouse_y;
static int p_mouse_x;
static int p_mouse_y;
static int p_mouse_x, p_mouse_y;
static float old_windowed_mouse;
static ggi_visual_t ggivis = NULL;
static ggi_mode mode;
@ -683,35 +683,50 @@ static int XLateKey(ggi_key_event *ev)
ev->label = GII_KVAL(ev->label);
}
switch(ev->label) {
case GIIK_P9:
case GIIK_P9: key = KP_PGUP; break;
case GIIK_PageUp: key = K_PGUP; break;
case GIIK_P3:
case GIIK_P3: key = KP_PGDN; break;
case GIIK_PageDown: key = K_PGDN; break;
case GIIK_P7:
case GIIK_P7: key = KP_HOME; break;
case GIIK_Home: key = K_HOME; break;
case GIIK_P1:
case GIIK_P1: key = KP_END; break;
case GIIK_End: key = K_END; break;
case GIIK_P4:
case GIIK_P4: key = KP_LEFTARROW; break;
case GIIK_Left: key = K_LEFTARROW; break;
case GIIK_P6:
case GIIK_P6: key = KP_RIGHTARROW; break;
case GIIK_Right: key = K_RIGHTARROW; break;
case GIIK_P2:
case GIIK_P2: key = KP_DOWNARROW; break;
case GIIK_Down: key = K_DOWNARROW; break;
case GIIK_P8:
case GIIK_P8: key = KP_UPARROW; break;
case GIIK_Up: key = K_UPARROW; break;
case GIIUC_Escape: key = K_ESCAPE; break;
case GIIK_P5: key = KP_5; break;
case GIIK_PBegin: key = K_AUX32; break;
case GIIK_PEnter:
case GIIK_P0: key = KP_INS; break;
case GIIK_Insert: key = K_INS; break;
case GIIK_PSeparator:
case GIIK_PDecimal: key = KP_DEL; break;
case GIIUC_Delete: key = K_DEL; break;
case GIIK_PStar: key = KP_MULTIPLY; break;
case GIIK_PPlus: key = KP_PLUS; break;
case GIIK_PMinus: key = KP_MINUS; break;
case GIIK_PSlash: key = KP_DIVIDE; break;
case GIIK_PEnter: key = KP_ENTER; break;
case GIIUC_Return: key = K_ENTER; break;
case GIIUC_Escape: key = K_ESCAPE; break;
case GIIUC_Tab: key = K_TAB; break;
case GIIK_F1: key = K_F1; break;
@ -729,36 +744,24 @@ static int XLateKey(ggi_key_event *ev)
case GIIUC_BackSpace: key = K_BACKSPACE; break;
case GIIK_PSeparator:
case GIIK_PDecimal:
case GIIUC_Delete: key = K_DEL; break;
case GIIK_Pause: key = K_PAUSE; break;
case GIIK_ShiftL:
case GIIK_ShiftR: key = K_SHIFT; break;
case GIIK_Execute:
case GIIK_CtrlL:
case GIIK_Execute:
case GIIK_CtrlL:
case GIIK_CtrlR: key = K_CTRL; break;
case GIIK_AltL:
case GIIK_MetaL:
case GIIK_AltR:
case GIIK_AltL:
case GIIK_MetaL:
case GIIK_AltR:
case GIIK_MetaR:
case GIIK_AltGr:
case GIIK_ModeSwitch: key = K_ALT; break;
case GIIK_P5:
case GIIK_PBegin: key = K_AUX32; break;
case GIIK_Insert:
case GIIK_P0: key = K_INS; break;
case GIIK_PStar: key = '*'; break;
case GIIK_PPlus: key = '+'; break;
case GIIK_PMinus: key = '-'; break;
case GIIK_PSlash: key = '/'; break;
case GIIK_PrintScreen: key = K_PRNTSCR; break;
case GIIK_ScrollLock: key = K_SCRLCK; break;
case GIIK_Pause: key = K_PAUSE; break;
case GIIK_NumLock: key = KP_NUMLCK; break;
case GIIUC_Comma: case GIIUC_Minus: case GIIUC_Period:
key = ev->label;
@ -869,6 +872,8 @@ void Sys_SendKeyEvents(void)
void IN_Init(void)
{
Cvar_RegisterVariable(&_windowed_mouse);
old_windowed_mouse = -1; /* Force update */
Cvar_RegisterVariable(&m_filter);
if (COM_CheckParm ("-nomouse")) return;
@ -883,7 +888,22 @@ void IN_Shutdown(void)
void IN_Commands(void)
{
/* Mouse buttons are sent from GetEvent() */
/* Only supported by LibGII 0.7 or later. */
#ifdef GII_CMDCODE_PREFER_RELPTR
if (old_windowed_mouse != _windowed_mouse.value) {
gii_event ev;
old_windowed_mouse = _windowed_mouse.value;
ev.cmd.size = sizeof(gii_cmd_nodata_event);
ev.cmd.type = evCommand;
ev.cmd.target = GII_EV_TARGET_ALL;
ev.cmd.code = (int)_windowed_mouse.value ? GII_CMDCODE_PREFER_RELPTR
: GII_CMDCODE_PREFER_ABSPTR;
ggiEventSend(ggivis, &ev);
}
#endif
}
void IN_Move(usercmd_t *cmd)