Deferred
The Deferred element allow you to defer the layout and paint of a element. GPUI follows the Painter's algorithm where elements that get painted after will be drawn on top of a element that got painted earlier. This is where the Deferred element allows you to delay the layout and paint of its child.
Creating a Deferred
The deferred function takes a impl IntoElement which is the child element and returns the Deferred element.
use gpui::{
AppContext, Application, Context, IntoElement, ParentElement, Render, Window, WindowOptions,
deferred, div,
};
struct RootView;
impl Render for RootView {
fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
div().child(deferred(div()))
}
}
fn main() {
Application::new().run(|app| {
app.open_window(WindowOptions::default(), |_window, app| {
app.new(|_cx| RootView)
})
.unwrap();
});
}
Deferred with Priority
This sets the priority at which the element will be deferred at, controlling the order relative to other deferred elements. Higher priority values are drawn on top of lower priority values.
use gpui::{
AppContext, Application, Context, IntoElement, ParentElement, Render, Window, WindowOptions,
deferred, div,
};
struct RootView;
impl Render for RootView {
fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
div().child(deferred(div()).with_priority(10))
}
}
fn main() {
Application::new().run(|app| {
app.open_window(WindowOptions::default(), |_window, app| {
app.new(|_cx| RootView)
})
.unwrap();
});
}