Uint32 | type | イベントの種類, このフィールドは全種類のイベントで共用している. 型はUint32でSDL_EventType列挙体に存在しないユーザイベント値もありうる |
SDL_CommonEvent | common | 共通イベントの情報 |
SDL_DisplayEvent | display | ディスプレイイベントの情報 |
SDL_WindowEvent | window | ウィンドウイベントの情報 |
SDL_KeyboardDeviceEvent | kdevice | キーボードデバイス変更イベント |
SDL_KeyboardEvent | key | キーボードイベントの情報 |
SDL_TextEditingEvent | edit | テキスト編集イベントの情報 |
SDL_TextEditingCandidatesEvent | edit_candidates | IME変換候補候補イベント |
SDL_TextInputEvent | text | テキスト入力イベントの情報 |
SDL_MouseDeviceEvent | mdevice | マウスデバイス変更イベント |
SDL_MouseMotionEvent | motion | マウス移動イベントの情報 |
SDL_MouseButtonEvent | button | マウスボタンイベントの情報 |
SDL_MouseWheelEvent | wheel | マウスホイールイベントの情報 |
SDL_JoyDeviceEvent | jdevice | ジョイスティックデバイスイベントの情報 |
SDL_JoyAxisEvent | jaxis | ジョイスティック移動イベントの情報 |
SDL_JoyBallEvent | jball | ジョイスティックボールイベントの情報 |
SDL_JoyHatEvent | jhat | ジョイスティックハットイベントの情報 |
SDL_JoyButtonEvent | jbutton | ジョイスティックボタンイベントの情報 |
SDL_JoyBatteryEvent | jbattery | ジョイスティックバッテリーイベントの情報 |
SDL_GamepadDeviceEvent | gdevice | ゲームパッドデバイスイベントの情報 |
SDL_GamepadAxisEvent | gaxis | ゲームパッド移動イベントの情報 |
SDL_GamepadButtonEvent | gbutton | ゲームパッドボタンイベントの情報 |
SDL_GamepadTouchpadEvent | gtouchpad | ゲームパッドタッチパッドイベントの情報 |
SDL_GamepadSensorEvent | gsensor | ゲームパッドセンサーイベントの情報 |
SDL_AudioDeviceEvent | adevice | オーディオデバイスイベントの情報 |
SDL_CameraDeviceEvent | cdevice | カメラデバイスイベントの情報 |
SDL_SensorEvent | sensor | センサーイベントの情報 |
SDL_QuitEvent | quit | 終了要求イベントの情報 |
SDL_UserEvent | user | カスタムイベントの情報 |
SDL_TouchFingerEvent | tfinger | タッチイベントの情報 |
SDL_PinchFingerEvent | pinch | ピンチイベントの情報 |
SDL_PenProximityEvent | pproximity | 感圧式ペン接近イベントの情報 |
SDL_PenTouchEvent | ptouch | 感圧式ペンタッチイベントの情報 |
SDL_PenMotionEvent | pmotion | 感圧式ペン移動イベントの情報 |
SDL_PenButtonEvent | pbutton | 感圧式ペンボタンイベントの情報 |
SDL_PenAxisEvent | paxis | 感圧式ペン筆圧/角度イベントの情報 |
SDL_RenderEvent | render | レンダライベントの情報 |
SDL_DropEvent | drop | ドロップイベントの情報 |
SDL_ClipboardEvent | clipboard | クリップボードイベントの情報 |
SDL_Eventは全てのSDLイベント処理の中核で, SDLで使われる全てのイベント構造体の共用体である.
SDL_PollEvent()またはSDL_PeepEvents()でキューからイベントを得られる. SDL_PollEvent()を例に説明する.
まず始めに, 空のSDL_Eventを生成する.
SDL_Event test_event;
SDL_PollEvent()はイベントを読み込み, キューから削除する. もしキューにイベントがなければ0を, あれば1を戻す. whileループを使い, 全てのイベントを処理する.
while (SDL_PollEvent(&test_event)) {
SDL_PollEvent()は引数のSDL_Eventへのポインタにイベント情報を代入する. SDL_PollEvent()はイベントをキューから取り除き, その後test_eventに書き込む. しかし, test_eventのtypeメンバにはイベントの種類も書き込まれている. よって, 種類に応じてイベントを処理するためにはswitch文を使う.
switch (test_event.type) {
得られたイベントが何であるか, そしてそのイベントの種類は何であるかを知る必要がある. ここでは, アプリケーションでユーザがマウスを動かしたことを検知したいと想定する. イベント種類を見渡すと, SDL_EVENT_MOUSE_MOTIONに気がつく. これが探しているイベントだろう. 後の表を見ると, SDL_EVENT_MOUSE_MOTIONイベントはSDL_EventのメンバのSDL_MouseMotionEventで処理することが分かる. SDL_EVENT_MOUSE_MOTIONのイベントの種類はswitch文の内部で次のようにチェックできる.
case SDL_EVENT_MOUSE_MOTION:
test_eventのmotionメンバの情報を全て表示したいとすると
SDL_Log("マウス移動イベントを得た.¥n");
SDL_Log("現在の位置は(%f, %f)¥n", test_event.motion.x, test_event.motion.y);
break;
default:
SDL_Log("処理されないイベント!¥n");
break;
}
}
printf("イベントキューは空.¥n");
SDL_Event user_event;
SDL_zero(user_event); /* SDLはこの構造体全体をコピーする. メモリチェッカーが機嫌よくふるまうように初期化する */
user_event.type = SDL_EVENT_USER;
user_event.user.code = 2;
user_event.user.data1 = NULL;
user_event.user.data2 = NULL;
SDL_PushEvent(&user_event);
SDL_EVENT_USERはSDLが使用しないイベント番号の先頭に過ぎないので注意すること. アプリケーションの他の部分でも使用されないユニークな番号を得るにはSDL_RegisterEventsを使う必要がある.
イベントの種類(typeメンバ) | イベント構造体 | SDL_Eventフィールド |
---|---|---|
SDL_EVENT_AUDIO_DEVICE_ADDED SDL_EVENT_AUDIO_DEVICE_REMOVED SDL_EVENT_AUDIO_DEVICE_FORMAT_CHANGED | SDL_AudioDeviceEvent | adevice |
SDL_EVENT_CAMERA_DEVICE_ADDED SDL_EVENT_CAMERA_DEVICE_REMOVED SDL_EVENT_CAMERA_DEVICE_APPROVED SDL_EVENT_CAMERA_DEVICE_DENIED | SDL_CameraDeviceEvent | cdevice |
SDL_EVENT_CLIPBOARD_UPDATE | SDL_ClipboardEvent | clipboard |
SDL_EVENT_DISPLAY_ORIENTATION SDL_EVENT_DISPLAY_ADDED SDL_EVENT_DISPLAY_REMOVED SDL_EVENT_DISPLAY_MOVED SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED | SDL_DisplayEvent | display |
SDL_EVENT_GAMEPAD_ADDED SDL_EVENT_GAMEPAD_REMOVED SDL_EVENT_GAMEPAD_REMAPPED SDL_EVENT_GAMEPAD_UPDATE_COMPLETE SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED | SDL_GamepadDeviceEvent | gdevice |
SDL_EVENT_GAMEPAD_AXIS_MOTION | SDL_GamepadAxisEvent | gaxis |
SDL_EVENT_GAMEPAD_BUTTON_DOWN SDL_EVENT_GAMEPAD_BUTTON_UP | SDL_GamepadButtonEvent | gbutton |
SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION SDL_EVENT_GAMEPAD_TOUCHPAD_UP | SDL_GamepadTouchpadEvent | gtouchpad |
SDL_EVENT_GAMEPAD_SENSOR_UPDATE | SDL_ControllerSensorEvent | gsensor |
SDL_EVENT_DROP_BEGIN SDL_EVENT_DROP_FILE SDL_EVENT_DROP_TEXT SDL_EVENT_DROP_COMPLETE SDL_EVENT_DROP_POSITION | SDL_DropEvent | drop |
SDL_EVENT_FINGER_MOTION SDL_EVENT_FINGER_DOWN SDL_EVENT_FINGER_UP | SDL_TouchFingerEvent | tfinger |
SDL_EVENT_PINCH_BEGIN SDL_EVENT_PINCH_UPDATE SDL_EVENT_PINCH_END | SDL_PinchFingerEvent | pinch |
SDL_EVENT_KEYBOARD_ADDED SDL_EVENT_KEYBOARD_REMOVED | SDL_KeyboardDeviceEvent | kdevice |
SDL_EVENT_KEY_DOWN SDL_EVENT_KEY_UP | SDL_KeyboardEvent | key |
SDL_EVENT_JOYSTICK_ADDED SDL_EVENT_JOYSTICK_REMOVED SDL_EVENT_JOYSTICK_UPDATE_COMPLETE | SDL_JoyDeviceEvent | jdevice |
SDL_EVENT_JOYSTICK_AXIS_MOTION | SDL_JoyAxisEvent | jaxis |
SDL_EVENT_JOYSTICK_BALL_MOTION | SDL_JoyBallEvent | jball |
SDL_EVENT_JOYSTICK_HAT_MOTION | SDL_JoyHatEvent | jhat |
SDL_EVENT_JOYSTICK_BATTERY_UPDATED | SDL_JoyBatteryEvent | jbattery |
SDL_EVENT_JOYSTICK_BUTTON_DOWN SDL_EVENT_JOYSTICK_BUTTON_UP | SDL_JoyButtonEvent | jbutton |
SDL_EVENT_MOUSE_ADDED SDL_EVENT_MOUSE_REMOVED | SDL_MouseDeviceEvent | mdevice |
SDL_EVENT_MOUSE_MOTION | SDL_MouseMotionEvent | motion |
SDL_EVENT_MOUSE_BUTTON_DOWN SDL_EVENT_MOUSE_BUTTON_UP | SDL_MouseButtonEvent | button |
SDL_EVENT_MOUSE_WHEEL | SDL_MouseWheelEvent | wheel |
SDL_EVENT_PEN_PROXIMITY_IN SDL_EVENT_PEN_PROXIMITY_OUT | SDL_PenProximityEvent | pproximity |
SDL_EVENT_PEN_DOWN SDL_EVENT_PEN_UP | SDL_PenTouchEven | ptouch |
SDL_EVENT_PEN_MOTION | SDL_PenMotionEvent | pmotion |
SDL_EVENT_PEN_BUTTON_DOWN SDL_EVENT_PEN_BUTTON_UP | SDL_PenButtonEvent | pbutton |
SDL_EVENT_PEN_AXIS | SDL_PenAxisEvent | paxis |
SDL_EVENT_QUIT | SDL_QuitEvent | quit |
SDL_EVENT_SENSOR_UPDATE | SDL_SensorEvent | sensor |
SDL_EVENT_TEXT_EDITING | SDL_TextEditingEvent | edit |
SDL_EVENT_TEXT_EDITING_CANDIDATES | SDL_TextEditingCandidatesEvent | edit_candidates |
SDL_EVENT_TEXT_INPUT | SDL_TextInputEvent | text |
SDL_EVENT_USER | SDL_UserEvent | user |
SDL_EVENT_WINDOW_SHOWN SDL_EVENT_WINDOW_HIDDEN SDL_EVENT_WINDOW_EXPOSED SDL_EVENT_WINDOW_MOVED SDL_EVENT_WINDOW_RESIZED SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED SDL_EVENT_WINDOW_METAL_VIEW_RESIZED SDL_EVENT_WINDOW_MINIMIZED SDL_EVENT_WINDOW_MAXIMIZED SDL_EVENT_WINDOW_RESTORED SDL_EVENT_WINDOW_MOUSE_ENTER SDL_EVENT_WINDOW_MOUSE_LEAVE SDL_EVENT_WINDOW_FOCUS_GAINED SDL_EVENT_WINDOW_FOCUS_LOST SDL_EVENT_WINDOW_CLOSE_REQUESTED SDL_EVENT_WINDOW_HIT_TEST SDL_EVENT_WINDOW_ICCPROF_CHANGED SDL_EVENT_WINDOW_DISPLAY_CHANGED SDL_EVENT_WINDOW_DISPLAY_SCALE_CHANGED SDL_EVENT_WINDOW_SAFE_AREA_CHANGED SDL_EVENT_WINDOW_OCCLUDED SDL_EVENT_WINDOW_ENTER_FULLSCREEN SDL_EVENT_WINDOW_LEAVE_FULLSCREEN SDL_EVENT_WINDOW_DESTROYED SDL_EVENT_WINDOW_HDR_STATE_CHANGED | SDL_WindowEvent | window |
その他のイベント | SDL_CommonEvent | common |