pub struct Toggle<Msg: Clone> { /* private fields */ }Expand description
A two-state on / off switch.
Renders as a horizontal pill with a circular thumb that slides between the
off (left, divider colour) and on (right, accent colour) positions. The
widget is stateless: the application owns value and rebuilds the toggle
from its current state on every frame. Tapping or pressing Enter / Space
while focused emits the message configured with Self::on_toggle — the
app’s update is then expected to flip the bool and re-render.
// In view():
toggle( self.wifi_enabled )
.label( "Wi-Fi" )
.on_toggle( Msg::ToggleWifi )See also Checkbox for binary opt-in
controls (terms acceptance, multi-select form fields) where the
pill-style affordance is too prominent.
Implementations§
Source§impl<Msg: Clone> Toggle<Msg>
impl<Msg: Clone> Toggle<Msg>
Sourcepub fn new(value: bool) -> Self
pub fn new(value: bool) -> Self
Create a toggle in the given state, with no label and no callback.
Wire activation through Self::on_toggle before adding it to a
widget tree, otherwise the toggle is decorative.
Sourcepub fn on_toggle(self, msg: Msg) -> Self
pub fn on_toggle(self, msg: Msg) -> Self
Set the message emitted when the toggle is activated (tap, Enter or
Space while focused). The application’s update is responsible for
flipping value in response.
Sourcepub fn label(self, label: impl Into<String>) -> Self
pub fn label(self, label: impl Into<String>) -> Self
Set a text label rendered to the left of the track. The toggle’s
preferred width grows to fit label_width + gap + track_width,
capped at the parent-supplied max_width.
Sourcepub fn id(self, id: WidgetId) -> Self
pub fn id(self, id: WidgetId) -> Self
Assign a stable identifier so the application can target this
toggle through crate::App::take_focus_request.
Sourcepub fn height(self, h: impl Into<Length>) -> Self
pub fn height(self, h: impl Into<Length>) -> Self
Override the preferred height (default: the theme row height,
theme::HEIGHT design px). Accepts any Length so dense
layouts can tie the row height to the viewport. When the resolved
value falls below the theme row height, the pill (track and thumb)
scales down proportionally so it never clips; it never grows
beyond its theme size.
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) given available max_width.
Width is track_width for an unlabelled toggle, or
label_width + gap + track_width (clamped to max_width) when a
label is set. Height is the theme-defined row height.
Sourcepub fn paint_bounds(&self, rect: Rect) -> Rect
pub fn paint_bounds(&self, rect: Rect) -> Rect
Bounding box of everything painted at rect across all states. The
focus ring is drawn as track_rect.expand( FOCUS_W + 2 ) with a stroke
of width FOCUS_W, so it extends FOCUS_W + 2 + FOCUS_W/2 ≈ 6.5 px
beyond the track. Since the track sits at the right edge of rect,
the ring can extend that far outside the widget’s layout rect.
pub fn draw(&self, canvas: &mut Canvas, rect: Rect, focused: bool)
Trait Implementations§
Auto Trait Implementations§
impl<Msg> Freeze for Toggle<Msg>where
Msg: Freeze,
impl<Msg> RefUnwindSafe for Toggle<Msg>where
Msg: RefUnwindSafe,
impl<Msg> Send for Toggle<Msg>where
Msg: Send,
impl<Msg> Sync for Toggle<Msg>where
Msg: Sync,
impl<Msg> Unpin for Toggle<Msg>where
Msg: Unpin,
impl<Msg> UnwindSafe for Toggle<Msg>where
Msg: UnwindSafe,
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> 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