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