pub struct SliverConstraints {
pub axis: ScrollAxis,
pub scroll_offset: f64,
pub preceding_scroll_extent: f64,
pub overlap: f64,
pub remaining_paint_extent: f64,
pub cross_axis_extent: f64,
pub viewport_main_axis_extent: f64,
pub cache_origin: f64,
pub remaining_cache_extent: f64,
pub user_scroll_direction: ScrollDirection,
}Expand description
The sliver protocol a scrolling viewport lays its children out with —
a widget implements SliverWidget and overrides
Widget::as_sliver to answer SliverConstraints with a
SliverGeometry; a viewport lays such a child out through
ChildPod::layout_sliver_child. Lifted so an app’s own sliver needs no
direct frust-core dependency.
What a viewport hands each sliver child: its position in the scroll and the
space left to fill — Flutter’s SliverConstraints.
All extents are logical pixels along axis
unless named cross_axis_*. PartialEq is what
ChildPod::layout_sliver_child’s
layout skip compares, so constraints carrying a NaN never compare equal and
always lay out again.
Fields§
§axis: ScrollAxisThe axis the viewport scrolls along (Flutter’s axis, derived there
from axisDirection).
scroll_offset: f64How far into this sliver the viewport’s leading edge has scrolled: 0
while the sliver’s start is on screen or ahead of it (Flutter’s
scrollOffset).
preceding_scroll_extent: f64The scroll extent consumed by every sliver before this one (Flutter’s
precedingScrollExtent); may be infinite after an unbounded sliver.
overlap: f64How many pixels from this sliver’s paint start an earlier sliver has
already painted over, e.g. a pinned header (Flutter’s overlap).
remaining_paint_extent: f64How many pixels of content the sliver should consider providing — the
viewport’s paint space not yet taken by earlier slivers (Flutter’s
remainingPaintExtent); may be infinite for a shrink-wrapping viewport.
cross_axis_extent: f64The viewport’s extent across the scroll axis (Flutter’s
crossAxisExtent).
viewport_main_axis_extent: f64The viewport’s extent along the scroll axis (Flutter’s
viewportMainAxisExtent).
cache_origin: f64Where the cache area starts relative to scroll_offset, never positive
(Flutter’s cacheOrigin).
remaining_cache_extent: f64How much content the sliver should provide starting at cache_origin,
visible region plus cache area (Flutter’s remainingCacheExtent).
user_scroll_direction: ScrollDirectionThe direction the user is scrolling in (Flutter’s userScrollDirection).
Implementations§
Source§impl SliverConstraints
impl SliverConstraints
Sourcepub fn growth_direction(&self) -> GrowthDirection
pub fn growth_direction(&self) -> GrowthDirection
Which way content grows — always GrowthDirection::Forward (Flutter’s
growthDirection).
Sourcepub fn as_box_constraints(&self) -> BoxConstraints
pub fn as_box_constraints(&self) -> BoxConstraints
Box constraints for a box child laid out inside this sliver: tight to
cross_axis_extent across the axis, unbounded along it (Flutter’s
asBoxConstraints() with its default extents).
Sourcepub fn debug_assert_valid(&self)
pub fn debug_assert_valid(&self)
Debug-assert the constraints are well formed — Flutter’s
SliverConstraints.debugAssertIsValid (including isNormalized).
Checks that scroll_offset, cross_axis_extent,
viewport_main_axis_extent, remaining_paint_extent and
remaining_cache_extent are non-negative (NaN fails), that
cache_origin is not positive, and that preceding_scroll_extent and
overlap are not NaN. Compiles to nothing without debug_assertions.
Trait Implementations§
Source§impl Clone for SliverConstraints
impl Clone for SliverConstraints
Source§fn clone(&self) -> SliverConstraints
fn clone(&self) -> SliverConstraints
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for SliverConstraints
Source§impl Debug for SliverConstraints
impl Debug for SliverConstraints
Source§impl PartialEq for SliverConstraints
impl PartialEq for SliverConstraints
impl StructuralPartialEq for SliverConstraints
Auto Trait Implementations§
impl Freeze for SliverConstraints
impl RefUnwindSafe for SliverConstraints
impl Send for SliverConstraints
impl Sync for SliverConstraints
impl Unpin for SliverConstraints
impl UnsafeUnpin for SliverConstraints
impl UnwindSafe for SliverConstraints
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.