summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml4
-rw-r--r--examples/url_handler/Cargo.toml12
-rw-r--r--examples/url_handler/src/main.rs67
-rw-r--r--glutin/src/application.rs3
-rw-r--r--native/src/event.rs4
-rw-r--r--winit/src/application.rs3
6 files changed, 93 insertions, 0 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 6d894eba..f00a197c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -84,6 +84,7 @@ members = [
"examples/todos",
"examples/tour",
"examples/tooltip",
+ "examples/url_handler",
]
[dependencies]
@@ -91,6 +92,9 @@ iced_core = { version = "0.4", path = "core" }
iced_futures = { version = "0.3", path = "futures" }
thiserror = "1.0"
+[patch.crates-io]
+winit = { git="https://github.com/cryptowatch/winit", rev="f9180f3b3c0f4fb8fd8c65bd0adf641cd6b32dd0" }
+
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
iced_winit = { version = "0.3", path = "winit" }
iced_glutin = { version = "0.2", path = "glutin", optional = true }
diff --git a/examples/url_handler/Cargo.toml b/examples/url_handler/Cargo.toml
new file mode 100644
index 00000000..595bdac0
--- /dev/null
+++ b/examples/url_handler/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "url_handler"
+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" }
+syslog="4.0"
+log="0.4" \ No newline at end of file
diff --git a/examples/url_handler/src/main.rs b/examples/url_handler/src/main.rs
new file mode 100644
index 00000000..56d81031
--- /dev/null
+++ b/examples/url_handler/src/main.rs
@@ -0,0 +1,67 @@
+use iced::{
+ executor, Application, Command, Clipboard,
+ Container, Element, Length, Settings, Subscription, Text,
+};
+use iced_native::Event;
+
+pub fn main() -> iced::Result {
+ App::run(Settings::default())
+}
+
+#[derive(Debug, Default)]
+struct App {
+ url: Option<String>,
+}
+
+#[derive(Debug, Clone)]
+enum Message {
+ EventOccurred(iced_native::Event),
+}
+
+impl Application for App {
+ type Executor = executor::Default;
+ type Message = Message;
+ type Flags = ();
+
+ fn new(_flags: ()) -> (App, Command<Message>) {
+ (App::default(), Command::none())
+ }
+
+ fn title(&self) -> String {
+ String::from("Url - Iced")
+ }
+
+ fn update(
+ &mut self,
+ message: Message,
+ _clipboard: &mut Clipboard,
+ ) -> Command<Message> {
+ match message {
+ Message::EventOccurred(event) => {
+ if let Event::UrlReceived(url) = event{
+ self.url = Some(url);
+ }
+ }
+ };
+
+ Command::none()
+ }
+
+ fn subscription(&self) -> Subscription<Message> {
+ iced_native::subscription::events().map(Message::EventOccurred)
+ }
+
+ fn view(&mut self) -> Element<Message> {
+ let content = match &self.url{
+ Some(url) => Text::new(format!("{}", url)),
+ None => Text::new("No URL received yet!")
+ };
+
+ Container::new(content.size(48))
+ .width(Length::Fill)
+ .height(Length::Fill)
+ .center_x()
+ .center_y()
+ .into()
+ }
+}
diff --git a/glutin/src/application.rs b/glutin/src/application.rs
index 79fcf745..55293b3b 100644
--- a/glutin/src/application.rs
+++ b/glutin/src/application.rs
@@ -237,6 +237,9 @@ async fn run_instance<A, E, C>(
context.window().request_redraw();
}
+ event::Event::ReceivedUrl(url) => {
+ events.push(iced_native::Event::UrlReceived(url));
+ }
event::Event::UserEvent(message) => {
messages.push(message);
}
diff --git a/native/src/event.rs b/native/src/event.rs
index 205bb797..59c5c0cb 100644
--- a/native/src/event.rs
+++ b/native/src/event.rs
@@ -23,6 +23,10 @@ pub enum Event {
/// A touch event
Touch(touch::Event),
+
+ // TODO: System(system::Event)?
+ /// A url was received.
+ UrlReceived(String),
}
/// The status of an [`Event`] after being processed.
diff --git a/winit/src/application.rs b/winit/src/application.rs
index b1d5f418..9f51ae68 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -310,6 +310,9 @@ async fn run_instance<A, E, C>(
window.request_redraw();
}
+ event::Event::ReceivedUrl(url) => {
+ events.push(iced_native::Event::UrlReceived(url));
+ }
event::Event::UserEvent(message) => {
messages.push(message);
}