fteqw/engine/client/keys.h
Spoike 2361c7d14f Flattened downloads menu.
Added scrollbars to various menus (when they're too tall for the virtual screen height).
Added warnings when qc draws to the screen outside of where it'll actually be displayed (freecs is guilty of this).
r_showshaders will now work in q2.
mod_texturelist will include a small preview, because I can.
plug_list command will now also display some plugins which are not currently loaded.
q1bsp now properly respects hitcontents (note that normally only hull 0 actually has contents other than solid+empty).
q1bsp now correctly reports content values in tracelines (this fixes freecs being unable to detect func_water).
Rewrote netgraph code. Now displays using polygons instead of textures for higher resolution graphs.
Fixed texture bug that appears with nouveau's core contexts (texture unit switches were not happening).
Added some better support for disabling vsync with nouveau, although its still broken fullscreen for some reason.
Changed fteqcc's warning for unrecognised CRCs. Should be more descriptive about the usual cause (but less technical and potentially technically wrong).



git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5378 fc73d0e0-1445-4013-8a0c-d673dee63da5
2019-01-13 16:51:50 +00:00

322 lines
6.5 KiB
C

/*
Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __CLIENT_KEYS_H__
#define __CLIENT_KEYS_H__
enum
{ //fte's assumed gamepad axis
GPAXIS_LT_RIGHT = 0,
GPAXIS_LT_DOWN = 1,
GPAXIS_LT_AUX = 2,
GPAXIS_RT_RIGHT = 3,
GPAXIS_RT_DOWN = 4,
GPAXIS_RT_AUX = 5,
//gah
#define GPAXIS_LT_TRIGGER GPAXIS_LT_AUX
#define GPAXIS_RT_TRIGGER GPAXIS_RT_AUX
};
//
// these are the key numbers that should be passed to Key_Event
//
enum {
K_TAB = 9,
K_ENTER = 13,
K_ESCAPE = 27,
K_SPACE = 32,
// normal keys should be passed as lowercased ascii
K_BACKSPACE = 127,
K_SCRLCK,
K_CAPSLOCK,
K_POWER,
K_PAUSE,
K_UPARROW,
K_DOWNARROW,
K_LEFTARROW,
K_RIGHTARROW,
K_LALT,
K_LCTRL,
K_LSHIFT,
K_INS,
K_DEL,
K_PGDN,
K_PGUP,
K_HOME,
K_END,
K_F1,
K_F2,
K_F3,
K_F4,
K_F5,
K_F6,
K_F7,
K_F8,
K_F9,
K_F10,
K_F11,
K_F12,
K_F13,
K_F14,
K_F15,
K_KP_HOME,
K_KP_UPARROW,
K_KP_PGUP,
K_KP_LEFTARROW,
K_KP_5,
K_KP_RIGHTARROW,
K_KP_END,
K_KP_DOWNARROW,
K_KP_PGDN,
K_KP_ENTER,
K_KP_INS,
K_KP_DEL,
K_KP_SLASH,
K_KP_MINUS,
K_KP_PLUS,
K_KP_NUMLOCK,
K_KP_STAR,
K_KP_EQUALS,
//
// mouse buttons generate virtual keys
//
K_MOUSE1,
K_MOUSE2,
K_MOUSE3,
K_MOUSE4,
K_MOUSE5,
K_MOUSE6,
K_MOUSE7,
K_MOUSE8,
K_MOUSE9,
K_MOUSE10,
// JACK: Intellimouse(c) Mouse Wheel Support
K_MWHEELUP,
K_MWHEELDOWN, // 189
K_GP_A = 190,
K_GP_B = 191,
K_GP_X = 192,
K_GP_Y = 193,
K_GP_LEFT_SHOULDER = 194,
K_GP_RIGHT_SHOULDER = 195,
K_GP_LEFT_TRIGGER = 196,
K_GP_RIGHT_TRIGGER = 197,
K_GP_BACK = 198,
K_GP_START = 199,
K_GP_LEFT_THUMB = 200,
K_GP_RIGHT_THUMB = 201,
K_GP_GUIDE = 202,
//
// joystick buttons
//
K_JOY1 = 203,
K_JOY2 = 204,
K_JOY3 = 205,
K_JOY4 = 206,
//
// aux keys are for multi-buttoned joysticks to generate so they can use
// the normal binding process
//
K_AUX1 = 207,
K_AUX2 = 208,
K_AUX3 = 209,
K_AUX4 = 210,
K_AUX5 = 211,
K_AUX6 = 212,
K_AUX7 = 213,
K_AUX8 = 214,
K_AUX9 = 215,
K_AUX10 = 216,
K_AUX11 = 217,
K_AUX12 = 218,
K_AUX13 = 219,
K_AUX14 = 220,
K_AUX15 = 221,
K_AUX16 = 222,
K_AUX17 = 223,
K_AUX18 = 224,
K_AUX19 = 225,
K_AUX20 = 226,
K_AUX21 = 227,
K_AUX22 = 228,
K_AUX23 = 229,
K_AUX24 = 230,
K_AUX25 = 231,
K_AUX26 = 232,
K_AUX27 = 233,
K_AUX28 = 234,
K_AUX29 = 235,
K_AUX30 = 236,
K_AUX31 = 237,
K_AUX32 = 238,
K_LWIN = 239,
K_RWIN = 240,
K_APP = 241,
K_SEARCH = 242,
K_VOLUP = 243,
K_VOLDOWN = 244,
K_RALT = 245,
K_RCTRL = 246,
K_RSHIFT = 247,
K_PRINTSCREEN = 248,
//K_UNUSED = 249,
//K_UNUSED = 250,
K_GP_DPAD_UP = 251,
K_GP_DPAD_DOWN = 252,
K_GP_DPAD_LEFT = 253,
K_GP_DPAD_RIGHT = 254,
K_GP_UNKNOWN = 255,
//axis->button emulation. for weird people.
K_GP_LEFT_THUMB_UP,
K_GP_LEFT_THUMB_DOWN,
K_GP_LEFT_THUMB_LEFT,
K_GP_LEFT_THUMB_RIGHT,
K_GP_RIGHT_THUMB_UP,
K_GP_RIGHT_THUMB_DOWN,
K_GP_RIGHT_THUMB_LEFT,
K_GP_RIGHT_THUMB_RIGHT,
K_JOY_UP,
K_JOY_DOWN,
K_JOY_LEFT,
K_JOY_RIGHT,
K_MM_BROWSER_BACK,
K_MM_BROWSER_FAVORITES,
K_MM_BROWSER_FORWARD,
K_MM_BROWSER_HOME,
K_MM_BROWSER_REFRESH,
K_MM_BROWSER_STOP,
K_MM_VOLUME_MUTE,
K_MM_TRACK_NEXT,
K_MM_TRACK_PREV,
K_MM_TRACK_STOP,
K_MM_TRACK_PLAYPAUSE,
K_MAX
};
#define KEY_MODIFIER_SHIFT (1<<0)
#define KEY_MODIFIER_ALT (1<<1)
#define KEY_MODIFIER_CTRL (1<<2)
//#define KEY_MODIFIER_META (1<<?) do we want?
#define KEY_MODIFIER_ALTBINDMAP (1<<3)
#define KEY_MODIFIERSTATES (1<<4)
//legacy aliases, lest we ever forget!
#define K_SHIFT K_LSHIFT
#define K_CTRL K_LCTRL
#define K_ALT K_LALT
#define K_WIN K_LWIN
#ifdef __QUAKEDEF_H__
typedef enum //highest has priority
{
kdm_game = 1u<<0, //should always be set
kdm_centerprint = 1u<<1, //enabled when there's a centerprint menu with clickable things.
kdm_message = 1u<<2,
kdm_gmenu = 1u<<3, //menu.dat
#ifdef MENU_NATIVECODE
kdm_nmenu = 1u<<4, //should probably reuse gmenu...
#else
kdm_nmenu = 0,
#endif
kdm_emenu = 1u<<5, //engine's menus
kdm_console = 1u<<6,
kdm_cwindows = 1u<<7,
} keydestmask_t;
//unsigned int Key_Dest_Get(void); //returns highest priority destination
#define Key_Dest_Add(kdm) (key_dest_mask |= (kdm))
#define Key_Dest_Remove(kdm) (key_dest_mask &= ~(kdm))
#define Key_Dest_Has(kdm) (key_dest_mask & (kdm))
#define Key_Dest_Has_Higher(kdm) (key_dest_mask & (~0&~((kdm)|((kdm)-1)))) //must be a single bit
#define Key_Dest_Toggle(kdm) do {if (key_dest_mask & kdm) Key_Dest_Remove(kdm); else Key_Dest_Add(kdm);}while(0)
extern unsigned int key_dest_absolutemouse; //if the active key dest bit is set, the mouse is absolute.
extern unsigned int key_dest_mask;
extern char *keybindings[K_MAX][KEY_MODIFIERSTATES];
extern int key_repeats[K_MAX];
extern int key_count; // incremented every key event
extern int key_lastpress;
enum
{
kc_game, //csprogs.dat
kc_menu, //menu.dat
#ifdef MENU_NATIVECODE
kc_nmenu,
#endif
kc_console, //generic engine-defined cursor
kc_max
};
extern struct key_cursor_s
{
char name[MAX_QPATH];
float hotspot[2];
float scale;
qboolean dirty;
void *handle;
} key_customcursor[kc_max];
extern unsigned char *chat_buffer;
extern int chat_bufferpos;
extern qboolean chat_team;
void Key_Event (unsigned int devid, int key, unsigned int unicode, qboolean down);
void Key_Init (void);
void IN_WriteButtons(vfsfile_t *f, qboolean all);
void Key_WriteBindings (struct vfsfile_s *f);
void Key_SetBinding (int keynum, int modifier, const char *binding, int cmdlevel);
void Key_ClearStates (void);
qboolean Key_Centerprint(int key, int unicode, unsigned int devid);
void Key_Unbindall_f (void); //aka: Key_Shutdown
void Key_ConsoleReplace(const char *instext);
void Key_DefaultLinkClicked(console_t *con, char *text, char *info);
qboolean Key_Console (console_t *con, int key, unsigned int unicode);
void Key_ConsoleRelease(console_t *con, int key, unsigned int unicode);
struct console_s;
qboolean Key_GetConsoleSelectionBox(struct console_s *con, int *sx, int *sy, int *ex, int *ey);
qboolean Key_MouseShouldBeFree(void);
const char *Key_Demoji(char *buffer, size_t buffersize, const char *in); //strips out :smile: stuff.
#endif
#endif