1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
use iced::{ executor, Align, Application, Checkbox, Column, Command, Container, Element, Length, Settings, Subscription, Text, }; pub fn main() { Events::run(Settings::default()) } #[derive(Debug, Default)] struct Events { last: Vec<iced_native::Event>, enabled: bool, } #[derive(Debug, Clone)] enum Message { EventOccurred(iced_native::Event), Toggled(bool), } impl Application for Events { type Executor = executor::Default; type Message = Message; type Flags = (); fn new(_flags: ()) -> (Events, Command<Message>) { (Events::default(), Command::none()) } fn title(&self) -> String { String::from("Events - Iced") } fn update(&mut self, message: Message) -> Command<Message> { match message { Message::EventOccurred(event) => { self.last.push(event); if self.last.len() > 5 { let _ = self.last.remove(0); } } Message::Toggled(enabled) => { self.enabled = enabled; } }; Command::none() } fn subscription(&self) -> Subscription<Message> { if self.enabled { iced_native::subscription::events().map(Message::EventOccurred) } else { Subscription::none() } } fn view(&mut self) -> Element<Message> { let events = self.last.iter().fold( Column::new().spacing(10), |column, event| { column.push(Text::new(format!("{:?}", event)).size(40)) }, ); let toggle = Checkbox::new( self.enabled, "Listen to runtime events", Message::Toggled, ); let content = Column::new() .align_items(Align::Center) .spacing(20) .push(events) .push(toggle); Container::new(content) .width(Length::Fill) .height(Length::Fill) .center_x() .center_y() .into() } }