Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Keyboard code update in progress

  • Loading branch information
slouken committed Jun 10, 2006
1 parent 713e45a commit 76f5f914326d9fa859833bb1ddb6ede71daf854c
Showing with 548 additions and 484 deletions.
  1. +83 −49 include/SDL_keyboard.h
  2. +21 −111 include/SDL_keysym.h
  3. +14 −11 include/SDL_mouse.h
  4. +353 −279 src/events/SDL_keyboard.c
  5. +77 −0 src/events/SDL_keyboard_c.h
  6. +0 −34 src/video/SDL_sysvideo.h
@@ -41,82 +41,116 @@ extern "C" {
/* *INDENT-ON* */
#endif

/* Keysym structure
- The scancode is hardware dependent, and should not be used by general
applications. If no hardware scancode is available, it will be 0.
- The 'unicode' translated character is only available when character
translation is enabled by the SDL_EnableUNICODE() API. If non-zero,
this is a UNICODE character corresponding to the keypress. If the
high 9 bits of the character are 0, then this maps to the equivalent
ASCII character:
char ch;
if ( (keysym.unicode & 0xFF80) == 0 ) {
ch = keysym.unicode & 0x7F;
} else {
An international character..
}
/**
* \struct SDL_keysym
*
* \brief The SDL keysym structure, used in key events.
*/
typedef struct SDL_keysym
{
Uint8 scancode; /* hardware specific scancode */
SDLKey sym; /* SDL virtual keysym */
SDLMod mod; /* current key modifiers */
Uint16 unicode; /* translated character */
Uint8 scancode; /**< keyboard specific scancode */
SDLKey sym; /**< SDL virtual keysym */
SDLMod mod; /**< current key modifiers */
} SDL_keysym;

/* This is the mask which refers to all hotkey bindings */
#define SDL_ALL_HOTKEYS 0xFFFFFFFF

/* Function prototypes */
/*
* Enable/Disable UNICODE translation of keyboard input.
* This translation has some overhead, so translation defaults off.
* If 'enable' is 1, translation is enabled.
* If 'enable' is 0, translation is disabled.
* If 'enable' is -1, the translation state is not changed.
* It returns the previous state of keyboard translation.

/**
* \fn int SDL_GetNumKeyboards(void)
*
* \brief Get the number of keyboard input devices available.
*
* \sa SDL_SelectKeyboard()
*/
extern DECLSPEC int SDLCALL SDL_GetNumKeyboards(void);

/**
* \fn int SDL_SelectKeyboard(int index)
*
* \brief Set the index of the currently selected keyboard.
*
* \return The index of the previously selected keyboard.
*
* \note You can query the currently selected keyboard by passing an index of -1.
*
* \sa SDL_GetNumKeyboards()
*/
extern DECLSPEC int SDLCALL SDL_SelectKeyboard(int index);

/**
* \fn int SDL_EnableUNICODE(int enable)
*
* \brief Enable/Disable UNICODE translation of keyboard input.
*
* \param enable 1 to enable translation, 0 to disable translation, -1 to query translation
*
* \return The previous state of keyboard translation
*
* \note This translation has some overhead, so translation defaults off.
*/
extern DECLSPEC int SDLCALL SDL_EnableUNICODE(int enable);

/*
* Enable/Disable keyboard repeat. Keyboard repeat defaults to off.
* 'delay' is the initial delay in ms between the time when a key is
* pressed, and keyboard repeat begins.
* 'interval' is the time in ms between keyboard repeat events.
/**
* \fn int SDL_EnableKeyRepeat(int delay, int interval)
*
* \brief Enable keyboard repeat for the selected keyboard.
*
* \param delay The initial delay in milliseconds between the time when a
* key is pressed and keyboard repeat begins. Setting a delay
* of 0 will disable keyboard repeat.
* \param interval The time in milliseconds between keyboard repeat events.
*
* \return 0 on success, or -1 if there was an error.
*
* \note Keyboard repeat defaults to off.
*/
#define SDL_DEFAULT_REPEAT_DELAY 500
#define SDL_DEFAULT_REPEAT_INTERVAL 30
/*
* If 'delay' is set to 0, keyboard repeat is disabled.
/**/
extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval);

/**
* \fn void SDL_GetKeyRepeat(int *delay, int *interval)
*
* \brief Get the current keyboard repeat setting for the selected keyboard.
*/
extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval);
extern DECLSPEC void SDLCALL SDL_GetKeyRepeat(int *delay, int *interval);

/*
* Get a snapshot of the current state of the keyboard.
* Returns an array of keystates, indexed by the SDLK_* syms.
* Used:
/**
* \fn Uint8 *SDL_GetKeyState(int *numkeys)
*
* \brief Get a snapshot of the current state of the selected keyboard.
*
* \return An array of keystates, indexed by the SDLK_* syms.
*
* Example:
* Uint8 *keystate = SDL_GetKeyState(NULL);
* if ( keystate[SDLK_RETURN] ) ... <RETURN> is pressed.
*/
extern DECLSPEC Uint8 *SDLCALL SDL_GetKeyState(int *numkeys);

/*
* Get the current key modifier state
/**
* \fn SDLMod SDL_GetModState(void)
*
* \brief Get the current key modifier state for the selected keyboard.
*/
extern DECLSPEC SDLMod SDLCALL SDL_GetModState(void);

/*
* Set the current key modifier state
* This does not change the keyboard state, only the key modifier flags.
/**
* \fn void SDL_SetModState(SDLMod modstate)
*
* \brief Set the current key modifier state for the selected keyboard.
*
* \note This does not change the keyboard state, only the key modifier flags.
*/
extern DECLSPEC void SDLCALL SDL_SetModState(SDLMod modstate);

/*
* Get the name of an SDL virtual keysym
/**
* \fn const char *SDL_GetKeyName(SDLKey key)
*
* \brief Get the name of an SDL virtual keysym
*/
extern DECLSPEC char *SDLCALL SDL_GetKeyName(SDLKey key);
extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDLKey key);


/* Ends C function definitions when using C++ */
@@ -27,12 +27,16 @@
#ifndef _SDL_keysym_h
#define _SDL_keysym_h

/* What we really want is a mapping of every raw key on the keyboard.
To support international keyboards, we use the range 0xA1 - 0xFF
as international virtual keycodes. We'll follow in the footsteps of X11...
The names of the keys
/**
* \enum SDLKey
*
* \brief The SDL virtual key representation
*
* The SDLKey represents the unmodified character printed on the key
* for the current keyboard layout. The first 255 characters are used
* unchanged from Latin-1, e.g. a key with 'a' on it will have the value "a".
* The rest of the keys are named below, and fall into the range above 255.
*/

typedef enum
{
/* The keyboard syms have been cleverly chosen to map to ASCII */
@@ -114,104 +118,6 @@ typedef enum
SDLK_DELETE = 127,
/* End of ASCII mapped keysyms */

/* International keyboard syms */
SDLK_WORLD_0 = 160, /* 0xA0 */
SDLK_WORLD_1 = 161,
SDLK_WORLD_2 = 162,
SDLK_WORLD_3 = 163,
SDLK_WORLD_4 = 164,
SDLK_WORLD_5 = 165,
SDLK_WORLD_6 = 166,
SDLK_WORLD_7 = 167,
SDLK_WORLD_8 = 168,
SDLK_WORLD_9 = 169,
SDLK_WORLD_10 = 170,
SDLK_WORLD_11 = 171,
SDLK_WORLD_12 = 172,
SDLK_WORLD_13 = 173,
SDLK_WORLD_14 = 174,
SDLK_WORLD_15 = 175,
SDLK_WORLD_16 = 176,
SDLK_WORLD_17 = 177,
SDLK_WORLD_18 = 178,
SDLK_WORLD_19 = 179,
SDLK_WORLD_20 = 180,
SDLK_WORLD_21 = 181,
SDLK_WORLD_22 = 182,
SDLK_WORLD_23 = 183,
SDLK_WORLD_24 = 184,
SDLK_WORLD_25 = 185,
SDLK_WORLD_26 = 186,
SDLK_WORLD_27 = 187,
SDLK_WORLD_28 = 188,
SDLK_WORLD_29 = 189,
SDLK_WORLD_30 = 190,
SDLK_WORLD_31 = 191,
SDLK_WORLD_32 = 192,
SDLK_WORLD_33 = 193,
SDLK_WORLD_34 = 194,
SDLK_WORLD_35 = 195,
SDLK_WORLD_36 = 196,
SDLK_WORLD_37 = 197,
SDLK_WORLD_38 = 198,
SDLK_WORLD_39 = 199,
SDLK_WORLD_40 = 200,
SDLK_WORLD_41 = 201,
SDLK_WORLD_42 = 202,
SDLK_WORLD_43 = 203,
SDLK_WORLD_44 = 204,
SDLK_WORLD_45 = 205,
SDLK_WORLD_46 = 206,
SDLK_WORLD_47 = 207,
SDLK_WORLD_48 = 208,
SDLK_WORLD_49 = 209,
SDLK_WORLD_50 = 210,
SDLK_WORLD_51 = 211,
SDLK_WORLD_52 = 212,
SDLK_WORLD_53 = 213,
SDLK_WORLD_54 = 214,
SDLK_WORLD_55 = 215,
SDLK_WORLD_56 = 216,
SDLK_WORLD_57 = 217,
SDLK_WORLD_58 = 218,
SDLK_WORLD_59 = 219,
SDLK_WORLD_60 = 220,
SDLK_WORLD_61 = 221,
SDLK_WORLD_62 = 222,
SDLK_WORLD_63 = 223,
SDLK_WORLD_64 = 224,
SDLK_WORLD_65 = 225,
SDLK_WORLD_66 = 226,
SDLK_WORLD_67 = 227,
SDLK_WORLD_68 = 228,
SDLK_WORLD_69 = 229,
SDLK_WORLD_70 = 230,
SDLK_WORLD_71 = 231,
SDLK_WORLD_72 = 232,
SDLK_WORLD_73 = 233,
SDLK_WORLD_74 = 234,
SDLK_WORLD_75 = 235,
SDLK_WORLD_76 = 236,
SDLK_WORLD_77 = 237,
SDLK_WORLD_78 = 238,
SDLK_WORLD_79 = 239,
SDLK_WORLD_80 = 240,
SDLK_WORLD_81 = 241,
SDLK_WORLD_82 = 242,
SDLK_WORLD_83 = 243,
SDLK_WORLD_84 = 244,
SDLK_WORLD_85 = 245,
SDLK_WORLD_86 = 246,
SDLK_WORLD_87 = 247,
SDLK_WORLD_88 = 248,
SDLK_WORLD_89 = 249,
SDLK_WORLD_90 = 250,
SDLK_WORLD_91 = 251,
SDLK_WORLD_92 = 252,
SDLK_WORLD_93 = 253,
SDLK_WORLD_94 = 254,
SDLK_WORLD_95 = 255, /* 0xFF */

/* Numeric keypad */
SDLK_KP0 = 256,
SDLK_KP1 = 257,
@@ -271,27 +177,31 @@ typedef enum
SDLK_LALT = 308,
SDLK_RMETA = 309,
SDLK_LMETA = 310,
SDLK_LSUPER = 311, /* Left "Windows" key */
SDLK_RSUPER = 312, /* Right "Windows" key */
SDLK_MODE = 313, /* "Alt Gr" key */
SDLK_COMPOSE = 314, /* Multi-key compose key */
SDLK_LSUPER = 311, /**< Left "Windows" key */
SDLK_RSUPER = 312, /**< Right "Windows" key */
SDLK_MODE = 313, /**< "Alt Gr" key */
SDLK_COMPOSE = 314, /**< Multi-key compose key */

/* Miscellaneous function keys */
SDLK_HELP = 315,
SDLK_PRINT = 316,
SDLK_SYSREQ = 317,
SDLK_BREAK = 318,
SDLK_MENU = 319,
SDLK_POWER = 320, /* Power Macintosh power key */
SDLK_EURO = 321, /* Some european keyboards */
SDLK_UNDO = 322, /* Atari keyboard has Undo */
SDLK_POWER = 320, /**< Power Macintosh power key */
SDLK_EURO = 321, /**< Some european keyboards */
SDLK_UNDO = 322, /**< Atari keyboard has Undo */

/* Add any other keys here */

SDLK_LAST
} SDLKey;

/* Enumeration of valid key mods (possibly OR'd together) */
/**
* \enum SDLMod
*
* \brief Enumeration of valid key mods (possibly OR'd together)
*/
typedef enum
{
KMOD_NONE = 0x0000,

0 comments on commit 76f5f91

Please sign in to comment.