use iced::executor; use iced::font::{self, Font}; use iced::widget::{checkbox, column, container}; use iced::{Application, Command, Element, Length, Settings, Theme}; const ICON_FONT: Font = Font::with_name("icons"); pub fn main() -> iced::Result { Example::run(Settings::default()) } #[derive(Default)] struct Example { default_checkbox: bool, custom_checkbox: bool, } #[derive(Debug, Clone, Copy)] enum Message { DefaultChecked(bool), CustomChecked(bool), FontLoaded(Result<(), font::Error>), } impl Application for Example { type Message = Message; type Flags = (); type Executor = executor::Default; type Theme = Theme; fn new(_flags: Self::Flags) -> (Self, Command) { ( Self::default(), font::load(include_bytes!("../fonts/icons.ttf").as_ref()) .map(Message::FontLoaded), ) } fn title(&self) -> String { String::from("Checkbox - Iced") } fn update(&mut self, message: Message) -> Command { match message { Message::DefaultChecked(value) => self.default_checkbox = value, Message::CustomChecked(value) => self.custom_checkbox = value, Message::FontLoaded(_) => (), } Command::none() } fn view(&self) -> Element { let default_checkbox = checkbox("Default", self.default_checkbox, Message::DefaultChecked); let custom_checkbox = checkbox("Custom", self.custom_checkbox, Message::CustomChecked) .icon(checkbox::Icon { font: ICON_FONT, code_point: '\u{e901}', size: None, }); let content = column![default_checkbox, custom_checkbox].spacing(22); container(content) .width(Length::Fill) .height(Length::Fill) .center_x() .center_y() .into() } }