Skip to main content

ScrollController

Struct ScrollController 

Source
pub struct ScrollController { /* private fields */ }
Expand description

LPAR-05 scroll controller.

Consumes DragStart/DragMove/DragEnd events and tick advances to drive scroll offsets on ObjectNode-based scroll containers. Call process on every drag event and tick on every Event::Tick.

§Determinism

Given identical (event, tick) input sequences, the controller produces identical emitted-event and offset sequences (LPAR-05 §8.1).

§Thread safety

ScrollController is not Send or Sync. Use it from a single thread.

Implementations§

Source§

impl ScrollController

Source

pub fn new(config: ScrollConfig) -> Self

Create a new controller with the given configuration.

Source

pub fn default_config() -> Self

Create a new controller with default configuration.

Source

pub fn tick(&mut self, root: &mut ObjectNode, sink: &mut dyn FnMut(Rect))

Advance the internal tick counter and process any active throw/snap tween.

Call this once per Event::Tick. The sink callback receives each viewport dirty rect for every effective offset change.

Source

pub fn process( &mut self, root: &mut ObjectNode, ev: &Event, sink: &mut dyn FnMut(Rect), )

Process a drag event (DragStart, DragMove, or DragEnd).

Pass the drag stream event from the DragRecognizer. Other events are silently ignored (use tick for Event::Tick).

The sink callback receives viewport dirty rects for every effective offset change.

Source

pub fn is_active(&self) -> bool

Return true when a scroll session is currently active (between ScrollBegin and ScrollEnd, inclusive of the throw phase).

Use this from the platform layer to determine whether a drag event has been absorbed by the scroll controller so that it MUST NOT also be dispatched as a normal drag gesture (LPAR-05 §7.2).

Source

pub fn cancel_if_active( &mut self, root: &mut ObjectNode, path: &[usize], sink: &mut dyn FnMut(Rect), )

Notify the controller that the container at path is being invalidated (detached, hidden, or SCROLLABLE cleared) during an active session.

If the active session targets that container, ScrollEnd is emitted before the structural change becomes visible (LPAR-05 §7.6). Call this before mutating the node.

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> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
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> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
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.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.