mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-02-10 01:31:14 +00:00
input: More text input restructuring.
git-svn-id: svn://svn.code.sf.net/p/quakespasm/code/trunk/quakespasm@1077 af15c1b1-3010-417e-b628-4374ebc0bcbd
This commit is contained in:
parent
ebe223a689
commit
8d0cb0086a
5 changed files with 130 additions and 30 deletions
|
@ -1222,6 +1222,7 @@ Con_NotifyBox
|
||||||
void Con_NotifyBox (const char *text)
|
void Con_NotifyBox (const char *text)
|
||||||
{
|
{
|
||||||
double t1, t2;
|
double t1, t2;
|
||||||
|
int lastkey, lastchar;
|
||||||
|
|
||||||
// during startup for sound / cd warnings
|
// during startup for sound / cd warnings
|
||||||
Con_Printf ("\n\n%s", Con_Quakebar(40)); //johnfitz
|
Con_Printf ("\n\n%s", Con_Quakebar(40)); //johnfitz
|
||||||
|
@ -1229,18 +1230,21 @@ void Con_NotifyBox (const char *text)
|
||||||
Con_Printf ("Press a key.\n");
|
Con_Printf ("Press a key.\n");
|
||||||
Con_Printf ("%s", Con_Quakebar(40)); //johnfitz
|
Con_Printf ("%s", Con_Quakebar(40)); //johnfitz
|
||||||
|
|
||||||
key_count = -2; // wait for a key down and up
|
|
||||||
IN_Deactivate(modestate == MS_WINDOWED);
|
IN_Deactivate(modestate == MS_WINDOWED);
|
||||||
key_dest = key_console;
|
key_dest = key_console;
|
||||||
|
|
||||||
|
Key_BeginInputGrab ();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
t1 = Sys_DoubleTime ();
|
t1 = Sys_DoubleTime ();
|
||||||
SCR_UpdateScreen ();
|
SCR_UpdateScreen ();
|
||||||
Sys_SendKeyEvents ();
|
Sys_SendKeyEvents ();
|
||||||
|
Key_GetGrabbedInput (&lastkey, &lastchar);
|
||||||
|
Sys_Sleep (16);
|
||||||
t2 = Sys_DoubleTime ();
|
t2 = Sys_DoubleTime ();
|
||||||
realtime += t2-t1; // make the cursor blink
|
realtime += t2-t1; // make the cursor blink
|
||||||
} while (key_count < 0);
|
} while (lastkey == 0 && lastchar == 0);
|
||||||
|
Key_EndInputGrab ();
|
||||||
|
|
||||||
Con_Printf ("\n");
|
Con_Printf ("\n");
|
||||||
IN_Activate();
|
IN_Activate();
|
||||||
|
|
|
@ -898,6 +898,7 @@ keypress.
|
||||||
int SCR_ModalMessage (const char *text, float timeout) //johnfitz -- timeout
|
int SCR_ModalMessage (const char *text, float timeout) //johnfitz -- timeout
|
||||||
{
|
{
|
||||||
double time1, time2; //johnfitz -- timeout
|
double time1, time2; //johnfitz -- timeout
|
||||||
|
int lastkey, lastchar;
|
||||||
|
|
||||||
if (cls.state == ca_dedicated)
|
if (cls.state == ca_dedicated)
|
||||||
return true;
|
return true;
|
||||||
|
@ -914,20 +915,18 @@ int SCR_ModalMessage (const char *text, float timeout) //johnfitz -- timeout
|
||||||
time1 = Sys_DoubleTime () + timeout; //johnfitz -- timeout
|
time1 = Sys_DoubleTime () + timeout; //johnfitz -- timeout
|
||||||
time2 = 0.0f; //johnfitz -- timeout
|
time2 = 0.0f; //johnfitz -- timeout
|
||||||
|
|
||||||
|
Key_BeginInputGrab ();
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
key_count = -1; // wait for a key down and up
|
|
||||||
Sys_SendKeyEvents ();
|
Sys_SendKeyEvents ();
|
||||||
Sys_Sleep(16);
|
Key_GetGrabbedInput (&lastkey, &lastchar);
|
||||||
|
Sys_Sleep (16);
|
||||||
if (timeout) time2 = Sys_DoubleTime (); //johnfitz -- zero timeout means wait forever.
|
if (timeout) time2 = Sys_DoubleTime (); //johnfitz -- zero timeout means wait forever.
|
||||||
} while (key_lastpress != 'y' &&
|
} while (lastchar != 'y' && lastchar != 'Y' &&
|
||||||
key_lastpress != 'n' &&
|
lastchar != 'n' && lastchar != 'N' &&
|
||||||
key_lastpress != K_ESCAPE &&
|
lastkey != K_ESCAPE &&
|
||||||
time2 <= time1);
|
time2 <= time1);
|
||||||
|
Key_EndInputGrab ();
|
||||||
// make sure we don't ignore the next keypress
|
|
||||||
if (key_count < 0)
|
|
||||||
key_count = 0;
|
|
||||||
|
|
||||||
// SCR_UpdateScreen (); //johnfitz -- commented out
|
// SCR_UpdateScreen (); //johnfitz -- commented out
|
||||||
|
|
||||||
|
@ -936,7 +935,7 @@ int SCR_ModalMessage (const char *text, float timeout) //johnfitz -- timeout
|
||||||
return false;
|
return false;
|
||||||
//johnfitz
|
//johnfitz
|
||||||
|
|
||||||
return key_lastpress == 'y';
|
return (lastchar == 'y' || lastchar == 'Y');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
100
Quake/keys.c
100
Quake/keys.c
|
@ -32,7 +32,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
char key_lines[CMDLINES][MAXCMDLINE];
|
char key_lines[CMDLINES][MAXCMDLINE];
|
||||||
|
|
||||||
int key_linepos;
|
int key_linepos;
|
||||||
int key_lastpress;
|
|
||||||
int key_insert; //johnfitz -- insert key toggle (for editing)
|
int key_insert; //johnfitz -- insert key toggle (for editing)
|
||||||
double key_blinktime; //johnfitz -- fudge cursor blinking to make it easier to spot in certain cases
|
double key_blinktime; //johnfitz -- fudge cursor blinking to make it easier to spot in certain cases
|
||||||
|
|
||||||
|
@ -41,8 +40,6 @@ int history_line = 0;
|
||||||
|
|
||||||
keydest_t key_dest;
|
keydest_t key_dest;
|
||||||
|
|
||||||
int key_count; // incremented every key event
|
|
||||||
|
|
||||||
#define MAX_KEYS 256
|
#define MAX_KEYS 256
|
||||||
|
|
||||||
char *keybindings[MAX_KEYS];
|
char *keybindings[MAX_KEYS];
|
||||||
|
@ -853,11 +850,8 @@ void Key_Init (void)
|
||||||
ignoretext[K_DOWNARROW] = true;
|
ignoretext[K_DOWNARROW] = true;
|
||||||
ignoretext[K_LEFTARROW] = true;
|
ignoretext[K_LEFTARROW] = true;
|
||||||
ignoretext[K_RIGHTARROW] = true;
|
ignoretext[K_RIGHTARROW] = true;
|
||||||
ignoretext[K_ALT] = true;
|
|
||||||
ignoretext[K_CTRL] = true;
|
ignoretext[K_CTRL] = true;
|
||||||
ignoretext[K_SHIFT] = true;
|
ignoretext[K_SHIFT] = true;
|
||||||
for (i = 0; i < 12; i++)
|
|
||||||
ignoretext[K_F1+i] = true;
|
|
||||||
ignoretext[K_BACKSPACE] = true;
|
ignoretext[K_BACKSPACE] = true;
|
||||||
ignoretext[K_INS] = true;
|
ignoretext[K_INS] = true;
|
||||||
ignoretext[K_DEL] = true;
|
ignoretext[K_DEL] = true;
|
||||||
|
@ -865,7 +859,6 @@ void Key_Init (void)
|
||||||
ignoretext[K_PGUP] = true;
|
ignoretext[K_PGUP] = true;
|
||||||
ignoretext[K_HOME] = true;
|
ignoretext[K_HOME] = true;
|
||||||
ignoretext[K_END] = true;
|
ignoretext[K_END] = true;
|
||||||
ignoretext[K_KP_NUMLOCK] = true;
|
|
||||||
ignoretext[K_KP_HOME] = true;
|
ignoretext[K_KP_HOME] = true;
|
||||||
ignoretext[K_KP_UPARROW] = true;
|
ignoretext[K_KP_UPARROW] = true;
|
||||||
ignoretext[K_KP_PGUP] = true;
|
ignoretext[K_KP_PGUP] = true;
|
||||||
|
@ -878,7 +871,6 @@ void Key_Init (void)
|
||||||
ignoretext[K_KP_INS] = true;
|
ignoretext[K_KP_INS] = true;
|
||||||
ignoretext[K_KP_DEL] = true;
|
ignoretext[K_KP_DEL] = true;
|
||||||
ignoretext[K_COMMAND] = true;
|
ignoretext[K_COMMAND] = true;
|
||||||
ignoretext[K_PAUSE] = true;
|
|
||||||
ignoretext[K_MWHEELUP] = true;
|
ignoretext[K_MWHEELUP] = true;
|
||||||
ignoretext[K_MWHEELDOWN] = true;
|
ignoretext[K_MWHEELDOWN] = true;
|
||||||
|
|
||||||
|
@ -891,6 +883,51 @@ void Key_Init (void)
|
||||||
Cmd_AddCommand ("unbindall",Key_Unbindall_f);
|
Cmd_AddCommand ("unbindall",Key_Unbindall_f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
qboolean active;
|
||||||
|
int lastkey;
|
||||||
|
int lastchar;
|
||||||
|
} key_inputgrab;
|
||||||
|
|
||||||
|
/*
|
||||||
|
===================
|
||||||
|
Key_BeginInputGrab
|
||||||
|
===================
|
||||||
|
*/
|
||||||
|
void Key_BeginInputGrab (void)
|
||||||
|
{
|
||||||
|
key_inputgrab.active = true;
|
||||||
|
key_inputgrab.lastkey = 0;
|
||||||
|
key_inputgrab.lastchar = 0;
|
||||||
|
|
||||||
|
IN_UpdateInputMode ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===================
|
||||||
|
Key_EndInputGrab
|
||||||
|
===================
|
||||||
|
*/
|
||||||
|
void Key_EndInputGrab (void)
|
||||||
|
{
|
||||||
|
key_inputgrab.active = false;
|
||||||
|
|
||||||
|
IN_UpdateInputMode ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
===================
|
||||||
|
Key_GetGrabbedInput
|
||||||
|
===================
|
||||||
|
*/
|
||||||
|
void Key_GetGrabbedInput (int *lastkey, int *lastchar)
|
||||||
|
{
|
||||||
|
if (lastkey)
|
||||||
|
*lastkey = key_inputgrab.lastkey;
|
||||||
|
if (lastchar)
|
||||||
|
*lastchar = key_inputgrab.lastchar;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===================
|
===================
|
||||||
Key_Event
|
Key_Event
|
||||||
|
@ -910,12 +947,18 @@ void Key_Event (int key, qboolean down)
|
||||||
keydown[key] = down;
|
keydown[key] = down;
|
||||||
|
|
||||||
if (!down)
|
if (!down)
|
||||||
key_repeats[key] = 0;
|
{
|
||||||
|
if (key_repeats[key] == 0)
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
key_repeats[key] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
key_lastpress = key;
|
if (key_inputgrab.active)
|
||||||
key_count++;
|
{
|
||||||
if (key_count <= 0)
|
key_inputgrab.lastkey = key;
|
||||||
return; // just catching keys for Con_NotifyBox
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// update auto-repeat status
|
// update auto-repeat status
|
||||||
if (down)
|
if (down)
|
||||||
|
@ -1031,6 +1074,12 @@ void Char_Event (int key)
|
||||||
if (key < 32 || key > 126)
|
if (key < 32 || key > 126)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (key_inputgrab.active)
|
||||||
|
{
|
||||||
|
key_inputgrab.lastchar = key;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (key_dest)
|
switch (key_dest)
|
||||||
{
|
{
|
||||||
case key_message:
|
case key_message:
|
||||||
|
@ -1054,8 +1103,24 @@ Key_InputtingText
|
||||||
*/
|
*/
|
||||||
qboolean Key_InputtingText (void)
|
qboolean Key_InputtingText (void)
|
||||||
{
|
{
|
||||||
return (key_dest == key_console || (key_dest == key_game && con_forcedup) ||
|
if (key_inputgrab.active)
|
||||||
key_dest == key_message || (key_dest == key_menu && M_InputtingText()));
|
return true;
|
||||||
|
|
||||||
|
switch (key_dest)
|
||||||
|
{
|
||||||
|
case key_message:
|
||||||
|
return true;
|
||||||
|
case key_menu:
|
||||||
|
return M_InputtingText();
|
||||||
|
case key_game:
|
||||||
|
if (!con_forcedup)
|
||||||
|
return false;
|
||||||
|
/* fallthrough */
|
||||||
|
case key_console:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1065,6 +1130,11 @@ Key_IgnoreTextInput
|
||||||
*/
|
*/
|
||||||
qboolean Key_IgnoreTextInput (int key)
|
qboolean Key_IgnoreTextInput (int key)
|
||||||
{
|
{
|
||||||
|
#if defined(PLATFORM_OSX) || defined(PLATFORM_MAC)
|
||||||
|
if (keydown[K_COMMAND])
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (keydown[K_CTRL])
|
if (keydown[K_CTRL])
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,10 @@ void Key_Init (void);
|
||||||
void Key_ClearStates (void);
|
void Key_ClearStates (void);
|
||||||
void Key_UpdateForDest (void);
|
void Key_UpdateForDest (void);
|
||||||
|
|
||||||
|
void Key_BeginInputGrab (void);
|
||||||
|
void Key_EndInputGrab (void);
|
||||||
|
void Key_GetGrabbedInput (int *lastkey, int *lastchar);
|
||||||
|
|
||||||
void Key_Event (int key, qboolean down);
|
void Key_Event (int key, qboolean down);
|
||||||
void Char_Event (int key);
|
void Char_Event (int key);
|
||||||
qboolean Key_InputtingText (void);
|
qboolean Key_InputtingText (void);
|
||||||
|
|
27
Quake/menu.c
27
Quake/menu.c
|
@ -1557,10 +1557,28 @@ void M_Menu_Quit_f (void)
|
||||||
|
|
||||||
|
|
||||||
void M_Quit_Key (int key)
|
void M_Quit_Key (int key)
|
||||||
|
{
|
||||||
|
if (key == K_ESCAPE)
|
||||||
|
{
|
||||||
|
if (wasInMenus)
|
||||||
|
{
|
||||||
|
m_state = m_quit_prevstate;
|
||||||
|
m_entersound = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IN_Activate();
|
||||||
|
key_dest = key_game;
|
||||||
|
m_state = m_none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void M_Quit_Char (int key)
|
||||||
{
|
{
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
case K_ESCAPE:
|
|
||||||
case 'n':
|
case 'n':
|
||||||
case 'N':
|
case 'N':
|
||||||
if (wasInMenus)
|
if (wasInMenus)
|
||||||
|
@ -1576,8 +1594,8 @@ void M_Quit_Key (int key)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'Y':
|
|
||||||
case 'y':
|
case 'y':
|
||||||
|
case 'Y':
|
||||||
IN_Deactivate(modestate == MS_WINDOWED);
|
IN_Deactivate(modestate == MS_WINDOWED);
|
||||||
key_dest = key_console;
|
key_dest = key_console;
|
||||||
Host_Quit_f ();
|
Host_Quit_f ();
|
||||||
|
@ -2645,6 +2663,9 @@ void M_Charinput (int key)
|
||||||
case m_setup:
|
case m_setup:
|
||||||
M_Setup_Char (key);
|
M_Setup_Char (key);
|
||||||
return;
|
return;
|
||||||
|
case m_quit:
|
||||||
|
M_Quit_Char (key);
|
||||||
|
return;
|
||||||
case m_lanconfig:
|
case m_lanconfig:
|
||||||
M_LanConfig_Char (key);
|
M_LanConfig_Char (key);
|
||||||
return;
|
return;
|
||||||
|
@ -2660,6 +2681,8 @@ qboolean M_InputtingText (void)
|
||||||
{
|
{
|
||||||
case m_setup:
|
case m_setup:
|
||||||
return M_Setup_InputtingText();
|
return M_Setup_InputtingText();
|
||||||
|
case m_quit:
|
||||||
|
return true;
|
||||||
case m_lanconfig:
|
case m_lanconfig:
|
||||||
return M_LanConfig_InputtingText();
|
return M_LanConfig_InputtingText();
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue