Skip to main content

ComposeHost

Struct ComposeHost 

Source
pub struct ComposeHost(/* private fields */);
Expand description

The Host of a composable application: compose-rust’s Host driving a Recomposer.

The boundary builds one on the UI thread for an application launched with launch. Tests and benchmarks build one directly, which is why it is public; it derefs to the Host, whose calls are the boundary’s.

Implementations§

Source§

impl ComposeHost

Source

pub fn new(content: fn()) -> Self

The Host for content, in the theme the application launched with.

Source

pub fn with_theme(content: fn(), theme: Theme) -> Self

The same, in the given theme.

Source

pub fn with_content(content: impl Fn() + Send + Sync + 'static) -> Self

A Host for a closure rather than a function, for tests that compose something built at run time. The closure is shared with the factory a resync calls, so it has to be Send and Sync like any other root.

Methods from Deref<Target = Host>§

Source

pub fn rebuild(&mut self) -> Result<&[u8], ProtocolError>

Source

pub fn dispatch_event( &mut self, bytes: &[u8], ) -> Result<(&[u8], i64), ProtocolError>

Source

pub fn arena(&self) -> (*const u8, usize)

The batch arena, reported to the Renderer on every boundary call.

Source

pub fn resync(&mut self) -> Result<(&[u8], i64), ProtocolError>

Answers with the whole tree, for a Renderer that no longer has a node table.

The Host keeps no shadow of what it has already sent, so the only way to produce a full-tree batch is to build the application again, and that resets component state. A Renderer that keeps its node table across a configuration change never needs this call, which is what the Android host does.

Source

pub fn dispatch( &mut self, event: HostEvent<'_>, ) -> Result<(&[u8], i64), ProtocolError>

Source

pub fn render_frame( &mut self, frame_time_nanos: u64, ) -> Result<&[u8], ProtocolError>

Source

pub fn append_text(&mut self, node_id: u32, tail: &str)

Queues a streamed tail for the next frame. Tokens arriving inside one frame are merged into a single AppendText record, so a token never costs a batch of its own.

Source

pub fn register_asset( &mut self, asset_id: u32, kind: AssetKind, bytes: &[u8], ) -> Result<&[u8], ProtocolError>

Registers one asset and returns the batch that carries it.

The bytes are copied once here and once more by the Renderer into its cache. After that the id is all that travels, so drawing the same image every frame costs a fixed-layout property record and nothing else.

Source

pub fn register_icon( &mut self, asset_id: u32, role: IconRole, ) -> Result<&[u8], ProtocolError>

Registers an icon by the meaning it carries. The Renderer holds the artwork for every design system, so what crosses is the role and not a picture or a name.

Source

pub fn release_asset(&mut self, asset_id: u32) -> Result<&[u8], ProtocolError>

Drops the asset from the Renderer’s cache. Using the id afterwards is a reported protocol error.

Source

pub fn set_text( &mut self, node_id: u32, text: &str, selection: Option<Selection>, ) -> Result<&[u8], ProtocolError>

Trait Implementations§

Source§

impl Deref for ComposeHost

Source§

type Target = Host

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Host

Dereferences the value.
Source§

impl DerefMut for ComposeHost

Source§

fn deref_mut(&mut self) -> &mut Host

Mutably dereferences the value.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.