include/SDL_compat.h
author Sam Lantinga <slouken@libsdl.org>
Sun, 19 Aug 2007 14:52:52 +0000
changeset 2268 4baee598306d
parent 2267 c785543d1843
child 2295 dbc6d1893869
permissions -rw-r--r--
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
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2006 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 /* This file contains functions for backwards compatibility with SDL 1.2 */
    24 
    25 #ifndef _SDL_compat_h
    26 #define _SDL_compat_h
    27 
    28 #include "SDL_video.h"
    29 #include "SDL_version.h"
    30 
    31 #include "begin_code.h"
    32 /* Set up for C function definitions, even when using C++ */
    33 #ifdef __cplusplus
    34 /* *INDENT-OFF* */
    35 extern "C" {
    36 /* *INDENT-ON* */
    37 #endif
    38 
    39 #define SDL_SWSURFACE       0x00000000  /* Not used */
    40 #define SDL_SRCALPHA        0x00010000
    41 #define SDL_SRCCOLORKEY     0x00020000
    42 #define SDL_ANYFORMAT       0x00100000
    43 #define SDL_HWPALETTE       0x00200000
    44 #define SDL_DOUBLEBUF       0x00400000
    45 #define SDL_FULLSCREEN      0x00800000
    46 #define SDL_RESIZABLE       0x01000000
    47 #define SDL_NOFRAME         0x02000000
    48 #define SDL_OPENGL          0x04000000
    49 #define SDL_HWSURFACE       0x08000001  /* Not used */
    50 #define SDL_ASYNCBLIT       0x08000000  /* Not used */
    51 #define SDL_RLEACCELOK      0x08000000  /* Not used */
    52 #define SDL_HWACCEL         0x08000000  /* Not used */
    53 
    54 #define SDL_APPMOUSEFOCUS	0x01
    55 #define SDL_APPINPUTFOCUS	0x02
    56 #define SDL_APPACTIVE		0x04
    57 
    58 #define SDL_LOGPAL 0x01
    59 #define SDL_PHYSPAL 0x02
    60 
    61 #define SDL_ACTIVEEVENT	SDL_EVENT_RESERVED1
    62 #define SDL_VIDEORESIZE	SDL_EVENT_RESERVED2
    63 #define SDL_VIDEOEXPOSE	SDL_EVENT_RESERVED3
    64 #define SDL_ACTIVEEVENTMASK	SDL_EVENTMASK(SDL_ACTIVEEVENT)
    65 #define SDL_VIDEORESIZEMASK SDL_EVENTMASK(SDL_VIDEORESIZE)
    66 #define SDL_VIDEOEXPOSEMASK SDL_EVENTMASK(SDL_VIDEOEXPOSE)
    67 
    68 #define SDL_BUTTON_WHEELUP	4
    69 #define SDL_BUTTON_WHEELDOWN	5
    70 
    71 #define SDL_DEFAULT_REPEAT_DELAY	500
    72 #define SDL_DEFAULT_REPEAT_INTERVAL	30
    73 
    74 typedef struct SDL_VideoInfo
    75 {
    76     Uint32 hw_available:1;
    77     Uint32 wm_available:1;
    78     Uint32 UnusedBits1:6;
    79     Uint32 UnusedBits2:1;
    80     Uint32 blit_hw:1;
    81     Uint32 blit_hw_CC:1;
    82     Uint32 blit_hw_A:1;
    83     Uint32 blit_sw:1;
    84     Uint32 blit_sw_CC:1;
    85     Uint32 blit_sw_A:1;
    86     Uint32 blit_fill:1;
    87     Uint32 UnusedBits3:16;
    88     Uint32 video_mem;
    89 
    90     SDL_PixelFormat *vfmt;
    91 } SDL_VideoInfo;
    92 
    93 /* The most common video overlay formats.
    94    For an explanation of these pixel formats, see:
    95    http://www.webartz.com/fourcc/indexyuv.htm
    96 
    97    For information on the relationship between color spaces, see:
    98    http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html
    99  */
   100 #define SDL_YV12_OVERLAY  0x32315659    /* Planar mode: Y + V + U  (3 planes) */
   101 #define SDL_IYUV_OVERLAY  0x56555949    /* Planar mode: Y + U + V  (3 planes) */
   102 #define SDL_YUY2_OVERLAY  0x32595559    /* Packed mode: Y0+U0+Y1+V0 (1 plane) */
   103 #define SDL_UYVY_OVERLAY  0x59565955    /* Packed mode: U0+Y0+V0+Y1 (1 plane) */
   104 #define SDL_YVYU_OVERLAY  0x55595659    /* Packed mode: Y0+V0+Y1+U0 (1 plane) */
   105 
   106 /* The YUV hardware video overlay */
   107 typedef struct SDL_Overlay
   108 {
   109     Uint32 format;              /* Read-only */
   110     int w, h;                   /* Read-only */
   111     int planes;                 /* Read-only */
   112     Uint16 *pitches;            /* Read-only */
   113     Uint8 **pixels;             /* Read-write */
   114 
   115     /* Hardware-specific surface info */
   116     struct private_yuvhwfuncs *hwfuncs;
   117     struct private_yuvhwdata *hwdata;
   118 
   119     /* Special flags */
   120     Uint32 hw_overlay:1;        /* Flag: This overlay hardware accelerated? */
   121     Uint32 UnusedBits:31;
   122 } SDL_Overlay;
   123 
   124 typedef enum
   125 {
   126     SDL_GRAB_QUERY = -1,
   127     SDL_GRAB_OFF = 0,
   128     SDL_GRAB_ON = 1
   129 } SDL_GrabMode;
   130 
   131 struct SDL_SysWMinfo;
   132 
   133 /* Key codes
   134    Note that the correspondences defined here are approximate at best because
   135    the meaning of the event structure field that carries these values has
   136    changed: in SDL 1.2, it referred to the key's label in the current keyboard
   137    layout, whereas now it refers to a specific physical key on the keyboard,
   138    regardless of the keyboard layout setting.
   139    To get comparable behavior to SDL 1.2, code that uses any of the codes below
   140    in ways like "if (somekey == SDLK_EXCLAIM)" should be changed to the
   141    equivalent of "if (SDL_GetLayoutKey(somekey) == '!')".
   142  */
   143 
   144 /* These key constants were renamed for clarity or consistence. */
   145 #define SDLK_QUOTE SDLK_APOSTROPHE
   146 #define SDLK_MINUS SDLK_HYPHENMINUS
   147 #define SDLK_BACKQUOTE SDLK_GRAVE
   148 #define SDLK_a SDLK_A
   149 #define SDLK_b SDLK_B
   150 #define SDLK_c SDLK_C
   151 #define SDLK_d SDLK_D
   152 #define SDLK_e SDLK_E
   153 #define SDLK_f SDLK_F
   154 #define SDLK_g SDLK_G
   155 #define SDLK_h SDLK_H
   156 #define SDLK_i SDLK_I
   157 #define SDLK_j SDLK_J
   158 #define SDLK_k SDLK_K
   159 #define SDLK_l SDLK_L
   160 #define SDLK_m SDLK_M
   161 #define SDLK_n SDLK_N
   162 #define SDLK_o SDLK_O
   163 #define SDLK_p SDLK_P
   164 #define SDLK_q SDLK_Q
   165 #define SDLK_r SDLK_R
   166 #define SDLK_s SDLK_S
   167 #define SDLK_t SDLK_T
   168 #define SDLK_u SDLK_U
   169 #define SDLK_v SDLK_V
   170 #define SDLK_w SDLK_W
   171 #define SDLK_x SDLK_X
   172 #define SDLK_y SDLK_Y
   173 #define SDLK_z SDLK_Z
   174 #define SDLK_KP0 SDLK_KP_0
   175 #define SDLK_KP1 SDLK_KP_1
   176 #define SDLK_KP2 SDLK_KP_2
   177 #define SDLK_KP3 SDLK_KP_3
   178 #define SDLK_KP4 SDLK_KP_4
   179 #define SDLK_KP5 SDLK_KP_5
   180 #define SDLK_KP6 SDLK_KP_6
   181 #define SDLK_KP7 SDLK_KP_7
   182 #define SDLK_KP8 SDLK_KP_8
   183 #define SDLK_KP9 SDLK_KP_9
   184 #define SDLK_NUMLOCK SDLK_KP_NUMLOCKCLEAR
   185 #define SDLK_SCROLLOCK SDLK_SCROLLLOCK
   186 #define SDLK_PRINT SDLK_PRINTSCREEN
   187 
   188 /* These key constants are obsoleted the new keyboard handling, their definitions here correspond to how they appear on a US keyboard. */
   189 #define SDLK_EXCLAIM SDLK_1
   190 #define SDLK_QUOTEDBL SDLK_APOSTROPHE
   191 #define SDLK_HASH SDLK_3
   192 #define SDLK_DOLLAR SDLK_4
   193 #define SDLK_AMPERSAND SDLK_7
   194 #define SDLK_LEFTPAREN SDLK_9
   195 #define SDLK_RIGHTPAREN SDLK_0
   196 #define SDLK_ASTERISK SDLK_8
   197 #define SDLK_PLUS SDLK_EQUALS
   198 #define SDLK_COLON SDLK_SEMICOLON
   199 #define SDLK_LESS SDLK_COMMA
   200 #define SDLK_GREATER SDLK_PERIOD
   201 #define SDLK_QUESTION SDLK_SLASH
   202 #define SDLK_AT SDLK_2
   203 #define SDLK_CARET SDLK_6
   204 #define SDLK_UNDERSCORE SDLK_HYPHENMINUS
   205 
   206 /* These keys don't appear in the USB specification (or at least not under those names). I'm unsure if the following assignments make sense or if these codes should be defined as actual additional SDLK_ constants. */
   207 #define SDLK_LSUPER SDLK_LMETA
   208 #define SDLK_RSUPER SDLK_RMETA
   209 #define SDLK_COMPOSE SDLK_APPLICATION
   210 #define SDLK_BREAK SDLK_STOP
   211 #define SDLK_EURO SDLK_2
   212 
   213 
   214 #define SDL_SetModuleHandle(x)
   215 #define SDL_AllocSurface    SDL_CreateRGBSurface
   216 
   217 extern DECLSPEC const SDL_version *SDLCALL SDL_Linked_Version(void);
   218 extern DECLSPEC char *SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen);
   219 extern DECLSPEC char *SDLCALL SDL_VideoDriverName(char *namebuf, int maxlen);
   220 extern DECLSPEC const SDL_VideoInfo *SDLCALL SDL_GetVideoInfo(void);
   221 extern DECLSPEC int SDLCALL SDL_VideoModeOK(int width, int height, int bpp,
   222                                             Uint32 flags);
   223 extern DECLSPEC SDL_Rect **SDLCALL SDL_ListModes(SDL_PixelFormat * format,
   224                                                  Uint32 flags);
   225 extern DECLSPEC SDL_Surface *SDLCALL SDL_SetVideoMode(int width, int height,
   226                                                       int bpp, Uint32 flags);
   227 extern DECLSPEC SDL_Surface *SDLCALL SDL_GetVideoSurface(void);
   228 extern DECLSPEC void SDLCALL SDL_UpdateRects(SDL_Surface * screen,
   229                                              int numrects, SDL_Rect * rects);
   230 extern DECLSPEC void SDLCALL SDL_UpdateRect(SDL_Surface * screen, Sint32 x,
   231                                             Sint32 y, Uint32 w, Uint32 h);
   232 extern DECLSPEC int SDLCALL SDL_Flip(SDL_Surface * screen);
   233 extern DECLSPEC int SDLCALL SDL_SetAlpha(SDL_Surface * surface, Uint32 flag,
   234                                          Uint8 alpha);
   235 extern DECLSPEC SDL_Surface *SDLCALL SDL_DisplayFormat(SDL_Surface * surface);
   236 extern DECLSPEC SDL_Surface *SDLCALL SDL_DisplayFormatAlpha(SDL_Surface *
   237                                                             surface);
   238 extern DECLSPEC void SDLCALL SDL_WM_SetCaption(const char *title,
   239                                                const char *icon);
   240 extern DECLSPEC void SDLCALL SDL_WM_GetCaption(const char **title,
   241                                                const char **icon);
   242 extern DECLSPEC void SDLCALL SDL_WM_SetIcon(SDL_Surface * icon, Uint8 * mask);
   243 extern DECLSPEC int SDLCALL SDL_WM_IconifyWindow(void);
   244 extern DECLSPEC int SDLCALL SDL_WM_ToggleFullScreen(SDL_Surface * surface);
   245 extern DECLSPEC SDL_GrabMode SDLCALL SDL_WM_GrabInput(SDL_GrabMode mode);
   246 extern DECLSPEC int SDLCALL SDL_SetPalette(SDL_Surface * surface, int flags,
   247                                            const SDL_Color * colors,
   248                                            int firstcolor, int ncolors);
   249 extern DECLSPEC int SDLCALL SDL_SetColors(SDL_Surface * surface,
   250                                           const SDL_Color * colors,
   251                                           int firstcolor, int ncolors);
   252 extern DECLSPEC int SDLCALL SDL_GetWMInfo(struct SDL_SysWMinfo *info);
   253 extern DECLSPEC Uint8 SDLCALL SDL_GetAppState(void);
   254 extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y);
   255 extern DECLSPEC SDL_Overlay *SDLCALL SDL_CreateYUVOverlay(int width,
   256                                                           int height,
   257                                                           Uint32 format,
   258                                                           SDL_Surface *
   259                                                           display);
   260 extern DECLSPEC int SDLCALL SDL_LockYUVOverlay(SDL_Overlay * overlay);
   261 extern DECLSPEC void SDLCALL SDL_UnlockYUVOverlay(SDL_Overlay * overlay);
   262 extern DECLSPEC int SDLCALL SDL_DisplayYUVOverlay(SDL_Overlay * overlay,
   263                                                   SDL_Rect * dstrect);
   264 extern DECLSPEC void SDLCALL SDL_FreeYUVOverlay(SDL_Overlay * overlay);
   265 extern DECLSPEC void SDLCALL SDL_GL_SwapBuffers(void);
   266 extern DECLSPEC int SDLCALL SDL_EnableKeyRepeat(int delay, int interval);
   267 extern DECLSPEC void SDLCALL SDL_GetKeyRepeat(int *delay, int *interval);
   268 
   269 /* Ends C function definitions when using C++ */
   270 #ifdef __cplusplus
   271 /* *INDENT-OFF* */
   272 }
   273 /* *INDENT-ON* */
   274 #endif
   275 #include "close_code.h"
   276 
   277 #endif /* _SDL_compat_h */
   278 
   279 /* vi: set ts=4 sw=4 expandtab: */