Struct zng::app::HeadlessApp

source ·
pub struct HeadlessApp { /* private fields */ }
Expand description

A headless app controller.

Headless apps don’t cause external side-effects like visible windows and don’t listen to system events. They can be used for creating apps like a command line app that renders widgets, or for creating integration tests.

You can start a headless app using AppExtended::run_headless.

Implementations§

source§

impl HeadlessApp

source

pub fn block_on<A>( &mut self, handler: &mut (dyn AppHandler<A> + 'static), args: &A, timeout: Duration, ) -> Result<(), String>
where A: Clone + 'static,

Calls an AppHandler<A> once and blocks until the update tasks started during the call complete.

This function spins until all update tasks are completed. Timers or send events can be received during execution but the loop does not sleep, it just spins requesting an update for each pass.

source

pub fn block_on_multi<A>( &mut self, handlers: Vec<&mut (dyn AppHandler<A> + 'static)>, args: &A, timeout: Duration, ) -> Result<(), String>
where A: Clone + 'static,

Calls multiple AppHandler<A> once each and blocks until all update tasks are complete.

This function spins until all update tasks are completed. Timers or send events can be received during execution but the loop does not sleep, it just spins requesting an update for each pass.

source

pub fn block_on_fut<F>( &mut self, future: F, timeout: Duration, ) -> Result<<F as Future>::Output, String>
where F: Future,

Polls a future and updates the app repeatedly until it completes or the timeout is reached.

source

pub fn doc_test<A, H>(args: A, handler: H)
where A: Clone + 'static, H: AppHandler<A>,

Calls the handler once and block_on it with a 60 seconds timeout using the minimal headless app.

source

pub fn doc_test_multi<A>(args: A, handlers: Vec<Box<dyn AppHandler<A>>>)
where A: Clone + 'static,

Calls the handlers once each and block_on_multi with a 60 seconds timeout.

source§

impl HeadlessApp

source

pub fn renderer_enabled(&mut self) -> bool

If headless rendering is enabled.

When enabled windows are still not visible but frames will be rendered and the frame image can be requested.

Note that UiNode::render is still called when a renderer is disabled and you can still query the latest frame from WINDOWS.widget_tree. The only thing that is disabled is the actual renderer that converts display lists to pixels.

source

pub fn update(&mut self, wait_app_event: bool) -> AppControlFlow

Does updates unobserved.

See update_observed for more details.

source

pub fn update_observe( &mut self, on_update: impl FnMut(), wait_app_event: bool, ) -> AppControlFlow

Does updates observing update only.

See update_observed for more details.

source

pub fn update_observe_event( &mut self, on_event: impl FnMut(&mut EventUpdate), wait_app_event: bool, ) -> AppControlFlow

Does updates observing event only.

See update_observed for more details.

source

pub fn update_observed<O>( &mut self, observer: &mut O, wait_app_event: bool, ) -> AppControlFlow

Does updates with an AppEventObserver.

If wait_app_event is true the thread sleeps until at least one app event is received or a timer elapses, if it is false only responds to app events already in the buffer.

source

pub fn run_task<R, T>( &mut self, task: impl IntoFuture<IntoFuture = T>, ) -> Option<R>
where R: 'static, T: Future<Output = R> + Send + Sync + 'static,

Execute the async task in the UI thread, updating the app until it finishes or the app shuts-down.

Returns the task result if the app has not shut-down.

source

pub fn exit(self)

Requests and wait for app exit.

Forces deinit if exit is cancelled.

source

pub fn has_exited(&self) -> bool

If the app has exited.

Exited apps cannot update anymore. The app should be dropped to unload the app scope.

Trait Implementations§

source§

impl HeadlessAppGestureExt for HeadlessApp

source§

fn press_shortcut(&mut self, window_id: WindowId, shortcut: impl Into<Shortcut>)

Generates key press events to mimic the shortcut and updates.
source§

impl HeadlessAppKeyboardExt for HeadlessApp

source§

fn on_keyboard_input( &mut self, window_id: WindowId, code: KeyCode, location: KeyLocation, key: Key, state: KeyState, )

Notifies keyboard input event. Read more
source§

fn press_key( &mut self, window_id: WindowId, code: KeyCode, location: KeyLocation, key: Key, )

Does a key-down, key-up and updates.
source§

fn press_modified_key( &mut self, window_id: WindowId, modifiers: ModifiersState, code: KeyCode, location: KeyLocation, key: Key, )

Does a modifiers changed, key-down, key-up, reset modifiers and updates.
source§

impl HeadlessAppWindowExt for HeadlessApp

source§

fn open_window<F>( &mut self, new_window: impl IntoFuture<IntoFuture = F>, ) -> WindowId
where F: Future<Output = WindowRoot> + Send + 'static,

Open a new headless window and returns the new window ID. Read more
source§

fn focus_window(&mut self, window_id: WindowId)

Cause the headless window to think it is focused in the screen.
source§

fn blur_window(&mut self, window_id: WindowId)

Cause the headless window to think focus moved away from it.
source§

fn window_frame_image( &mut self, window_id: WindowId, mask: Option<ImageMaskMode>, ) -> ReadOnlyVar<Img, ArcVar<Img>>

Copy the current frame pixels of the window. Read more
source§

fn close_window(&mut self, window_id: WindowId) -> bool

Sends a close request. Read more
source§

fn run_window<F>(&mut self, new_window: impl IntoFuture<IntoFuture = F>)
where F: Future<Output = WindowRoot> + Send + 'static,

Open a new headless window and update the app until the window closes.
source§

fn doc_test_window<F>(&mut self, new_window: impl IntoFuture<IntoFuture = F>)
where F: Future<Output = WindowRoot> + Send + 'static,

Open a new headless window and update the app until the window closes or 60 seconds elapse.

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
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

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

source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T