Skip to main content

Bouncing

Struct Bouncing 

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

iOS’s scroll feel — Flutter’s BouncingScrollPhysics: a drag may pull the position past an edge against a friction factor that tightens with depth, nothing is ever boundary-rejected, and a release runs an exponential friction curve that hands over to a rubber-band spring at whichever edge it reaches.

See the module docs for the drag convention the surfaces hand this curve its depth through, and for the deviations from the Dart source.

Implementations§

Source§

impl Bouncing

Source

pub const MIN_FLING_VELOCITY: f64

Flutter’s BouncingScrollPhysics.minFlingVelocity: twice super::MIN_FLING_VELOCITY, because this physics’ ballistic curve decelerates more slowly than the clamping one, so a fling has to be a more deliberate flick to be worth starting.

Source

pub fn new() -> Bouncing

A standalone bouncing physics at DecelerationRate::Normal.

Source

pub fn with_rate(rate: DecelerationRate) -> Bouncing

A standalone bouncing physics at rate.

Source

pub fn chain(self, parent: impl ScrollPhysics + 'static) -> Bouncing

Chain parent behind this physics, the module-wide composition convention (ScrollPhysics’ Chaining).

Source

pub fn friction_factor(&self, overscroll_fraction: f64) -> f64

The fraction of a past-edge pull that reaches the position at an overscroll of overscroll_fraction viewports — Flutter’s frictionFactor: 0.52·(1 − f)² at DecelerationRate::Normal, 0.26·(1 − f)² at DecelerationRate::Fast.

Trait Implementations§

Source§

impl Debug for Bouncing

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for Bouncing

Source§

fn default() -> Bouncing

Returns the “default value” for a type. Read more
Source§

impl ScrollPhysics for Bouncing

Source§

fn apply_physics_to_user_offset( &self, metrics: &ScrollMetrics, offset: f64, ) -> f64

Travel inside the range passes through untouched, travel that deepens an overscroll is scaled by Self::friction_factor at the depth already held, and travel easing back toward the range passes through untouched too. That asymmetry is the signature of the feel: pulling further out gets progressively heavier, letting it back never fights the finger.

Source§

fn apply_boundary_conditions( &self, _metrics: &ScrollMetrics, _value: f64, ) -> f64

Nothing is ever rejected — holding an out-of-range position is the whole point of a bouncing surface, and the edge spring (not a boundary rule) is what returns it.

Source§

fn create_ballistic_simulation( &self, metrics: &ScrollMetrics, velocity: f64, ) -> Option<Box<dyn Simulation>>

An overscrolled surface always gets its spring back, in range a fling needs Self::MIN_FLING_VELOCITY, and anything else is no motion at all.

Source§

fn should_accept_user_offset(&self, _metrics: &ScrollMetrics) -> bool

Always true: an iOS surface whose content fits its viewport still scrolls — it just bounces straight back.

Source§

fn carried_momentum(&self, existing_velocity: f64) -> f64

Flutter’s fitted power curve, capped at MOMENTUM_CAP (40000 px/s) and signed like the motion it carries over.

Source§

fn parent(&self) -> Option<&dyn ScrollPhysics>

The chained parent physics, if this one was built via chain(...). None for a physics built standalone (the chain’s root).
Source§

fn min_fling_velocity(&self) -> f64

The minimum release speed that starts a fling. Read more
Source§

fn spring(&self) -> SpringDescription

The spring a bounce-back/snap simulation is built from. Read more
Source§

fn max_fling_velocity(&self) -> f64

The fastest fling speed this physics honors. Read more
Source§

fn tolerance_for(&self, metrics: &ScrollMetrics) -> Tolerance

The velocity/distance tolerance a ballistic simulation settles within. Read more

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> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more