Skip to content

Commit

Permalink
Merge pull request #139 from wtholliday/macos-clipboard
Browse files Browse the repository at this point in the history
Macos clipboard
  • Loading branch information
micahrj authored Feb 23, 2023
2 parents 7001c25 + dbda356 commit c129b12
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 4 deletions.
16 changes: 14 additions & 2 deletions examples/open_window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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),
}
Expand Down
10 changes: 10 additions & 0 deletions src/clipboard.rs
Original file line number Diff line number Diff line change
@@ -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)
}
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ mod win;
#[cfg(target_os = "linux")]
mod x11;

mod clipboard;
mod event;
mod keyboard;
mod mouse_cursor;
Expand All @@ -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::*;
Expand Down
15 changes: 13 additions & 2 deletions src/macos/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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);
}
}
4 changes: 4 additions & 0 deletions src/win/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -763,3 +763,7 @@ unsafe impl HasRawWindowHandle for Window<'_> {
RawWindowHandle::Win32(handle)
}
}

pub fn copy_to_clipboard(data: &str) {
todo!()
}
4 changes: 4 additions & 0 deletions src/x11/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -704,3 +704,7 @@ fn mouse_id(id: u8) -> MouseButton {
id => MouseButton::Other(id),
}
}

pub fn copy_to_clipboard(data: &str) {
todo!()
}

0 comments on commit c129b12

Please sign in to comment.