comparison src/video/SDL_sysvideo.h @ 2268:4baee598306d

Date: Thu, 05 Jul 2007 14:02:33 -0700 From: Sam Lantinga Subject: SDL 1.3 keyboard plan After lots of discussion with Christian, this is what we came up with: > So, to sum up... > SDLK_* become the physical keys, starting at > (1<<21) > We create a macro SDLK_INDEX(X) > We have two functions SDL_GetLayoutKey(SDLKey) and SDL_GetKeyName() > SDL_GetLayoutKey maps to UCS4 for printable characters, and SDLK* for non-printable characters > and does so based on the OS's current keyboard layout > SDL_GetKeyName() handles both SDLK_* and UCS4, converting UCS4 to UTF-8 and converting SDLK_* into our names, which are UTF-8 for printable characters. > WASD folks use SDLK_*, and 'I' folks use SDL_GetLayoutKey(SDLK_*) Here is the patch he came up with, and his e-mail about it: Date: Fri, 17 Aug 2007 19:50:28 +0200 From: Christian Walther Subject: Re: SDL 1.3 keyboard plan > Sounds great, go ahead and send me a patch. Here goes! Thanks for having a look. Don't hesitate to comment if anything does not conform to your ideas. One caveat: Committing this now may break compilability of some video drivers - specifically, if they use any of the SDLK_* codes that were obsoleted and moved into SDL_compat.h. I only tried Cocoa (which did break, but is already fixed) and X11 (which didn't, but then its key handling is #iffed out). If that's a problem, it may need to go into a branch. -Christian
author Sam Lantinga <slouken@libsdl.org>
date Sun, 19 Aug 2007 14:52:52 +0000
parents 989fb86ad1ec
children d87417504c75
comparison
equal deleted inserted replaced
2267:c785543d1843 2268:4baee598306d
23 23
24 #ifndef _SDL_sysvideo_h 24 #ifndef _SDL_sysvideo_h
25 #define _SDL_sysvideo_h 25 #define _SDL_sysvideo_h
26 26
27 #include "SDL_mouse.h" 27 #include "SDL_mouse.h"
28 #include "SDL_keysym.h"
28 29
29 /* The SDL video driver */ 30 /* The SDL video driver */
30 31
31 typedef struct SDL_Window SDL_Window; 32 typedef struct SDL_Window SDL_Window;
32 typedef struct SDL_Texture SDL_Texture; 33 typedef struct SDL_Texture SDL_Texture;
254 /* * * */ 255 /* * * */
255 /* Event manager functions 256 /* Event manager functions
256 */ 257 */
257 void (*PumpEvents) (_THIS); 258 void (*PumpEvents) (_THIS);
258 259
260 /* Get the layout key code corresponding to the given physical key code
261 * according to the OS' current keyboard layout.
262 *
263 * - For character keys, this should return the Unicode code point of the
264 * character that is generated when the key is pressed without shift or
265 * any other modifiers.
266 * - For non-character keys, this should return one of the SDLK_* constants
267 * (usually the argument itself since these keys are typically layout-
268 * independent). Make sure that all of these values returned by this
269 * function have a suitable name defined, either the default from
270 * SDL_keynames.h, or one set using SDL_SetKeyName() in VideoInit(). In
271 * particular, if this function can return any of the codes whose default
272 * names start with "SDLK_" (usually, it shouldn't, since these are layout-
273 * dependent character keys), these names should be replaced by proper
274 * user-readable names.
275 * - If there are keys that cannot be adequately described by either a
276 * single Unicode character or an SDLK_* constant, this function may return
277 * a code with SDL_KEY_LAYOUT_SPECIAL_BIT set in the most significant byte
278 * and an arbitrary value in the less significant 3 bytes. The
279 * GetSpecialKeyName() function must then be implemented to take this code
280 * and return a human-readable key name for it.
281 * If the argument is not a physical key code or if translation of the key
282 * code by the OS' keyboard layout fails for any reason, the argument must
283 * be returned unchanged.
284 *
285 * On platforms that don't have the notion of a user-configurable keyboard
286 * layout, this may be left unimplemented. The default implementation of
287 * SDL_GetLayoutKey() then acts as the identity. The note about defining
288 * key names above particularly applies in this case.
289 */
290 SDLKey(*GetLayoutKey) (_THIS, SDLKey physicalKey);
291
292 /* Get a human-readable name for a special layout key code.
293 * This only needs to be implemented if this driver's implementation of
294 * GetLayoutKey() generates such codes (with SDL_KEY_LAYOUT_SPECIAL_BIT
295 * set) - see above.
296 */
297 const char *(*GetSpecialKeyName) (_THIS, SDLKey layoutKey);
298
259 /* * * */ 299 /* * * */
260 /* Data common to all drivers */ 300 /* Data common to all drivers */
261 int num_displays; 301 int num_displays;
262 SDL_VideoDisplay *displays; 302 SDL_VideoDisplay *displays;
263 int current_display; 303 int current_display;