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

# SDL_SetEventFilter

内部状態が変わり内部キューに入る前に全てのイベントを処理するフィルタを設定する

## 構文

`void SDL_SetEventFilter(SDL_EventFilter filter, void* userdata)`

## 引数

filter | イベント発生時に呼ばれる関数 (詳細を参照すること)
userdata | filterへ渡されるポインタ

## 詳細

filterの関数プロトタイプは

`int YourEventFilter(void* userdata, SDL_Event* event)`

YourEventFilterは任意の関数名で, パラメータは次の通りである.

userdata | SDL_SetEventFilter()で設定したuserdata
event | コールバックを引き起こしたイベント

filterが1を戻したとき, イベントは内部キューに追加される. 0を戻したとき, イベントはキューから削除されるが内部状態は更新される. これにより受信したイベントを動的にフィルタで選択できる.

注意: 別スレッドで動作する場合, イベントフィルタ関数で行うことには細心の注意を払うこと!

これはSDL_QUITイベントを無効にする方法の1つである. このイベントフィルタはウィンドウマネージャがアプリケーションを閉じようとしたときのみ呼ばれる. filterが1を戻したとき, ウィンドウは閉じる. 0を戻したとき, 可能ならウィンドウは開いたままである.

シグナル(例えばSIGINT)で終了イベントが発生した場合, まず内部キューを迂回してイベント監視コールバックに届けられ, そして次にイベントポーリングに届く.

メモ: 無効化されたイベントはイベントフィルタ関数には届かない. SDL_EventState()を参照すること.

メモ: フィルタするのではなく単にイベントを調査したいのであれば, 代わりにSDL_AddEventWatch()を使うべきである.

メモ: コールバックはユーザのSDL_PushEvent()で発生させたイベントでも呼ばれる. しかし, SDL_PeepEvents()で発生したイベントの場合は呼ばれない.

## 関連項目(関数)

SDL_AddEventWatch
SDL_EventState
SDL_GetEventFilter
SDL_PeepEvents
SDL_PushEvent

## SDL Wikiへのリンク

SDL_SetEventFilter - SDL Wiki