pub struct Slider<Msg: Clone> {
pub value: f32,
pub on_change: Option<Arc<dyn Fn(f32) -> Msg>>,
pub track_surface: &'static str,
pub fill_surface: &'static str,
pub accent_thumb: bool,
pub track_paint: Option<Paint>,
}Expand description
A horizontal slider for selecting a value in a range.
The track defaults to a theme-resolved surface; pass
Self::track_paint to override with a custom
Paint — typically a multi-stop linear
gradient for a hue / spectrum picker. When track_paint is set
the active-side fill is suppressed (the spectrum already
communicates the position visually through colour).
slider( self.brightness )
.on_change( |v| Msg::SetBrightness( v ) )Fields§
§value: f32Current value in [0.0, 1.0].
on_change: Option<Arc<dyn Fn(f32) -> Msg>>Callback invoked with the new value when the slider is dragged.
Arc (not Box) so the layout pass can clone it into the per-leaf
handler snapshot for O(1) dispatch on input events.
track_surface: &'static strTheme slot id for the track background pill. Defaults to the
generic surface-slider-track; override per-instance to opt
into the -flat (no per-surface backdrop) variant when the
slider already lives inside a panel-wide blur, or any other
custom slot.
fill_surface: &'static strTheme slot id for the rising / leftward fill. Same shape as
Self::track_surface but for the active portion.
accent_thumb: boolPaint the thumb with the active palette’s accent colour and
a thicker white border (accent inner pill + 4 px white ring)
instead of the default white-on-text-primary thumb.
track_paint: Option<Paint>Override the track paint with a custom
Paint — typically a
Paint::Linear for spectrum /
hue pickers. When set, the active-side fill is suppressed
because a spectrum already conveys position information
through colour and the thumb shows where the user is.
Implementations§
Source§impl<Msg: Clone> Slider<Msg>
impl<Msg: Clone> Slider<Msg>
Sourcepub fn track_paint(self, paint: Paint) -> Self
pub fn track_paint(self, paint: Paint) -> Self
Override the track paint with a custom
Paint — e.g. a multi-stop linear
gradient for a hue / spectrum picker. Disables the active-
side fill (the spectrum already encodes the position
visually).
Sourcepub fn on_change(self, f: impl Fn(f32) -> Msg + 'static) -> Self
pub fn on_change(self, f: impl Fn(f32) -> Msg + 'static) -> Self
Set the callback invoked when the slider value changes.
Sourcepub fn track_surface(self, id: &'static str) -> Self
pub fn track_surface(self, id: &'static str) -> Self
Override the theme slot id used to paint the track background
— pass surface-slider-track-flat (or any other surface) to
drop the per-instance backdrop blur when the slider already
lives inside a panel-wide blur. See
crate::widget::vslider::VSlider::track_surface for the use
case.
Sourcepub fn fill_surface(self, id: &'static str) -> Self
pub fn fill_surface(self, id: &'static str) -> Self
Override the theme slot id used to paint the fill. Mirrors
Self::track_surface.
Sourcepub fn accent_thumb(self, on: bool) -> Self
pub fn accent_thumb(self, on: bool) -> Self
Switch the thumb to the accent-pill style: accent-coloured inner
- 4 px white border. Default thumb stays white-on-text-primary for shells that haven’t opted in.
Sourcepub fn preferred_size(&self, max_width: f32, _canvas: &Canvas) -> (f32, f32)
pub fn preferred_size(&self, max_width: f32, _canvas: &Canvas) -> (f32, f32)
Return the preferred (width, height).
Sourcepub fn value_from_x(&self, rect: Rect, x: f32) -> f32
pub fn value_from_x(&self, rect: Rect, x: f32) -> f32
Compute the value [0.0, 1.0] from a tap/drag x position within rect.
Sourcepub fn paint_bounds(&self, rect: Rect) -> Rect
pub fn paint_bounds(&self, rect: Rect) -> Rect
Thumb border stroke is centered on the thumb edge (which touches the
widget’s left/right edges at value 0 / 1), so half the stroke width
plus ~1 px of antialiasing sits outside rect.
Sourcepub fn draw(&self, canvas: &mut Canvas, rect: Rect, _focused: bool)
pub fn draw(&self, canvas: &mut Canvas, rect: Rect, _focused: bool)
Draw the slider into canvas at rect.
Track + fill paint through theme slots (Self::track_surface
/ Self::fill_surface) when those slots resolve in the
active theme — the track pill spans the full inner width and
the fill is anchored to the same pill but scissor-clipped to
the left band so insets stay positioned against the track rect
rather than a shrinking fill rect. Falls back to
theme::track_bg() / theme::track_fill() when the active
theme has no entry for either slot — a bare-bones third-party
theme still paints a usable slider.
Trait Implementations§
Auto Trait Implementations§
impl<Msg> Freeze for Slider<Msg>
impl<Msg> !RefUnwindSafe for Slider<Msg>
impl<Msg> !Send for Slider<Msg>
impl<Msg> !Sync for Slider<Msg>
impl<Msg> Unpin for Slider<Msg>
impl<Msg> !UnwindSafe for Slider<Msg>
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
§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> 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