しかしながら、ユーザが設定できるイベントの数は

SDL_NUMEVENTS-1-SDL_USEREVENT

と設定されているため、

/* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
SDL_USEREVENT = 24,
/* This last event is only for bounding internal arrays
It is the number of bits in the event mask datatype -- Uint32
*/
SDL_NUMEVENTS = 32

32-1-24=7

たった、7個である。いや、「7個も」なのかもしれないが、Windowsの標準のユーザ定義メッセージの設定範囲に比べると格段に少ない。しかし、これには訳があった。

/* A user-defined event type */
typedef struct SDL_UserEvent {
    Uint8 type;    /* SDL_USEREVENT through SDL_NUMEVENTS-1 */
    int code;    /* User defined event code */
    void *data1;    /* User defined data pointer */
    void *data2;    /* User defined data pointer */
} SDL_UserEvent;

ユーザイベント定義用の構造体SDL_UserEventには、/*User defined event code*/なるコメントがある。つまり、codeメンバはユーザ定義用に使っていいよという意味である。

ということは、32bit空間をフルに使ったイベント定義が行えるということで、自分の読みの浅さを思い知らされる結果となった。

チュートリアルより何より、SDLはヘッダこそが何よりのドキュメントであることを思い知らされて、今日は寝ようと思う。

コメント