pub enum Mutation<'a> {
Show 39 variants
Create {
node_id: u32,
widget: WidgetKind,
},
SetProp {
node_id: u32,
property: PropertyKind,
value: PropertyValue<'a>,
},
SetModifier {
node_id: u32,
index: u16,
modifier: Modifier,
},
Insert {
parent_id: u32,
node_id: u32,
index: u32,
},
Move {
parent_id: u32,
node_id: u32,
index: u32,
},
Remove {
node_id: u32,
},
SetText {
node_id: u32,
text: &'a str,
selection: Option<Selection>,
},
AppendText {
node_id: u32,
text: &'a str,
},
SetTheme(Theme),
SetWindow(Window),
RegisterAsset {
asset_id: u32,
kind: AssetKind,
bytes: &'a [u8],
},
ReleaseAsset {
asset_id: u32,
},
ShowMessage {
handler_id: u64,
text: &'a str,
action: &'a str,
duration: MessageDuration,
placement: Option<MessagePlacement>,
offset_dp: Option<f32>,
},
PostNotification {
key: &'a str,
title: &'a str,
body: &'a str,
channel: &'a str,
action_1: &'a str,
action_2: &'a str,
importance: NotificationImportance,
presentation: NotificationPresentation,
},
WithdrawNotification {
key: &'a str,
},
RequestNotificationPermission,
EditCode {
node_id: u32,
request_id: u32,
base_version: u32,
start_line: u32,
start_column: u32,
end_line: u32,
end_column: u32,
text: &'a str,
},
StartAnimation(Animation<'a>),
ControlAnimation {
node_id: u32,
animation_id: u32,
property: AnimatedProperty,
slot: u8,
op: AnimationControl,
at_time_nanos: u64,
},
SetSelection {
node_id: u32,
base_version: u32,
anchor_line: u32,
anchor_column: u32,
active_line: u32,
active_column: u32,
},
RevealRange {
node_id: u32,
base_version: u32,
start_line: u32,
start_column: u32,
end_line: u32,
end_column: u32,
align: RevealAlign,
},
SetFolded {
node_id: u32,
start_line: u32,
collapsed: bool,
},
SetWindowTheme {
node_id: u32,
theme: Theme,
},
FocusWindow {
node_id: u32,
},
RequestFocus {
node_id: u32,
},
ShowFileDialog {
request: u32,
window: u32,
kind: FileDialogKind,
default_filter: u16,
title: &'a str,
directory: &'a str,
name: &'a str,
filters: &'a str,
},
SetOverlayTokens(OverlayTokens),
SetClipboardText {
text: &'a str,
},
ReadClipboard {
request: u32,
},
SetScrollOffset {
node_id: u32,
offset_px: f64,
},
StorageCall {
request: u32,
op: StorageOp,
store: &'a str,
key: &'a str,
data: &'a [u8],
},
FileCall {
request: u32,
op: FileOp,
create: bool,
handle: u32,
name: &'a str,
data: &'a [u8],
},
ReleaseFileHandle {
handle: u32,
},
ScrollTo {
node_id: u32,
item: u32,
flags: u32,
x_px: f64,
y_px: f64,
},
ScrollIntoView {
node_id: u32,
target: u32,
target_kind: u16,
align_x: u16,
align_y: u16,
flags: u16,
rect: Rect,
},
QueryPositionRect {
node_id: u32,
request: u32,
line: u32,
column: u32,
},
EditCodeGroup {
node_id: u32,
request_id: u32,
base_version: u32,
edits: &'a [u8],
},
InsertSnippet {
node_id: u32,
base_version: u32,
start_line: u32,
start_column: u32,
end_line: u32,
end_column: u32,
snippet: &'a str,
},
SetSelections {
node_id: u32,
base_version: u32,
selections: &'a [u8],
},
}Variants§
Create
SetProp
SetModifier
Insert
Move
Remove
SetText
AppendText
Appends the streamed tail to a Text node instead of resending the whole string.
SetTheme(Theme)
The root theme. Sent once as the first record of the initial batch.
SetWindow(Window)
What the application asked of its own window.
Written once per rebuild beside the theme, and read by the Renderer before it
stands the window up: compose_rust_host_init answers with the first batch, so
the setting is in hand before there is a window to apply it to. Platforms where
the window is not ours ignore it, which is not an error but an absence of anywhere
to put it.
RegisterAsset
Hands the Renderer the bytes of one asset. The Renderer copies them into its own cache inside this call, because the batch buffer is only valid for the call that carries it and an image has to outlive the frame that draws it.
ReleaseAsset
Drops an asset from the Renderer’s cache. The Host owns the lifetime.
ShowMessage
Says a sentence to the user once. It is not a node, because the Host would then have to hold “showing until four seconds from now” and run a render to take it away again. How long it stays, where it sits and what happens when a second one arrives while the first is up are all the Renderer’s.
handler_id is what the action label reports when it is pressed, or 0 when the
message has no action, in which case action is empty too.
placement and offset_dp are where the application asked for it to be drawn,
and None leaves each to the design system. On the wire an absent placement is two
zero tags and an absent offset is a NaN, so a record written before they existed
reads as a message with neither.
PostNotification
Asks the platform to show one notification outside the window.
Not a node, for the same reason a message is not: it outlives the component that
posted it, and when it goes away depends on what the user does in the notification
centre, which the Host never hears about. Posting again under the same key
replaces it. An empty key asks the Renderer to name it, and such a notification
can be neither replaced nor withdrawn. An empty action label means no button.
WithdrawNotification
Takes back the notification posted under key, if it is still showing.
RequestNotificationPermission
Asks the platform for permission to show notifications. It carries nothing: the answer comes back as a permission event.
EditCode
Replaces a range of a code editor’s document, as it stood at base_version, with
text.
The Renderer owns the document, so this is a request and not an assignment: where
the reader has typed since that version the range is moved along with what they
typed, and where they typed in the same place the edit is refused and
CodeEditRejected names request_id. An edit that is applied comes back as an
ordinary CodeChanged, so the version stays one sequence whoever made the edit.
Fields
StartAnimation(Animation<'a>)
Hands the Renderer one animation to play on its own frame clock until it ends. Nothing crosses the boundary while it plays unless it asked for events.
ControlAnimation
Pauses, resumes or cancels one animation the Renderer is playing. A key the Renderer does not hold, or an id that is not the one it holds, is left alone: an animation that ended on its own is not an error to stop.
Fields
property: AnimatedPropertySetSelection
Puts a code editor’s selection between two places in the document as it stood at
base_version. Both ends are moved along with whatever was typed since, and an end
that is outside the document, or between the two halves of a pair, drops the
command and comes back as a protocol error.
Fields
RevealRange
Scrolls a code editor until a range of the document, as it stood at base_version,
is on screen. A range inside a folded stretch unfolds it first.
Fields
align: RevealAlignSetFolded
Folds or unfolds the stretch of a code editor that starts on start_line.
SetWindowTheme
A theme for one Window node, over the application’s. The payload is
SetTheme’s, after the node id. A window without one follows the application’s.
FocusWindow
Brings a window forward and makes it the key window. A command and not a property: it happens once.
RequestFocus
Moves input focus to node_id, or clears focus when node_id is 0.
ShowFileDialog
Asks the platform to show a file dialog on a window and answers later, once, with a
FileDialogResult event that carries request.
window is a Window node id, or 0 for the implicit root window. filters is one
string: a label and its comma-joined extensions as a pair, pairs joined by NUL
("Images\0png,jpg\0Docs\0pdf,txt"). default_filter is the position of the
filter selected first.
Fields
kind: FileDialogKindSetOverlayTokens(OverlayTokens)
Application-level overlay theme tokens for Dialog, Menu, Dropdown and Sheet.
SetClipboardText
Puts text on the platform clipboard as plain text.
Not a node and not answered: a Renderer with no clipboard drops it.
ReadClipboard
Asks for the plain text on the platform clipboard. Answered exactly once, later, by a
ClipboardText event that carries request.
SetScrollOffset
Scrolls a code editor so that offset_px physical pixels of its document are above
the top of its view. The Renderer keeps the offset inside what the document allows,
and reports where it ended up through CodeScrolled like any other scroll.
StorageCall
Asks the Renderer to carry out one operation on the application’s storage, where the
Renderer is the side that can reach it (a browser’s IndexedDB). Answered exactly
once, later, by an IoAnswer event that carries request.
store is the application identifier, key the value’s name (empty for Keys),
and data the value to write (empty for every operation but Write).
FileCall
Asks something of a file the Renderer holds a handle for: reading it, writing
data to it, listing a folder, or finding (and with create, making) the child
called name. Answered exactly once, later: a read or a write by an IoAnswer, a
listing or a child by a FileHandles, and any of them that failed by an IoAnswer
with the reason. name is empty but for Child, data but for Write.
ReleaseFileHandle
The Host holds nothing that names handle any more, so the Renderer may let go of
the file behind it. Not answered. A handle the Renderer does not hold is ignored.
ScrollTo
Asks the scroll container node_id to go to an offset in physical pixels. flags
is the wire word (schema::scroll_to_flags): animate, apply x_px, apply y_px.
An axis whose bit is off is not touched. item is the lazy list item the offset is
measured from, and 0 elsewhere.
ScrollIntoView
Asks the scroll container node_id to bring a rectangle into view. The fields are
the wire’s: target_kind from schema::scroll_target_kind, the two alignments as
schema::ScrollAlign values, and flags from schema::scroll_into_view_flags.
QueryPositionRect
Asks the code editor node_id where a caret at line and column would be drawn.
Answered exactly once, by a PositionRect event carrying request: a rectangle in
the window’s dp, or none where the position is not on screen.
EditCodeGroup
Replaces several ranges of a code editor’s document, as it stood at base_version,
as one edit: all of them or none.
edits is the blob crate::code::encode_edit_group writes. Every range is in the
document at base_version, so no edit moves another; they may come in any order and
must not overlap. The Renderer answers each group with exactly one
CodeEditGroupResult carrying request_id, after the CodeChanged events of the
changes it made, one per edit from the end of the document backwards.
InsertSnippet
Replaces a range of a code editor’s document, as it stood at base_version, with a
snippet, and lets the reader step through its tab stops.
snippet is in the subset of VS Code’s snippet syntax crate::code describes:
$1, ${1:placeholder}, ${1|one,two|}, $0 and \$. The text it leaves is
reported as ordinary CodeChanged events, and undoes as one step.
Fields
SetSelections
Sets every selection of a code editor at once, the first the primary one, each read
against the document as it stood at base_version. selections is 16-byte records
(anchor line, anchor column, active line, active column), which
crate::code::encode_selections writes.