use crate::{ AnyElement, App, Bounds, Element, GlobalElementId, IntoElement, LayoutId, Pixels, Window,};/// Builds a `Deferred` element, which delays the layout and paint of its child.pub fn deferred(child: impl IntoElement) -> Deferred { Deferred { child: Some(child.into_any_element()), priority: 0, }}/// An element which delays the painting of its child until after all of/// its ancestors, while keeping its layout as part of the current element tree.pub struct Deferred { child: Option<AnyElement>, priority: usize,}impl Deferred { /// Sets the `priority` value of the `deferred` element, which /// determines the drawing order relative to other deferred elements, /// with higher values being drawn on top. pub fn with_priority(mut self, priority: usize) -> Self { self.priority = priority; self }}impl Element for Deferred { type RequestLayoutState = (); type PrepaintState = (); fn id(&self) -> Option<crate::ElementId> { None } fn request_layout( &mut self, _id: Option<&GlobalElementId>, window: &mut Window, cx: &mut App, ) -> (LayoutId, ()) { let layout_id = self.child.as_mut().unwrap().request_layout(window, cx); (layout_id, ()) } fn prepaint( &mut self, _id: Option<&GlobalElementId>, _bounds: Bounds<Pixels>, _request_layout: &mut Self::RequestLayoutState, window: &mut Window, _cx: &mut App, ) { let child = self.child.take().unwrap(); let element_offset = window.element_offset(); window.defer_draw(child, element_offset, self.priority) } fn paint( &mut self, _id: Option<&GlobalElementId>, _bounds: Bounds<Pixels>, _request_layout: &mut Self::RequestLayoutState, _prepaint: &mut Self::PrepaintState, _window: &mut Window, _cx: &mut App, ) { }}impl IntoElement for Deferred { type Element = Self; fn into_element(self) -> Self::Element { self }}impl Deferred { /// Sets a priority for the element. A higher priority conceptually means painting the element /// on top of deferred draws with a lower priority (i.e. closer to the viewer). pub fn priority(mut self, priority: usize) -> Self { self.priority = priority; self }}
use crate::{
AnyElement, App, Bounds, Element, GlobalElementId, IntoElement, LayoutId, Pixels, Window,
};
/// Builds a `Deferred` element, which delays the layout and paint of its child.
pub fn deferred(child: impl IntoElement) -> Deferred {
Deferred {
child: Some(child.into_any_element()),
priority: 0,
}
}
/// An element which delays the painting of its child until after all of
/// its ancestors, while keeping its layout as part of the current element tree.
pub struct Deferred {
child: Option<AnyElement>,
priority: usize,
}
impl Deferred {
/// Sets the `priority` value of the `deferred` element, which
/// determines the drawing order relative to other deferred elements,
/// with higher values being drawn on top.
pub fn with_priority(mut self, priority: usize) -> Self {
self.priority = priority;
self
}
}
impl Element for Deferred {
type RequestLayoutState = ();
type PrepaintState = ();
fn id(&self) -> Option<crate::ElementId> {
None
}
fn request_layout(
&mut self,
_id: Option<&GlobalElementId>,
window: &mut Window,
cx: &mut App,
) -> (LayoutId, ()) {
let layout_id = self.child.as_mut().unwrap().request_layout(window, cx);
(layout_id, ())
}
fn prepaint(
&mut self,
_id: Option<&GlobalElementId>,
_bounds: Bounds<Pixels>,
_request_layout: &mut Self::RequestLayoutState,
window: &mut Window,
_cx: &mut App,
) {
let child = self.child.take().unwrap();
let element_offset = window.element_offset();
window.defer_draw(child, element_offset, self.priority)
}
fn paint(
&mut self,
_id: Option<&GlobalElementId>,
_bounds: Bounds<Pixels>,
_request_layout: &mut Self::RequestLayoutState,
_prepaint: &mut Self::PrepaintState,
_window: &mut Window,
_cx: &mut App,
) {
}
}
impl IntoElement for Deferred {
type Element = Self;
fn into_element(self) -> Self::Element {
self
}
}
impl Deferred {
/// Sets a priority for the element. A higher priority conceptually means painting the element
/// on top of deferred draws with a lower priority (i.e. closer to the viewer).
pub fn priority(mut self, priority: usize) -> Self {
self.priority = priority;
self
}
}