pub struct Scrollbar { /* private fields */ }Expand description
A vertical scrollbar (typically one cell wide) covering total_len
items in a visible_len-row viewport.
offset defaults to 0; track_style/thumb_style default to Theme::DARK (as if
Scrollbar::theme had been called). Set whichever a caller needs via
Scrollbar::offset/Scrollbar::track_style/Scrollbar::thumb_style.
track_style fills the whole strip, then crate::draw::thumb_geometry’s
span (if any) is redrawn with thumb_style on top. Draws just the plain
track, with no thumb, if there’s nothing to scroll: see
crate::draw::thumb_geometry.
As a plain Widget, Scrollbar is purely a display: offset is whatever the caller last
set, unaffected by the pointer. InteractiveWidget’s type State = ScrollState makes it
draggable and wheel-scrollable instead: sense() is
Sense::drag | Sense::CLICK |
Sense::SCROLL, and its render reads the thumb’s position from
state.integer_offset(), drives a drag via offset_for_pos/ScrollState::update_drag/
ScrollState::end_drag using Response::pointer_pos, and applies wheel input via
ScrollState::apply.
§Examples
use retroglyph_core::grid::{Grid, Rect};
use retroglyph_ui::{Scrollbar, Surface, Widget};
let area = Rect::new(0, 0, 1, 10);
let mut grid = Grid::new(1, 10);
let scrollbar = Scrollbar::new(100, 10).offset(20);
Widget::render(&scrollbar, &mut Surface::new(&mut grid, area, 0));Implementations§
Source§impl Scrollbar
impl Scrollbar
Sourcepub fn new(total_len: usize, visible_len: usize) -> Self
pub fn new(total_len: usize, visible_len: usize) -> Self
A scrollbar covering total_len items in a visible_len-row viewport, starting at offset
0, styled from Theme::DARK (as if Scrollbar::theme had been called).
Sourcepub const fn track_style(self, style: Style) -> Self
pub const fn track_style(self, style: Style) -> Self
Set the track’s style.
Sourcepub const fn thumb_style(self, style: Style) -> Self
pub const fn thumb_style(self, style: Style) -> Self
Set the thumb’s style.
Sourcepub fn theme(self, theme: Theme) -> Self
pub fn theme(self, theme: Theme) -> Self
Applies theme’s named roles to this scrollbar: track_style becomes theme.panel_bg
(the same surface the scrolled content sits on), and thumb_style becomes theme.border:
a subtle divider-like color rather than theme.accent, so a themed scrollbar doesn’t
compete with an actually-selected/focused control for attention.
Call before any manual Scrollbar::track_style/Scrollbar::thumb_style override you
want to keep.
Sourcepub fn theme_on(self, theme: Theme, bg: Color) -> Self
pub fn theme_on(self, theme: Theme, bg: Color) -> Self
Same as Scrollbar::theme, but track_style is drawn on bg instead of
theme.panel_bg: for a scrollbar drawn directly on a backdrop other than a themed
super::Panel/super::Modal’s fill. Scrollbar::theme is exactly
theme_on(theme, theme.panel_bg).
Trait Implementations§
Source§impl AnimatedWidget for Scrollbar
impl AnimatedWidget for Scrollbar
Source§fn render(
&self,
surface: &mut Surface<'_>,
state: &mut Self::State,
frame: &Frame,
)
fn render( &self, surface: &mut Surface<'_>, state: &mut Self::State, frame: &Frame, )
Ticks state’s momentum/rubber-band physics forward by frame.delta (a no-op while
ScrollState::dragging is true, per ScrollState::tick’s
own docs), then draws the thumb at the resulting
integer_offset: the Widget::render this type
already has, just with self.offset replaced by state’s current one. max_offset is
total_len - visible_len (floored at 0), matching thumb_geometry’s own definition, so
the physics and the drawn thumb position are always in terms of the same bound.
Source§type State = ScrollState
type State = ScrollState
crate::ScrollState.Source§impl<Id> InteractiveWidget<Id> for Scrollbar
impl<Id> InteractiveWidget<Id> for Scrollbar
impl Copy for Scrollbar
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<C> WithAlpha for Cwhere
C: Copy,
impl<C> WithAlpha for Cwhere
C: Copy,
§fn with_alpha_first<A>(self, alpha: A) -> AlphaFirst<A, Self>
fn with_alpha_first<A>(self, alpha: A) -> AlphaFirst<A, Self>
self with alpha, storing alpha before the color in memory
(see [AlphaFirst]).§fn with_alpha_last<A>(self, alpha: A) -> AlphaLast<A, Self>
fn with_alpha_last<A>(self, alpha: A) -> AlphaLast<A, Self>
self with alpha, storing alpha after the color in memory
(see [AlphaLast]).