Skip to main content

ProgressiveLayoutContext

Struct ProgressiveLayoutContext 

Source
pub struct ProgressiveLayoutContext<'a> { /* private fields */ }
Expand description

Opt-in wrapper that breaks a single synchronous layout pass into incremental batches so the UI thread is not blocked for large child lists.

ProgressiveLayoutContext stores the list of children, tracks which ones have been processed, and exposes layout_next_batch to advance layout by batch_size children at a time. Partial results are persisted through LayoutCache so that subsequent frames can pick up where the previous frame left off.

Typical usage:

let mut ctx = ProgressiveLayoutContext::new(bounds, &subviews, spacing, alignment, distribution);
while !ctx.is_complete() {
    ctx.layout_next_batch(8);
}
let rects = ctx.take_rects();

Implementations§

Source§

impl<'a> ProgressiveLayoutContext<'a>

Source

pub fn new( bounds: Rect, subviews: &'a [&'a dyn LayoutView], spacing: f32, alignment: Alignment, distribution: Distribution, ) -> Self

Create a new progressive layout context for the given subviews.

No layout work is performed in the constructor; call layout_next_batch to advance.

Source

pub fn layout_next_batch(&mut self, batch_size: usize) -> bool

Layout up to batch_size additional children.

Returns true when all children have been laid out (i.e. the context is complete). Returns false when there are still pending children.

Already-laid-out children are skipped on subsequent calls so it is safe to call this method multiple times with any batch size.

Source

pub fn layout_next_batch_with_cache( &mut self, batch_size: usize, cache: &mut LayoutCache, ) -> (bool, Vec<Rect>)

Variant of layout_next_batch that accepts a LayoutCache for integration with the persistent cache. When cache is Some, the method reads and writes size/rect entries so that partial results survive across frames.

Returns (is_complete, Vec<Rect>) where the rect vector contains the newly-computed rects for the children processed in this batch.

Source

pub fn is_complete(&self) -> bool

Returns true when every child has been laid out OR fallback has been applied to remaining children.

Source

pub fn progress(&self) -> (usize, usize)

Returns (completed, total) progress counts.

Source

pub fn apply_remaining_fallback(&mut self, cache: &mut LayoutCache) -> Vec<Rect>

Apply fallback positioning to all children that have not yet been laid out. Fallback rects are estimated from the child’s cached previous rect (if available in cache.previous_rects) or from a simple grid-based estimate within self.bounds.

After calling this method is_complete() returns true.

Returns the fallback rects that were assigned (one per remaining child).

Source

pub fn take_rects(self) -> Vec<Rect>

Consume the context and return the final Vec<Rect> for all children in order.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

Source§

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

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

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

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.

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.