summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
Diffstat (limited to 'winit')
-rw-r--r--winit/Cargo.toml1
-rw-r--r--winit/src/application.rs14
-rw-r--r--winit/src/clipboard.rs13
-rw-r--r--winit/src/lib.rs8
4 files changed, 29 insertions, 7 deletions
diff --git a/winit/Cargo.toml b/winit/Cargo.toml
index b5b07449..ab19f0e2 100644
--- a/winit/Cargo.toml
+++ b/winit/Cargo.toml
@@ -13,6 +13,7 @@ debug = []
[dependencies]
iced_native = { version = "0.1.0-alpha", path = "../native" }
winit = { version = "0.20.0-alpha3", git = "https://github.com/rust-windowing/winit", rev = "709808eb4e69044705fcb214bcc30556db761405"}
+window_clipboard = "=0.1.0-alpha.1"
futures = { version = "0.3", features = ["thread-pool"] }
log = "0.4"
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 3b8ac16b..a8612b1a 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -2,8 +2,8 @@ use crate::{
conversion,
input::{keyboard, mouse},
renderer::{Target, Windowed},
- subscription, Cache, Command, Container, Debug, Element, Event, Length,
- MouseCursor, Settings, Subscription, UserInterface,
+ subscription, Cache, Clipboard, Command, Container, Debug, Element, Event,
+ Length, MouseCursor, Settings, Subscription, UserInterface,
};
/// An interactive, native cross-platform application.
@@ -139,6 +139,7 @@ pub trait Application: Sized {
let mut size = window.inner_size();
let mut resized = false;
+ let clipboard = Clipboard::new(&window);
let mut renderer = Self::Renderer::new();
let mut target = {
@@ -193,8 +194,13 @@ pub trait Application: Sized {
subscription_pool.broadcast_event(*event)
});
- let mut messages =
- user_interface.update(&renderer, events.drain(..));
+ let mut messages = user_interface.update(
+ &renderer,
+ clipboard
+ .as_ref()
+ .map(|c| c as &dyn iced_native::Clipboard),
+ events.drain(..),
+ );
messages.extend(external_messages.drain(..));
debug.event_processing_finished();
diff --git a/winit/src/clipboard.rs b/winit/src/clipboard.rs
new file mode 100644
index 00000000..4739c603
--- /dev/null
+++ b/winit/src/clipboard.rs
@@ -0,0 +1,13 @@
+pub struct Clipboard(window_clipboard::Clipboard);
+
+impl Clipboard {
+ pub fn new(window: &winit::window::Window) -> Option<Clipboard> {
+ window_clipboard::Clipboard::new(window).map(Clipboard).ok()
+ }
+}
+
+impl iced_native::Clipboard for Clipboard {
+ fn content(&self) -> Option<String> {
+ self.0.read().ok()
+ }
+}
diff --git a/winit/src/lib.rs b/winit/src/lib.rs
index 8a1dc870..ffc662fb 100644
--- a/winit/src/lib.rs
+++ b/winit/src/lib.rs
@@ -29,11 +29,9 @@ pub mod conversion;
pub mod settings;
mod application;
+mod clipboard;
mod subscription;
-pub use application::Application;
-pub use settings::Settings;
-
// We disable debug capabilities on release builds unless the `debug` feature
// is explicitly enabled.
#[cfg(feature = "debug")]
@@ -43,4 +41,8 @@ mod debug;
#[path = "debug/null.rs"]
mod debug;
+pub use application::Application;
+pub use settings::Settings;
+
+use clipboard::Clipboard;
use debug::Debug;