pub struct ScrollBounce { /* private fields */ }Expand description
Adds vertical touch overscroll to an existing scroll viewport.
The child owns layout, content, and ordinary scrolling; handle must be the
child’s scroll handle. Only unused vertical deltas stretch the viewport.
The stable id owns gesture and spring state. Change it when replacing the
document. Put fixed chrome (scrollbars, toolbars) outside this wrapper.
Enabled by default where the platform’s own scroll views bounce: iOS, Android and macOS. Reduced motion disables displacement. Keyboard and focus remain owned by the child. No colors, padding, or dimensions are imposed.
Nested scroll areas follow the platform: the innermost one under the
pointer takes the whole gesture, at its ends too, and bounces there
rather than handing the rest to the area around it. A disabled
ScrollBounce still scrolls its child and keeps the gesture from the
areas around it; it only stops at the ends instead of stretching.
Implementations§
Source§impl ScrollBounce
impl ScrollBounce
pub fn new<H: ScrollbarHandle + Clone>( id: impl Into<ElementId>, handle: &H, child: impl IntoElement, ) -> Self
Sourcepub const fn enabled_by_default() -> bool
pub const fn enabled_by_default() -> bool
Whether scroll areas bounce on this platform unless told otherwise: on iOS, Android and macOS, whose own scroll views do.
Sourcepub fn enabled(self, enabled: bool) -> Self
pub fn enabled(self, enabled: bool) -> Self
Turn the bounce on or off. Defaults to Self::enabled_by_default.
Sourcepub fn scroll_wheel(self, enabled: bool) -> Self
pub fn scroll_wheel(self, enabled: bool) -> Self
Own vertical scrolling using the shared input overscroll engine. Precise pixel input can bounce; ordinary line-wheel input only scrolls and cancels any existing displacement. Keep fixed chrome outside it.
On by default. Turned off, the child scrolls itself and only its
unused deltas stretch the edge; that needs input that emits Ended
at finger release, before momentum, as touch does.
Sourcepub fn motion(self, motion: ScrollBounceMotion) -> Self
pub fn motion(self, motion: ScrollBounceMotion) -> Self
Set how far a drag stretches past an edge and how the edge returns.
Sourcepub fn on_scroll(
self,
handler: impl Fn(&mut Window, &mut App) + 'static,
) -> Self
pub fn on_scroll( self, handler: impl Fn(&mut Window, &mut App) + 'static, ) -> Self
Observe a logical scroll performed when a reverse drag leaves the stretched region. Runs after the handle update, with no internal state borrowed. Ordinary child scrolling continues to use the child’s own notifications.
Trait Implementations§
Source§impl Element for ScrollBounce
impl Element for ScrollBounce
Source§type RequestLayoutState = ()
type RequestLayoutState = ()
Element::request_layout. A mutable reference to this state is subsequently
provided to Element::prepaint and Element::paint.Source§type PrepaintState = ScrollBouncePrepaintState
type PrepaintState = ScrollBouncePrepaintState
Element::prepaint. A mutable reference to this state is subsequently
provided to Element::paint.Source§fn id(&self) -> Option<ElementId>
fn id(&self) -> Option<ElementId>
Source§fn source_location(&self) -> Option<&'static Location<'static>>
fn source_location(&self) -> Option<&'static Location<'static>>
Source§fn request_layout(
&mut self,
_: Option<&GlobalElementId>,
_: Option<&InspectorElementId>,
window: &mut Window,
cx: &mut App,
) -> (LayoutId, ())
fn request_layout( &mut self, _: Option<&GlobalElementId>, _: Option<&InspectorElementId>, window: &mut Window, cx: &mut App, ) -> (LayoutId, ())
Source§fn prepaint(
&mut self,
id: Option<&GlobalElementId>,
_: Option<&InspectorElementId>,
bounds: Bounds<Pixels>,
_: &mut (),
window: &mut Window,
cx: &mut App,
) -> Self::PrepaintState
fn prepaint( &mut self, id: Option<&GlobalElementId>, _: Option<&InspectorElementId>, bounds: Bounds<Pixels>, _: &mut (), window: &mut Window, cx: &mut App, ) -> Self::PrepaintState
Element::request_layout().Source§fn paint(
&mut self,
_: Option<&GlobalElementId>,
_: Option<&InspectorElementId>,
bounds: Bounds<Pixels>,
_: &mut (),
prepaint: &mut Self::PrepaintState,
window: &mut Window,
cx: &mut App,
)
fn paint( &mut self, _: Option<&GlobalElementId>, _: Option<&InspectorElementId>, bounds: Bounds<Pixels>, _: &mut (), prepaint: &mut Self::PrepaintState, window: &mut Window, cx: &mut App, )
Element::request_layout().Source§fn a11y_role(&self) -> Option<Role>
fn a11y_role(&self) -> Option<Role>
None are not included in the accessibility tree. Read moreSource§fn write_a11y_info(&self, _node: &mut Node)
fn write_a11y_info(&self, _node: &mut Node)
a11y_role() returns Some. Read moreSource§fn a11y_synthetic_children(
&mut self,
_prepaint: &mut Self::PrepaintState,
_builder: &mut A11ySubtreeBuilder<'_>,
)
fn a11y_synthetic_children( &mut self, _prepaint: &mut Self::PrepaintState, _builder: &mut A11ySubtreeBuilder<'_>, )
Source§fn into_any(self) -> AnyElement
fn into_any(self) -> AnyElement
AnyElement.Source§impl IntoElement for ScrollBounce
impl IntoElement for ScrollBounce
Source§type Element = ScrollBounce
type Element = ScrollBounce
Source§fn into_element(self) -> Self
fn into_element(self) -> Self
Element.Source§fn into_any_element(self) -> AnyElement
fn into_any_element(self) -> AnyElement
AnyElement.Auto Trait Implementations§
impl !RefUnwindSafe for ScrollBounce
impl !Send for ScrollBounce
impl !Sync for ScrollBounce
impl !UnwindSafe for ScrollBounce
impl Freeze for ScrollBounce
impl Unpin for ScrollBounce
impl UnsafeUnpin for ScrollBounce
Blanket Implementations§
Source§impl<E> AnimationExt for Ewhere
E: IntoElement + 'static,
impl<E> AnimationExt for Ewhere
E: IntoElement + 'static,
Source§fn with_animation(
self,
id: impl Into<ElementId>,
animation: Animation,
animator: impl Fn(Self, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
fn with_animation(
self,
id: impl Into<ElementId>,
animation: Animation,
animator: impl Fn(Self, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
Source§fn with_animations(
self,
id: impl Into<ElementId>,
animations: Vec<Animation>,
animator: impl Fn(Self, usize, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
fn with_animations(
self,
id: impl Into<ElementId>,
animations: Vec<Animation>,
animator: impl Fn(Self, usize, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
Source§fn with_spring<T>(
self,
id: impl Into<ElementId>,
animation: SpringAnimation<T>,
animator: impl FnOnce(Self, <T as SpringTarget>::Output) -> Self + 'static,
) -> SpringAnimationElement<Self>
fn with_spring<T>( self, id: impl Into<ElementId>, animation: SpringAnimation<T>, animator: impl FnOnce(Self, <T as SpringTarget>::Output) -> Self + 'static, ) -> SpringAnimationElement<Self>
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> FluentBuilder for Twhere
T: IntoElement,
impl<T> FluentBuilder for Twhere
T: IntoElement,
Source§fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
Source§fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
Source§fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more