WidgetBinding クラス
1つのウィンドウについてWidgetの再構築、レイアウト、描画、入力処理をフレーム単位で調整します。
名前空間: FloatSoda.Core
アセンブリ: FloatSoda.dll
public class WidgetBinding : IFrameScheduler, IHitTestTarget, IGestureBinding実装するインターフェイス
Section titled “実装するインターフェイス”IFrameScheduler, IHitTestTarget, IGestureBinding
継承したメンバー
Section titled “継承したメンバー”object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()
再構築またはRenderObjectのDirty通知で視覚更新を予約し、次のフレームで必要な処理だけを実行します。
コンストラクター
Section titled “コンストラクター”WidgetBinding()
Section titled “WidgetBinding()”フレーム予約とジェスチャ処理をこのウィンドウへ関連付けたバインディングを初期化します。
public WidgetBinding()GestureArena
Section titled “GestureArena”このウィンドウのジェスチャアリーナ。
public GestureArenaManager GestureArena { get; }プロパティの値
Section titled “プロパティの値”Initialized
Section titled “Initialized”描画ウィンドウとパイプラインの初期化が開始済みかを取得します。
public bool Initialized { get; }プロパティの値
Section titled “プロパティの値”NeedsVisualUpdate
Section titled “NeedsVisualUpdate”次のフレームでレイアウトまたは描画を処理する必要があるかを取得します。
public bool NeedsVisualUpdate { get; }プロパティの値
Section titled “プロパティの値”EnsureVisualUpdateで設定され、DrawFrameが更新処理を開始すると解除されます。 バックグラウンドで完了したTaskからも設定されるため、フィールドはvolatileです。
NextFrameCallbackId
Section titled “NextFrameCallbackId”直近に発行したフレームコールバック識別子を取得します。初期値は0です。
public int NextFrameCallbackId { get; }プロパティの値
Section titled “プロパティの値”PointerRouter
Section titled “PointerRouter”このウィンドウのポインタールータ。
public PointerRouter PointerRouter { get; }プロパティの値
Section titled “プロパティの値”RenderViewElement
Section titled “RenderViewElement”ウィンドウのWidgetツリーをRenderViewへ接続するルートElementを取得します。
public Element? RenderViewElement { get; }プロパティの値
Section titled “プロパティの値”直近のレイアウトで確定したウィンドウのピクセル単位の大きさを取得します。
public SKSizeI Size { get; }プロパティの値
Section titled “プロパティの値”WindowName
Section titled “WindowName”このバインディングが管理するウィンドウ名を取得します。
public string? WindowName { get; }プロパティの値
Section titled “プロパティの値”AttachRootWidget(Widget)
Section titled “AttachRootWidget(Widget)”指定されたWidgetをこのウィンドウのRenderViewへルートとして接続します。
public void AttachRootWidget(Widget rootWidget)パラメーター
Section titled “パラメーター”rootWidget Widget
接続または更新するルートWidget。
初回接続では視覚更新を予約します。接続済みの場合は既存Elementを再利用して更新します。
BeginFrame(TimeSpan)
Section titled “BeginFrame(TimeSpan)”1フレーム分の入力、コールバック、および描画処理を実行します。
public void BeginFrame(TimeSpan elapsedTime)パラメーター
Section titled “パラメーター”elapsedTime TimeSpan
アプリケーション開始からの単調な経過時間。
未初期化の場合は何も行いません。登録済みの一時コールバックはこのフレームで一度だけ実行されます。
CancelFrameCallback(int)
Section titled “CancelFrameCallback(int)”登録済みのフレームコールバックをキャンセルします。
public void CancelFrameCallback(int id)パラメーター
Section titled “パラメーター”id int
DrawFrame()
Section titled “DrawFrame()”予約済みのWidget再構築と視覚更新を処理し、完成したレイヤーをレンダースレッドへ送ります。
public void DrawFrame()Elementの再構築は毎フレーム確認します。NeedsVisualUpdateが未設定の場合、またはウィンドウ作成前の場合はレイアウトと描画を行いません。
EnsureInitialized(string, RenderPostTaskRunner, Func<Renderer, IEngineWindow>, bool)
Section titled “EnsureInitialized(string, RenderPostTaskRunner, Func<Renderer, IEngineWindow>, bool)”このバインディングの描画パイプラインとエンジンウィンドウを初回だけ初期化します。
public void EnsureInitialized(string windowName, RenderPostTaskRunner renderPostTaskRunner, Func<Renderer, IEngineWindow> windowFactory, bool visible = false)パラメーター
Section titled “パラメーター”windowName string
作成するウィンドウの識別名。
renderPostTaskRunner RenderPostTaskRunner
ウィンドウ作成と描画処理を実行するレンダースレッド。
windowFactory Func<Renderer, IEngineWindow>
初期化済みレンダラーからエンジンウィンドウを作成する処理。
visible bool
デスクトップウィンドウを作成時から表示する場合はtrue。既定値はfalseです。
エンジンウィンドウの作成はレンダースレッドへ予約されるため、このメソッドから戻った時点では完了していない場合があります。
EnsureVisualUpdate()
Section titled “EnsureVisualUpdate()”次のフレームで視覚更新が必要であることを記録します。
public void EnsureVisualUpdate()DirtyなElementまたはRenderObjectから呼び出され、DrawFrameによる再構築、レイアウト、描画の実行を予約します。
HandleEvent(PointerEvent, HitTestEntry)
Section titled “HandleEvent(PointerEvent, HitTestEntry)”ヒットパスを通過したポインターイベントを認識器へ配送し、フェーズに応じてアリーナを進行します。
public void HandleEvent(PointerEvent pointerEvent, HitTestEntry entry)パラメーター
Section titled “パラメーター”pointerEvent PointerEvent
認識器へ配送するポインターイベント。
entry HitTestEntry
このバインディングに対応するヒットテストエントリ。
Downフェーズでは認識器の参加受付を締め切り、Upフェーズでは未確定アリーナの既定勝者を確定します。
ReapplyDeviceTrackedTransform()
Section titled “ReapplyDeviceTrackedTransform()”このウィンドウが DeviceTrackedOverlayTransform を持つ場合、Transform を再適用します。 デバイス接続/ロール変更イベント(VREvent_TrackedDeviceActivated / VREvent_TrackedDeviceRoleChanged)を 受けて FloatSodaApp から呼ばれます。未接続だった場合の初回適用に加え、 再接続で device index が変わったケースの再バインドも兼ねます(未接続なら Apply 側で安全にスキップされます)。
public void ReapplyDeviceTrackedTransform()Reassemble()
Section titled “Reassemble()”ホットリロード時にWidgetツリー全体を再ビルド対象にする。 実際の再ビルドは次のDrawFrameのBuildScopeで行われる。
public void Reassemble()ScheduleFrame()
Section titled “ScheduleFrame()”次のフレーム処理が必要であることを記録します。
public void ScheduleFrame()同一フレーム内で複数回呼び出しても予約状態は1件にまとめられ、BeginFrameの開始時に解除されます。
ScheduleFrameCallback(Action<TimeSpan>)
Section titled “ScheduleFrameCallback(Action<TimeSpan>)”次フレームで呼ばれるコールバックを登録し、キャンセル用IDを返します。
public int ScheduleFrameCallback(Action<TimeSpan> callback)パラメーター
Section titled “パラメーター”RenderPipeline, WidgetBinding.BuildOwner