wl_subcompositor (ver 1) | |
wl_subcompositor_destroy | 破棄 |
---|---|
wl_subcompositor_get_subsurface | wl_subsurface の作成 |
wl_subsurface | |
wl_subsurface_destroy | 破棄 |
wl_subsurface_set_position | 位置を変更する |
wl_subsurface_place_above | スタックを上に移動 |
wl_subsurface_place_below | スタックを下に移動 |
wl_subsurface_set_sync | 同期モードに変更 |
wl_subsurface_set_desync | 非同期モードに変更 |
サブサーフェスは、親の領域でクリッピングされないため、親の範囲を超える部分は、はみ出して表示される。
サブサーフェスは、wl_buffer がセットされて、親サーフェスが表示されると、表示される。
どちらが先に発生するかの順序は関係ない。
親が非表示になるか、wl_buffer = NULL が適用されると、非表示になる。
これらのルールは、サーフェスのツリー構造によって、再帰的に適用される。
同期モードは、ツリー構造によって、同じモードが子孫に適用される。
サブサーフェスは、キーボードフォーカスを持たない。
wl_surface_offset() は無視される。
サブサーフェスは、wl_buffer がセットされて、親サーフェスが表示されると、表示される。
どちらが先に発生するかの順序は関係ない。
親が非表示になるか、wl_buffer = NULL が適用されると、非表示になる。
これらのルールは、サーフェスのツリー構造によって、再帰的に適用される。
同期モードは、ツリー構造によって、同じモードが子孫に適用される。
サブサーフェスは、キーボードフォーカスを持たない。
wl_surface_offset() は無視される。
wl_subcompositor (ver 1)
void wl_subcompositor_destroy(struct wl_subcompositor *wl_subcompositor);
クライアントがこのオブジェクトを今後使用しないことをサーバーに通知する。
wl_subsurface オブジェクトを含む他のオブジェクトには影響しない。
wl_subsurface オブジェクトを含む他のオブジェクトには影響しない。
struct wl_subsurface *wl_subcompositor_get_subsurface( struct wl_subcompositor *wl_subcompositor, struct wl_surface *surface, struct wl_surface *parent);
wl_surface のサブサーフェスを作成し、指定された親サーフェスに関連付ける。
これにより、プレーンな wl_surface がサブサーフェスになる。
surface には、別のロールがすでに存在してはならず、既存の wl_subsurface オブジェクトも存在してはならない。
親サーフェスは、子サーフェスの子孫であってはならない。また、親は子サーフェスと異なる必要がある。
サブサーフェスを親に追加する操作は、親で wl_surface_commit() が実行された時に適用される。
これにより、プレーンな wl_surface がサブサーフェスになる。
surface には、別のロールがすでに存在してはならず、既存の wl_subsurface オブジェクトも存在してはならない。
親サーフェスは、子サーフェスの子孫であってはならない。また、親は子サーフェスと異なる必要がある。
サブサーフェスを親に追加する操作は、親で wl_surface_commit() が実行された時に適用される。
surface
サブサーフェスにする wl_surface
parent
親サーフェス
wl_subsurface
void wl_subsurface_destroy(struct wl_subsurface *wl_subsurface);
サブサーフェスの破棄。
親への関連付けは削除され、サーフェスは直ちに非表示になる。
親サーフェスの更新と削除を同期させる必要がある場合、まず wl_buffer = NULL をアタッチしてサブサーフェスを非表示にし、親を更新してから、サブサーフェスを破棄する。
親への関連付けは削除され、サーフェスは直ちに非表示になる。
親サーフェスの更新と削除を同期させる必要がある場合、まず wl_buffer = NULL をアタッチしてサブサーフェスを非表示にし、親を更新してから、サブサーフェスを破棄する。
void wl_subsurface_set_position(struct wl_subsurface *wl_subsurface, int32_t x, int32_t y);
位置を変更する。
座標は、親サーフェスの状態が適用されるたびに有効になる。
親サーフェスの commit 前に、複数回呼び出された場合、新しい位置は常に、以前の位置に置き換えられる。
初期位置は 0, 0。
座標は、親サーフェスの状態が適用されるたびに有効になる。
親サーフェスの commit 前に、複数回呼び出された場合、新しい位置は常に、以前の位置に置き換えられる。
初期位置は 0, 0。
x,y
親の座標。親の領域内に限定されず、負の値も許可される。
void wl_subsurface_place_above(struct wl_subsurface *wl_subsurface, struct wl_surface *sibling);
このサブサーフェスは、sibling のすぐ上に配置され、Z 順序が変更される。
Z 順序はダブルバッファリングされる。
リクエストは順番に処理され、すぐに保留状態に適用される。
最終的な保留状態は、親サーフェスの状態が次に適用されるときに、アクティブ状態にコピーされる。
新しいサブサーフェスは、最初は、兄弟および親のスタックの最上位として追加される。
Z 順序はダブルバッファリングされる。
リクエストは順番に処理され、すぐに保留状態に適用される。
最終的な保留状態は、親サーフェスの状態が次に適用されるときに、アクティブ状態にコピーされる。
新しいサブサーフェスは、最初は、兄弟および親のスタックの最上位として追加される。
sibling
兄弟サーフェスの1つ、または親サーフェスであること。
親の場合は、親のすぐ上になる (兄弟の中で最上位になるわけではない)。
親の場合は、親のすぐ上になる (兄弟の中で最上位になるわけではない)。
void wl_subsurface_place_below(struct wl_subsurface *wl_subsurface, struct wl_surface *sibling);
スタックを下に移動
sibling
兄弟サーフェスの1つ、または親サーフェス。
親の場合は、親のすぐ下となり、親の背面となる。
親の場合は、親のすぐ下となり、親の背面となる。
void wl_subsurface_set_sync(struct wl_subsurface *wl_subsurface);
サブサーフェスの commit 動作を、同期モード (親依存モードとも呼ばれる) に変更する。
デフォルトは同期モード。
同期モードでは、サブサーフェスの wl_surface_commit() では出力に適用されず、状態がキャッシュされ、親サーフェスの状態が適用された時に、サブサーフェスのキャッシュが適用される。
これにより、親とそのすべての同期されたサブサーフェスのアトミック更新が保証される。
キャッシュが適用されると、キャッシュが無効になるため、それ以降の親サーフェスの commit では、古い状態が (再) 適用されない。
デフォルトは同期モード。
同期モードでは、サブサーフェスの wl_surface_commit() では出力に適用されず、状態がキャッシュされ、親サーフェスの状態が適用された時に、サブサーフェスのキャッシュが適用される。
これにより、親とそのすべての同期されたサブサーフェスのアトミック更新が保証される。
キャッシュが適用されると、キャッシュが無効になるため、それ以降の親サーフェスの commit では、古い状態が (再) 適用されない。
void wl_subsurface_set_desync(struct wl_subsurface *wl_subsurface);
サブサーフェスの commit 動作を、非同期モード (独立モードまたは自由実行モードとも呼ばれる) に変更する。
非同期モードでは、サブサーフェスの wl_surface_commit() は、キャッシュされずに直接適用する。
親サーフェスで commit しても、サブサーフェスの状態には影響しない。
このモードでは、サブサーフェスを独自に更新できる。
非同期モードで commit が呼び出されたときに、キャッシュが存在する場合、保留状態がキャッシュに追加され、全体に適用される。
これにより、キャッシュが無効になる。
※サブサーフェスが非同期に設定されている場合でも、親サブサーフェスは、それを上書きして、同期として動作する場合がある。
親サーフェスが非同期として動作する場合、キャッシュされた状態は set_desync に適用される。
非同期モードでは、サブサーフェスの wl_surface_commit() は、キャッシュされずに直接適用する。
親サーフェスで commit しても、サブサーフェスの状態には影響しない。
このモードでは、サブサーフェスを独自に更新できる。
非同期モードで commit が呼び出されたときに、キャッシュが存在する場合、保留状態がキャッシュに追加され、全体に適用される。
これにより、キャッシュが無効になる。
※サブサーフェスが非同期に設定されている場合でも、親サブサーフェスは、それを上書きして、同期として動作する場合がある。
親サーフェスが非同期として動作する場合、キャッシュされた状態は set_desync に適用される。