summaryrefslogtreecommitdiffstats
path: root/examples/events
diff options
context:
space:
mode:
Diffstat (limited to 'examples/events')
-rw-r--r--examples/events/Cargo.toml10
-rw-r--r--examples/events/src/main.rs86
2 files changed, 96 insertions, 0 deletions
diff --git a/examples/events/Cargo.toml b/examples/events/Cargo.toml
new file mode 100644
index 00000000..f883075f
--- /dev/null
+++ b/examples/events/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "events"
+version = "0.1.0"
+authors = ["Héctor Ramón Jiménez <hector0193@gmail.com>"]
+edition = "2018"
+publish = false
+
+[dependencies]
+iced = { path = "../.." }
+iced_native = { path = "../../native" }
diff --git a/examples/events/src/main.rs b/examples/events/src/main.rs
new file mode 100644
index 00000000..0c9dca05
--- /dev/null
+++ b/examples/events/src/main.rs
@@ -0,0 +1,86 @@
+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;
+
+ fn new() -> (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()
+ }
+}