diff --git a/examples/open_window.rs b/examples/open_window.rs index 95141b9..0d285ae 100644 --- a/examples/open_window.rs +++ b/examples/open_window.rs @@ -2,7 +2,9 @@ use std::time::Duration; use rtrb::{Consumer, RingBuffer}; -use baseview::{Event, EventStatus, Window, WindowHandler, WindowScalePolicy}; +#[cfg(target_os = "macos")] +use baseview::copy_to_clipboard; +use baseview::{Event, EventStatus, MouseEvent, Window, WindowHandler, WindowScalePolicy}; #[derive(Debug, Clone)] enum Message { @@ -22,7 +24,17 @@ impl WindowHandler for OpenWindowExample { fn on_event(&mut self, _window: &mut Window, event: Event) -> EventStatus { match event { - Event::Mouse(e) => println!("Mouse event: {:?}", e), + Event::Mouse(e) => { + println!("Mouse event: {:?}", e); + + #[cfg(target_os = "macos")] + match e { + MouseEvent::ButtonPressed { button, modifiers } => { + copy_to_clipboard(&"This is a test!") + } + _ => (), + } + } Event::Keyboard(e) => println!("Keyboard event: {:?}", e), Event::Window(e) => println!("Window event: {:?}", e), } diff --git a/src/clipboard.rs b/src/clipboard.rs new file mode 100644 index 0000000..c4f7bc4 --- /dev/null +++ b/src/clipboard.rs @@ -0,0 +1,10 @@ +#[cfg(target_os = "macos")] +use crate::macos as platform; +#[cfg(target_os = "windows")] +use crate::win as platform; +#[cfg(target_os = "linux")] +use crate::x11 as platform; + +pub fn copy_to_clipboard(data: &str) { + platform::copy_to_clipboard(data) +} diff --git a/src/lib.rs b/src/lib.rs index 46a3695..54d57dd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,7 @@ mod win; #[cfg(target_os = "linux")] mod x11; +mod clipboard; mod event; mod keyboard; mod mouse_cursor; @@ -15,6 +16,7 @@ mod window_open_options; #[cfg(feature = "opengl")] pub mod gl; +pub use clipboard::*; pub use event::*; pub use mouse_cursor::MouseCursor; pub use window::*; diff --git a/src/macos/window.rs b/src/macos/window.rs index fd67de7..54046dd 100644 --- a/src/macos/window.rs +++ b/src/macos/window.rs @@ -5,8 +5,8 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use cocoa::appkit::{ - NSApp, NSApplication, NSApplicationActivationPolicyRegular, NSBackingStoreBuffered, NSView, - NSWindow, NSWindowStyleMask, + NSApp, NSApplication, NSApplicationActivationPolicyRegular, NSBackingStoreBuffered, + NSPasteboard, NSView, NSWindow, NSWindowStyleMask, }; use cocoa::base::{id, nil, NO, YES}; use cocoa::foundation::{NSAutoreleasePool, NSPoint, NSRect, NSSize, NSString}; @@ -483,3 +483,14 @@ unsafe impl HasRawWindowHandle for Window { RawWindowHandle::AppKit(handle) } } + +pub fn copy_to_clipboard(string: &str) { + unsafe { + let pb = NSPasteboard::generalPasteboard(nil); + + let ns_str = NSString::alloc(nil).init_str(string); + + pb.clearContents(); + pb.setString_forType(ns_str, cocoa::appkit::NSPasteboardTypeString); + } +} diff --git a/src/win/window.rs b/src/win/window.rs index 83ff6d2..2af1abe 100644 --- a/src/win/window.rs +++ b/src/win/window.rs @@ -763,3 +763,7 @@ unsafe impl HasRawWindowHandle for Window<'_> { RawWindowHandle::Win32(handle) } } + +pub fn copy_to_clipboard(data: &str) { + todo!() +} diff --git a/src/x11/window.rs b/src/x11/window.rs index 8056f90..fcd9083 100644 --- a/src/x11/window.rs +++ b/src/x11/window.rs @@ -704,3 +704,7 @@ fn mouse_id(id: u8) -> MouseButton { id => MouseButton::Other(id), } } + +pub fn copy_to_clipboard(data: &str) { + todo!() +}