cosmic/widget/
nav_bar_toggle.rs
1use crate::{Element, widget};
7use derive_setters::Setters;
8
9#[derive(Setters)]
10pub struct NavBarToggle<Message> {
11 active: bool,
12 #[setters(strip_option)]
13 on_toggle: Option<Message>,
14 class: crate::theme::Button,
15 selected: bool,
16}
17
18#[must_use]
19pub const fn nav_bar_toggle<Message>() -> NavBarToggle<Message> {
20 NavBarToggle {
21 active: false,
22 on_toggle: None,
23 class: crate::theme::Button::NavToggle,
24 selected: false,
25 }
26}
27
28impl<Message: 'static + Clone> From<NavBarToggle<Message>> for Element<'_, Message> {
29 fn from(nav_bar_toggle: NavBarToggle<Message>) -> Self {
30 let icon = if nav_bar_toggle.active {
31 widget::icon::from_svg_bytes(
32 &include_bytes!("../../res/icons/navbar-open-symbolic.svg")[..],
33 )
34 .symbolic(true)
35 } else {
36 widget::icon::from_svg_bytes(
37 &include_bytes!("../../res/icons/navbar-closed-symbolic.svg")[..],
38 )
39 .symbolic(true)
40 };
41
42 widget::button::icon(icon)
43 .padding([8, 16])
44 .on_press_maybe(nav_bar_toggle.on_toggle)
45 .selected(nav_bar_toggle.selected)
46 .class(nav_bar_toggle.class)
47 .into()
48 }
49}