int SDL_SetWindowHitTest(SDL_Window* window, SDL_HitTest callback, void* callback_data)
window | 領域判定を設定するウィンドウ |
callback | 領域判定のとき呼ばれるSDL_HitTest型の関数 |
callback_data | callback関数に渡されるアプリケーション定義のデータのvoid* |
通常, ウィンドウはシステムウィンドウマネージャーが提供した装飾(タイトルバー, ウィンドウ枠など)でドラッグやサイズ変更を行う. しかし, 一部のアプリケーションではウィンドウ内部でドラッグしたい場合もある. 例えば, 枠のないウィンドウのあらゆる部分でドラッグしたい場合や, タイトルバーをアプリケーションで描いている場合などである.
この関数は, アプリケーションがウィンドウの特別な領域を決めるためのコールバック関数を設定する. このコールバック関数は, もしウィンドウの特別な領域として扱うためにOSに通知する必要があるとき, イベント処理中に実行される. このコールバック関数で「領域判断」を行う.
特別な領域の場合, マウスによる入力はアプリケーションにはおそらく通知されない. OSは入力をウィンドウの移動やサイズ変更のために使い, アプリケーションには通知しないためである.
コールバックをNULLにすると領域判定は無効になる. デフォルトでは無効である.
この機能に対応していない環境では無条件に-1を戻す. 領域判定を無効にした場合も同様である.コールバック関数は常に呼ばれる可能性があり, その呼び出しは特定の操作を示すものではない. (例えば, WindowsではOSがウィンドウをドラッグするか否かを決定するときには確実に呼ばれる. しかし, 多くの別の理由でも呼ばれ, その中にはアプリケーションには無意味なものや, 調査した領域には実際にはマウスカーソルがない場合もある.) このコールバック関数は常に呼ばれる可能性があるため, 効率的でメモリの確保などがないようにする必要がある.