Struct Scrollbar
pub struct Scrollbar { /* private fields */ }Expand description
A single-axis scrollbar interaction model.
Construct one per axis (Scrollbar::vertical / Scrollbar::horizontal),
keep it alongside the owning widget’s offset, and drive it from the
widget’s event handler:
// press
match bar.press(track, metrics, cursor) {
PressOutcome::Thumb => { /* dirty + capture */ }
PressOutcome::Page(o) => { self.set_offset(o); }
PressOutcome::Miss => { /* fall through */ }
}
// move
if let Some(o) = bar.drag_to(track, metrics, cursor) { self.set_offset(o); }
// release
bar.release();Implementations§
§impl Scrollbar
impl Scrollbar
pub fn horizontal() -> Scrollbar
pub fn horizontal() -> Scrollbar
A horizontal bar (thumb travels along X, lives on the bottom edge).
pub fn with_min_thumb(self, px: f64) -> Scrollbar
pub fn with_min_thumb(self, px: f64) -> Scrollbar
Override the minimum thumb length (default MIN_THUMB_LEN).
pub fn is_vertical(&self) -> bool
pub fn is_dragging(&self) -> bool
pub fn is_dragging(&self) -> bool
Whether a thumb drag is currently in progress.
pub fn is_hovered(&self) -> bool
pub fn is_hovered(&self) -> bool
Whether the pointer is currently over the thumb.
pub fn is_active(&self) -> bool
pub fn is_active(&self) -> bool
Whether the thumb should render in its brightened state (hovered or dragging).
pub fn draw(
&self,
scene: &mut Scene,
transform: Affine,
track: Rect,
metrics: ScrollMetrics,
theme: &Theme,
focused: bool,
)
pub fn draw( &self, scene: &mut Scene, transform: Affine, track: Rect, metrics: ScrollMetrics, theme: &Theme, focused: bool, )
Paint the shared quiet thumb for hosts with a custom content viewport. Geometry is identical to pointer hit-testing and follows the host’s metrics.
pub fn track_in(&self, lane: Rect, theme: &Theme) -> Rect
pub fn track_in(&self, lane: Rect, theme: &Theme) -> Rect
The track this bar takes in lane, the strip a scroll owner keeps
free on its trailing (or bottom) edge (metrics.scrollbar_gutter
wide): the thumb thickness (metrics.scroll_thumb) centred across
the lane, inset by the same margin at both ends. Painted hosts use it
so their bars sit where a Scrollable’s do.
pub fn thumb_rect(&self, track: Rect, m: ScrollMetrics) -> Option<Rect>
pub fn thumb_rect(&self, track: Rect, m: ScrollMetrics) -> Option<Rect>
The thumb rect within track for the given metrics, or None
when there’s no meaningful content to represent. The owner is
responsible for only supplying a track when the bar is actually
shown (content overflows); this method does not re-check overflow so
the thumb stays visible while a drag/clamp settles at an edge.
pub fn set_hover(&mut self, hovered: bool) -> bool
pub fn set_hover(&mut self, hovered: bool) -> bool
Set the hover state directly; returns true when it changed (so the
owner can schedule a redraw only on an edge).
pub fn update_hover(
&mut self,
track: Rect,
m: ScrollMetrics,
cursor: Point,
) -> bool
pub fn update_hover( &mut self, track: Rect, m: ScrollMetrics, cursor: Point, ) -> bool
Recompute hover from the cursor against the thumb; returns true
when the hover state changed. A no-op while dragging (the thumb
stays “hot”).
pub fn press(
&mut self,
track: Rect,
m: ScrollMetrics,
cursor: Point,
) -> PressOutcome
pub fn press( &mut self, track: Rect, m: ScrollMetrics, cursor: Point, ) -> PressOutcome
Hit-test a press against the bar and, if it lands on the thumb,
begin a drag. See PressOutcome.
pub fn drag_to(
&self,
track: Rect,
m: ScrollMetrics,
cursor: Point,
) -> Option<f64>
pub fn drag_to( &self, track: Rect, m: ScrollMetrics, cursor: Point, ) -> Option<f64>
Map the live cursor to an absolute offset for the active drag, or
None when no drag is in progress. The thumb travels
track_len - thumb_len px across the full content range, so that
ratio converts a cursor delta into a content delta. The result is
clamped to [0, max_scroll].
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Scrollbar
impl RefUnwindSafe for Scrollbar
impl Send for Scrollbar
impl Sync for Scrollbar
impl Unpin for Scrollbar
impl UnsafeUnpin for Scrollbar
impl UnwindSafe for Scrollbar
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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