Mercurial > sdl-ios-xcode
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; |