Logo FS-Skia-UI

InteractiveViewerHost<'model, 'msg> Type

Pointer-aware, size-aware durable host variant (feature 085). Mirrors `GeneratedAppHost` field-for-field PLUS a model-aware pointer seam (`MapPointer`) and a size-carrying `View`. Controls-free lower runner; the Control/PointerInteraction-aware `InteractiveAppHost` (FS.Skia.UI.Controls.Elmish) adapts onto it (research D3-AMEND). `GeneratedAppHost` and `Viewer.runApp` are left intact (FR-006). Feature 091 (E2, behavioral note — signature unchanged): the per-message repaint stores the `SceneNode` the host's `View` produces (the existing `currentScene <- host.View …` seam). The viewer is framework-neutral and does not itself diff (its `View` yields an opaque `SceneNode`, not a `Control<'msg>` tree); the keyed-reconciliation retained path lives at the controls adapter edge (`Controls.Elmish.runInteractiveApp`), whose `View` produces each frame by diffing the next tree against a retained previous tree (`module internal RetainedRender`). So when the host is the controls adapter, this repaint is already O(changed-subtree) and byte-identical to a full rebuild (FR-004/FR-005); a generic host that supplies its own `View` is unchanged. Feature 092 (FR-006): `MapKey` returns `'msg list` (was `'msg option`) so one key can dispatch SEVERAL product messages in order — e.g. a focused control with more than one `onChanged` binding. `[]` = the key is unhandled by the host seam (was `None`); a non-empty list is folded through `Update` in order. Migration is mechanical: `Some m` → `[ m ]`, `None` → `[]`. The sibling `GeneratedAppHost.MapKey` is DELIBERATELY left at `'msg option`: it backs the non-interactive `Viewer.runApp` path (generated projects, samples) where multi-message keys are not needed, and widening it would churn the template/generated host for no behavioral gain.

Record fields

Record Field Description

Diagnostics

Full Usage: Diagnostics

Field type: ViewerDiagnosticsOptions

Init

Full Usage: Init

Field type: unit -> 'model * ViewerEffect list
Field type: unit -> 'model * ViewerEffect list

MapKey

Full Usage: MapKey

Field type: ViewerKey -> bool -> 'msg list
Field type: ViewerKey -> bool -> 'msg list

MapPointer

Full Usage: MapPointer

Field type: ViewerPointerInput -> Size -> 'model -> 'msg list
Field type: ViewerPointerInput -> Size -> 'model -> 'msg list

Tick

Full Usage: Tick

Field type: TimeSpan -> 'msg option
Field type: TimeSpan -> 'msg option

Update

Full Usage: Update

Field type: 'msg -> 'model -> 'model * ViewerEffect list
Field type: 'msg -> 'model -> 'model * ViewerEffect list

View

Full Usage: View

Field type: Size -> 'model -> SceneNode
Field type: Size -> 'model -> SceneNode

Type something to start searching.