目次 - API(機能別) - イベント処理 - SDL_EventType

# SDL_EventType

送られたイベントの種類の列挙体

## 値

SDL_FIRSTEVENT | (未使用)
アプリケーションのイベント
SDL_QUIT | ユーザが終了を要求した (詳細を参照すること)
AndroidとiOSのイベント (詳細を参照すること)
SDL_APP_TERMINATING | OSがアプリケーションを終了させようとしている
SDL_APP_LOWMEMORY | 空きメモリが少ない. 何かを解放する必要がある
SDL_APP_WILLENTERBACKGROUND | アプリケーションが裏側へ回ろうとしている
SDL_APP_DIDENTERBACKGROUND | アプリケーションが裏側へ回った
SDL_APP_WILLENTERFOREGROUND | アプリケーションが表へ現れようとしている
SDL_APP_DIDENTERFOREGROUND | アプリケーションが表へ現れた
ウィンドウのイベント
SDL_WINDOWEVENT | ウィンドウの状態が変わった
SDL_SYSWMEVENT | システム固有のイベントが発生した
キーボードのイベント
SDL_KEYDOWN | キーが押された
SDL_KEYUP | キーが離された
SDL_TEXTEDITING | キーボードでテキストを編集している
SDL_TEXTINPUT | キーボードでテキストが入力された
マウスのイベント
SDL_MOUSEMOTION | マウスが動いた
SDL_MOUSEBUTTONDOWN | マウスのボタンが押された
SDL_MOUSEBUTTONUP | マウスのボタンが離された
SDL_MOUSEWHEEL | マウスのホイールが動いた
ジョイスティックのイベント
SDL_JOYAXISMOTION | ジョイスティクが動いた
SDL_JOYBALLMOTION | ジョイスティクのトラックボールが動いた
SDL_JOYHATMOTION | ジョイスティックのハットが変わった
SDL_JOYBUTTONDOWN | ジョイスティックのボタンが押された
SDL_JOYBUTTONUP | ジョイスティックのボタンが離された
SDL_JOYDEVICEADDED | ジョイスティックが接続された
SDL_JOYDEVICEREMOVED | ジョイスティックが切断された
コントローラーのイベント
SDL_CONTROLLERAXISMOTION | コントローラーが動いた
SDL_CONTROLLERBUTTONDOWN | コントローラーのボタンが押された
SDL_CONTROLLERBUTTONUP | コントローラーのボタンが離された
SDL_CONTROLLERDEVICEADDED | コントローラーが接続された
SDL_CONTROLLERDEVICEREMOVED | コントローラーが切断された
SDL_CONTROLLERDEVICEREMAPPED | コントローラーのマッピングが変わった
タッチのイベント
SDL_FINGERDOWN | デバイスに指をつけた
SDL_FINGERUP | デバイスから指を離した
SDL_FINGERMOTION | デバイス上で指を動かした
ジェスチャーのイベント
SDL_DOLLARGESTURE |
SDL_DOLLARRECORD |
SDL_MULTIGESTURE |
クリップボードのイベント
SDL_CLIPBOARDUPDATE | クリップボードが変わった
ドラッグ&ドロップのイベント
SDL_DROPFILE | ファイルをドロップした
オーディオホットプラグ(活線挿抜)のイベント
SDL_AUDIODEVICEADDED | オーディオデバイスが新たに接続された (SDL 2.0.4以降)
SDL_AUDIODEVICEREMOVED | オーディオデバイスが取り除かれた (SDL 2.0.4以降)
レンダラのイベント
SDL_RENDER_TARGETS_RESET | レンダラの対象がリセットされコンテキストを更新する必要がある (SDL2.0.2以降)
SDL_RENDER_DEVICE_RESET | デバイスがリセットされ全てのテクスチャを再生成する必要がある (SDL2.0.4以降)
ユーザ定義のイベント SDL_RegisterEvents()で確保する必要がある
SDL_USEREVENT | ユーザ固有のイベント
SDL_LASTEVENT | 内部の配列の終端のみのため

## サンプルコード

`

    SDL_Event e;
    while (SDL_PollEvent(&e)) {
        if (e.type == SDL_KEYDOWN) {
            SDL_Log("ユーザがキーを押した!");
        }
    }

`

## 詳細

### SDL_QUIT

SDL_QUITイベントは様々な理由で発生する. アプリケーションはこのイベントを無視するという選択もありうる. 例えば, 作業中のデータを保存するかをユーザに尋ねたいとき等である.

SQL_QUITはユーザが最後のウィンドウの閉じるボタンを押したときに発生する. このことにより, 追加でSDL_WINDOWEVENT/SDL_WINDOWEVENT_CLOSEイベントが発生する. アプリケーションはどちらか, あるいは両方でチェックでき, またはチェックしないこともできる. アプリケーションがSQL_QUITを無視して別のウィンドウを生成した場合, ユーザが次に最後のウィンドウの閉じるボタンを押すと再びSQL_QUITイベントが送られる.

SQL_QUITはウィンドウを閉じようとしたときだけ発生するとは限らない. Mac OS X では, Command-Q (「アプリケーションを終了する」標準的なショートカット) を押すと, SQLはウィンドウの存在に関わらずSQL_QUITイベントを発生させる. しかし, 依然としてアプリケーションは自分自身を適切に終了させる必要がある. アプリケーションが完全に Command-Q を無視すると, Mac App Store の審査を通らないだろう.

POSIXシステムでは, SDL_InitはSIGINT(キーボード割り込み)とSIGTERM(システム終了要求)のシグナルハンドラを設定する. もし, まだハンドラが存在しなくても, SQL_QUITイベントは発生する. SQL_QUITイベントが発生しないようにする方法はない. しかし, アプリケーションでシグナルハンドラを設定すると, シグナル発生時の終了イベントの発生が上書きされる.

### AndroidとiOSのイベント

「AndroidとiOSのイベント」に分類されるのは, 通常のデスクトップアプリケーションとは別の要求が存在するモバイルまたは組み込みデバイス用のイベントである. これらのイベントはイベントフィルタで処理する必要がある. OSは即時の反応を必要としていて, イベントを送信した後に短い時間でプロセスを終了させる. よって, もしSDLイベントキューで処理すると遅すぎるだろう. その他のイベントは通常のSDL_PollEvent()のループで処理できる. しかし, これらの特別なイベントにはSDL_SetEventFilter()を使いコールバックを設定するべきだ.

イベントは以下のように対応している

SDLイベント | 発生条件 | iOS | Android
--- | --- | --- | ---
SDL_APP_TERMINATING | アプリケーションがOSによって終了されようとしている | applicationWillTerminate() | onDestroy()
SDL_APP_LOWMEMORY | アプリケーションの空きメモリが少ない. 可能ならメモリを解放する必要がある | applicationDidReceiveMemoryWarning() | onLowMemory()
SDL_APP_WILLENTERBACKGROUND | アプリケーションが裏側へ回ろうとしている | applicationWillResignActive() | onPause()
SDL_APP_DIDENTERBACKGROUND | アプリケーションが裏側へ回った. CPU時間が割り当てられないかもしれない | applicationDidEnterBackground() | onPause()
SDL_APP_WILLENTERFOREGROUND | アプリケーションが前面に現れようとしている | applicationWillEnterForeground() | onResume()
SDL_APP_DIDENTERFOREGROUND | アプリケーションが前面に現れた. ユーザとの対話が可能になった. | applicationDidBecomeActive() | onResume()

## 関連項目(構造体)

SDL_JoyAxisEvent
SDL_JoyBallEvent
SDL_JoyButtonEvent
SDL_JoyHatEvent
SDL_JoyDeviceEvent
SDL_ControllerAxisEvent
SDL_ControllerButtonEvent
SDL_ControllerDeviceEvent
SDL_KeyboardEvent
SDL_MouseButtonEvent
SDL_MouseMotionEvent
SDL_MouseWheelEvent
SDL_QuitEvent
SDL_SysWMEvent
SDL_TextEditingEvent
SDL_TextInputEvent
SDL_UserEvent
SDL_WindowEvent
SDL_DropEvent
SDL_AudioDeviceEvent
SDL_TouchFingerEvent
SDL_DollarGestureEvent
SDL_MultiGestureEvent

## 関連項目(関数)

SDL_PollEvent
SDL_SetEventFilter

## SDL Wikiへのリンク

SDL_EventType - SDL Wiki