X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=keys.h;h=2081e8009e21d9322df83943a5b834df86b8cf81;hb=8b4aa852c404523e96f5dbd21365fff7ef2334b4;hp=c2587aed1b3a0796f25535a1d359982386759c06;hpb=db717d093453e95a1fc005d7c884b12562d7ca9f;p=xonotic%2Fdarkplaces.git diff --git a/keys.h b/keys.h index c2587aed..2081e800 100644 --- a/keys.h +++ b/keys.h @@ -27,7 +27,23 @@ #ifndef __KEYS_H #define __KEYS_H +#include #include "qtypes.h" +#include "qdefs.h" +#include "fs.h" +#include "cmd.h" + +// the highest Unicode character to allow key binding. +// note that an excessively high value may degrade fps +// when code is looping through the bindings +// U+ABFF is probably the highest bindable codepoint, +// see: https://github.com/DarkPlacesEngine/darkplaces/pull/68#issuecomment-1416802873 +#define MAX_KEY_BINDS 0xAC00 + +// how long is a "tinystr" to hold a keyboard key's +// Unicode utf-8 presentation, plus final \x00 +// to allow all characters <= 0xffff, use 4 +#define TINYSTR_LEN 4 // // these are the key numbers that should be passed to Key_Event @@ -349,7 +365,7 @@ typedef enum keynum_e K_MIDINOTE126, K_MIDINOTE127, - MAX_KEYS + MAX_KEYS = MAX_KEY_BINDS } keynum_t; @@ -357,7 +373,7 @@ typedef enum keydest_e { key_game, key_message, key_menu, key_menu_grabbed, key_ extern char key_line[MAX_INPUTLINE]; extern int key_linepos; -extern qboolean key_insert; // insert key toggle (for editing) +extern qbool key_insert; // insert key toggle (for editing) extern keydest_t key_dest; // key_consoleactive bits // user wants console (halfscreen) @@ -367,25 +383,30 @@ extern keydest_t key_dest; extern int key_consoleactive; extern char *keybindings[MAX_BINDMAPS][MAX_KEYS]; -extern void Key_ClearEditLine(int edit_line); -extern int chat_mode; // 0 for say, 1 for say_team, -1 for command +extern signed char chat_mode; // 0 for say, 1 for say_team, -1 for command extern char chat_buffer[MAX_INPUTLINE]; -extern unsigned int chat_bufferlen; +extern int chat_bufferpos; +int Key_ClearEditLine(qbool is_console); void Key_WriteBindings(qfile_t *f); void Key_Init(void); void Key_Shutdown(void); void Key_Init_Cvars(void); -void Key_Event(int key, int ascii, qboolean down); -void Key_ClearStates (void); +void Key_Event(int key, int ascii, qbool down); +void Key_ReleaseAll (void); +void Key_ReleaseAll_f(cmd_state_t *cmd); void Key_EventQueue_Block(void); void Key_EventQueue_Unblock(void); +int Key_AddChar(int unicode, qbool is_console); +int Key_Parse_CommonKeys(cmd_state_t *cmd, qbool is_console, int key, int unicode); -qboolean Key_SetBinding (int keynum, int bindmap, const char *binding); +qbool Key_SetBinding (int keynum, int bindmap, const char *binding); const char *Key_GetBind (int key, int bindmap); void Key_FindKeysForCommand (const char *command, int *keys, int numkeys, int bindmap); -qboolean Key_SetBindMap(int fg, int bg); +qbool Key_SetBindMap(int fg, int bg); void Key_GetBindMap(int *fg, int *bg); +const char *Key_KeynumToString (int keynum, char *buf, size_t buflength); +int Key_StringToKeynum (const char *str); #endif // __KEYS_H