目次 - SDL 3.0 API(機能別) - イベント処理 - SDL_Event

SDL_Event

異なる種類のイベントの情報を持つ共用体

ヘッダ

SDL3/SDL_events.h

フィールド

Uint32typeイベントの種類, このフィールドは全種類のイベントで共用している. 型はUint32でSDL_EventType列挙体に存在しないユーザイベント値もありうる
SDL_CommonEventcommon共通イベントの情報
SDL_DisplayEventdisplayディスプレイイベントの情報
SDL_WindowEventwindowウィンドウイベントの情報
SDL_KeyboardDeviceEventkdeviceキーボードデバイス変更イベント
SDL_KeyboardEventkeyキーボードイベントの情報
SDL_TextEditingEventeditテキスト編集イベントの情報
SDL_TextEditingCandidatesEventedit_candidatesIME変換候補候補イベント
SDL_TextInputEventtextテキスト入力イベントの情報
SDL_MouseDeviceEventmdeviceマウスデバイス変更イベント
SDL_MouseMotionEventmotionマウス移動イベントの情報
SDL_MouseButtonEventbuttonマウスボタンイベントの情報
SDL_MouseWheelEventwheelマウスホイールイベントの情報
SDL_JoyDeviceEventjdeviceジョイスティックデバイスイベントの情報
SDL_JoyAxisEventjaxisジョイスティック移動イベントの情報
SDL_JoyBallEventjballジョイスティックボールイベントの情報
SDL_JoyHatEventjhatジョイスティックハットイベントの情報
SDL_JoyButtonEventjbuttonジョイスティックボタンイベントの情報
SDL_JoyBatteryEventjbatteryジョイスティックバッテリーイベントの情報
SDL_GamepadDeviceEventgdeviceゲームパッドデバイスイベントの情報
SDL_GamepadAxisEventgaxisゲームパッド移動イベントの情報
SDL_GamepadButtonEventgbuttonゲームパッドボタンイベントの情報
SDL_GamepadTouchpadEventgtouchpadゲームパッドタッチパッドイベントの情報
SDL_GamepadSensorEventgsensorゲームパッドセンサーイベントの情報
SDL_AudioDeviceEventadeviceオーディオデバイスイベントの情報
SDL_CameraDeviceEventcdeviceカメラデバイスイベントの情報
SDL_SensorEventsensorセンサーイベントの情報
SDL_QuitEventquit終了要求イベントの情報
SDL_UserEventuserカスタムイベントの情報
SDL_TouchFingerEventtfingerタッチイベントの情報
SDL_PinchFingerEventpinchピンチイベントの情報
SDL_PenProximityEventpproximity感圧式ペン接近イベントの情報
SDL_PenTouchEventptouch感圧式ペンタッチイベントの情報
SDL_PenMotionEventpmotion感圧式ペン移動イベントの情報
SDL_PenButtonEventpbutton感圧式ペンボタンイベントの情報
SDL_PenAxisEventpaxis感圧式ペン筆圧/角度イベントの情報
SDL_RenderEventrenderレンダライベントの情報
SDL_DropEventdropドロップイベントの情報
SDL_ClipboardEventclipboardクリップボードイベントの情報

詳細

SDL_Eventは全てのSDLイベント処理の中核で, SDLで使われる全てのイベント構造体の共用体である.

バージョン

SDL 3.2.0以降

イベントの使用法

SDL_Eventには2つの使い方がある

キューからイベントを読み込む

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");

キューにイベントを書き込む

キューにイベントを入れることも可能で, 2つの方法がある. SDL_PushEvent()またはSDL_PushEvent()でキューにイベントを入れることができる. 通常, これはSDL_EVENT_USERをキューに入れるために使われる. しかし, 望むならばニセの入力イベントを発行するために使うこともできる. 自分でイベントを作るのはイベントを選択するよりも簡単である. typeメンバを設定し, 構造体のメンバに適切な情報を書き込めばよい.

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_AudioDeviceEventadevice
SDL_EVENT_CAMERA_DEVICE_ADDED
SDL_EVENT_CAMERA_DEVICE_REMOVED
SDL_EVENT_CAMERA_DEVICE_APPROVED
SDL_EVENT_CAMERA_DEVICE_DENIED
SDL_CameraDeviceEventcdevice
SDL_EVENT_CLIPBOARD_UPDATESDL_ClipboardEventclipboard
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_DisplayEventdisplay
SDL_EVENT_GAMEPAD_ADDED
SDL_EVENT_GAMEPAD_REMOVED
SDL_EVENT_GAMEPAD_REMAPPED
SDL_EVENT_GAMEPAD_UPDATE_COMPLETE
SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED
SDL_GamepadDeviceEventgdevice
SDL_EVENT_GAMEPAD_AXIS_MOTIONSDL_GamepadAxisEventgaxis
SDL_EVENT_GAMEPAD_BUTTON_DOWN
SDL_EVENT_GAMEPAD_BUTTON_UP
SDL_GamepadButtonEventgbutton
SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN
SDL_EVENT_GAMEPAD_TOUCHPAD_MOTION
SDL_EVENT_GAMEPAD_TOUCHPAD_UP
SDL_GamepadTouchpadEventgtouchpad
SDL_EVENT_GAMEPAD_SENSOR_UPDATESDL_ControllerSensorEventgsensor
SDL_EVENT_DROP_BEGIN
SDL_EVENT_DROP_FILE
SDL_EVENT_DROP_TEXT
SDL_EVENT_DROP_COMPLETE
SDL_EVENT_DROP_POSITION
SDL_DropEventdrop
SDL_EVENT_FINGER_MOTION
SDL_EVENT_FINGER_DOWN
SDL_EVENT_FINGER_UP
SDL_TouchFingerEventtfinger
SDL_EVENT_PINCH_BEGIN
SDL_EVENT_PINCH_UPDATE
SDL_EVENT_PINCH_END
SDL_PinchFingerEventpinch
SDL_EVENT_KEYBOARD_ADDED
SDL_EVENT_KEYBOARD_REMOVED
SDL_KeyboardDeviceEventkdevice
SDL_EVENT_KEY_DOWN
SDL_EVENT_KEY_UP
SDL_KeyboardEventkey
SDL_EVENT_JOYSTICK_ADDED
SDL_EVENT_JOYSTICK_REMOVED
SDL_EVENT_JOYSTICK_UPDATE_COMPLETE
SDL_JoyDeviceEventjdevice
SDL_EVENT_JOYSTICK_AXIS_MOTIONSDL_JoyAxisEventjaxis
SDL_EVENT_JOYSTICK_BALL_MOTIONSDL_JoyBallEventjball
SDL_EVENT_JOYSTICK_HAT_MOTIONSDL_JoyHatEventjhat
SDL_EVENT_JOYSTICK_BATTERY_UPDATEDSDL_JoyBatteryEventjbattery
SDL_EVENT_JOYSTICK_BUTTON_DOWN
SDL_EVENT_JOYSTICK_BUTTON_UP
SDL_JoyButtonEventjbutton
SDL_EVENT_MOUSE_ADDED
SDL_EVENT_MOUSE_REMOVED
SDL_MouseDeviceEventmdevice
SDL_EVENT_MOUSE_MOTIONSDL_MouseMotionEventmotion
SDL_EVENT_MOUSE_BUTTON_DOWN
SDL_EVENT_MOUSE_BUTTON_UP
SDL_MouseButtonEventbutton
SDL_EVENT_MOUSE_WHEELSDL_MouseWheelEventwheel
SDL_EVENT_PEN_PROXIMITY_IN
SDL_EVENT_PEN_PROXIMITY_OUT
SDL_PenProximityEventpproximity
SDL_EVENT_PEN_DOWN
SDL_EVENT_PEN_UP
SDL_PenTouchEvenptouch
SDL_EVENT_PEN_MOTIONSDL_PenMotionEventpmotion
SDL_EVENT_PEN_BUTTON_DOWN
SDL_EVENT_PEN_BUTTON_UP
SDL_PenButtonEventpbutton
SDL_EVENT_PEN_AXISSDL_PenAxisEventpaxis
SDL_EVENT_QUITSDL_QuitEventquit
SDL_EVENT_SENSOR_UPDATESDL_SensorEventsensor
SDL_EVENT_TEXT_EDITINGSDL_TextEditingEventedit
SDL_EVENT_TEXT_EDITING_CANDIDATESSDL_TextEditingCandidatesEventedit_candidates
SDL_EVENT_TEXT_INPUTSDL_TextInputEventtext
SDL_EVENT_USERSDL_UserEventuser
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_WindowEventwindow
その他のイベントSDL_CommonEventcommon

SDL Wikiへのリンク

SDL_Event - SDL Wiki