From c33620b3ea4ce762150914956e7c999e1a4fb9e4 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 19 Jun 2014 20:12:34 +0900 Subject: [PATCH] complete clipboard api --- src/sdl2/clipboard.rs | 48 +++++++++++++++++++++++++++++++++++++++++++ src/sdl2/lib.rs | 1 + 2 files changed, 49 insertions(+) create mode 100644 src/sdl2/clipboard.rs diff --git a/src/sdl2/clipboard.rs b/src/sdl2/clipboard.rs new file mode 100644 index 00000000..86c88a92 --- /dev/null +++ b/src/sdl2/clipboard.rs @@ -0,0 +1,48 @@ +use std::str; +use SdlResult; +use get_error; + +#[allow(non_camel_case_types)] +pub mod ll { + use libc::{c_int, c_char}; + + pub type SDL_bool = c_int; + + extern "C" { + pub fn SDL_SetClipboardText(text: *c_char) -> c_int; + pub fn SDL_GetClipboardText() -> *c_char; + pub fn SDL_HasClipboardText() -> SDL_bool; + } +} + +pub fn set_clipboard_text(text: &String) -> SdlResult<()> { + unsafe { + let result = text.with_c_str(|buff| { + ll::SDL_SetClipboardText(buff) + }); + + if result == 0 { + Err(get_error()) + } else { + Ok(()) + } + } +} + +pub fn get_clipboard_text() -> SdlResult { + let result = unsafe { + let cstr = ll::SDL_GetClipboardText(); + str::raw::from_c_str(cstr) + }; + + if result.len() == 0 { + Err(get_error()) + } else { + Ok(result) + } +} + +pub fn has_clipboard_text() -> bool { + unsafe { ll::SDL_HasClipboardText() == 1 } +} + diff --git a/src/sdl2/lib.rs b/src/sdl2/lib.rs index 867f42c3..dc3206ab 100644 --- a/src/sdl2/lib.rs +++ b/src/sdl2/lib.rs @@ -17,6 +17,7 @@ pub mod keycode; #[path = "generated/scancode.rs"] pub mod scancode; +pub mod clipboard; pub mod cpuinfo; pub mod macros; pub mod event;