コンテンツにスキップ

WidgetBinding クラス

1つのウィンドウについてWidgetの再構築、レイアウト、描画、入力処理をフレーム単位で調整します。

名前空間: FloatSoda.Core
アセンブリ: FloatSoda.dll

public class WidgetBinding : IFrameScheduler, IHitTestTarget, IGestureBinding

object ← WidgetBinding

IFrameScheduler, IHitTestTarget, IGestureBinding

object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()

再構築またはRenderObjectのDirty通知で視覚更新を予約し、次のフレームで必要な処理だけを実行します。

フレーム予約とジェスチャ処理をこのウィンドウへ関連付けたバインディングを初期化します。

public WidgetBinding()

このウィンドウのジェスチャアリーナ。

public GestureArenaManager GestureArena { get; }

GestureArenaManager

描画ウィンドウとパイプラインの初期化が開始済みかを取得します。

public bool Initialized { get; }

bool

次のフレームでレイアウトまたは描画を処理する必要があるかを取得します。

public bool NeedsVisualUpdate { get; }

bool

EnsureVisualUpdateで設定され、DrawFrameが更新処理を開始すると解除されます。 バックグラウンドで完了したTaskからも設定されるため、フィールドはvolatileです。

直近に発行したフレームコールバック識別子を取得します。初期値は0です。

public int NextFrameCallbackId { get; }

int

このウィンドウのポインタールータ。

public PointerRouter PointerRouter { get; }

PointerRouter

ウィンドウのWidgetツリーをRenderViewへ接続するルートElementを取得します。

public Element? RenderViewElement { get; }

Element?

直近のレイアウトで確定したウィンドウのピクセル単位の大きさを取得します。

public SKSizeI Size { get; }

SKSizeI

このバインディングが管理するウィンドウ名を取得します。

public string? WindowName { get; }

string?

指定されたWidgetをこのウィンドウのRenderViewへルートとして接続します。

public void AttachRootWidget(Widget rootWidget)

rootWidget Widget

接続または更新するルートWidget。

初回接続では視覚更新を予約します。接続済みの場合は既存Elementを再利用して更新します。

1フレーム分の入力、コールバック、および描画処理を実行します。

public void BeginFrame(TimeSpan elapsedTime)

elapsedTime TimeSpan

アプリケーション開始からの単調な経過時間。

未初期化の場合は何も行いません。登録済みの一時コールバックはこのフレームで一度だけ実行されます。

登録済みのフレームコールバックをキャンセルします。

public void CancelFrameCallback(int id)

id int

予約済みの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)

windowName string

作成するウィンドウの識別名。

renderPostTaskRunner RenderPostTaskRunner

ウィンドウ作成と描画処理を実行するレンダースレッド。

windowFactory Func<Renderer, IEngineWindow>

初期化済みレンダラーからエンジンウィンドウを作成する処理。

visible bool

デスクトップウィンドウを作成時から表示する場合はtrue。既定値はfalseです。

エンジンウィンドウの作成はレンダースレッドへ予約されるため、このメソッドから戻った時点では完了していない場合があります。

次のフレームで視覚更新が必要であることを記録します。

public void EnsureVisualUpdate()

DirtyなElementまたはRenderObjectから呼び出され、DrawFrameによる再構築、レイアウト、描画の実行を予約します。

ヒットパスを通過したポインターイベントを認識器へ配送し、フェーズに応じてアリーナを進行します。

public void HandleEvent(PointerEvent pointerEvent, HitTestEntry entry)

pointerEvent PointerEvent

認識器へ配送するポインターイベント。

entry HitTestEntry

このバインディングに対応するヒットテストエントリ。

Downフェーズでは認識器の参加受付を締め切り、Upフェーズでは未確定アリーナの既定勝者を確定します。

このウィンドウが DeviceTrackedOverlayTransform を持つ場合、Transform を再適用します。 デバイス接続/ロール変更イベント(VREvent_TrackedDeviceActivated / VREvent_TrackedDeviceRoleChanged)を 受けて FloatSodaApp から呼ばれます。未接続だった場合の初回適用に加え、 再接続で device index が変わったケースの再バインドも兼ねます(未接続なら Apply 側で安全にスキップされます)。

public void ReapplyDeviceTrackedTransform()

ホットリロード時にWidgetツリー全体を再ビルド対象にする。 実際の再ビルドは次のDrawFrameのBuildScopeで行われる。

public void Reassemble()

次のフレーム処理が必要であることを記録します。

public void ScheduleFrame()

同一フレーム内で複数回呼び出しても予約状態は1件にまとめられ、BeginFrameの開始時に解除されます。

次フレームで呼ばれるコールバックを登録し、キャンセル用IDを返します。

public int ScheduleFrameCallback(Action<TimeSpan> callback)

callback Action<TimeSpan>

int

RenderPipeline, WidgetBinding.BuildOwner