aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c_src/esdl2.h4
-rw-r--r--c_src/sdl_clipboard.c66
-rw-r--r--src/esdl2.erl16
-rw-r--r--src/sdl_clipboard.erl28
4 files changed, 114 insertions, 0 deletions
diff --git a/c_src/esdl2.h b/c_src/esdl2.h
index 970fa6c..80e6406 100644
--- a/c_src/esdl2.h
+++ b/c_src/esdl2.h
@@ -104,6 +104,10 @@
F(quit_subsystem, 1) \
F(set_main_ready, 0) \
F(was_init, 1) \
+ /* sdl_clipboard */ \
+ F(get_clipboard_text, 0) \
+ F(has_clipboard_text, 0) \
+ F(set_clipboard_text, 1) \
/* sdl_events */ \
F(poll_event, 0) \
/* sdl_renderer */ \
diff --git a/c_src/sdl_clipboard.c b/c_src/sdl_clipboard.c
new file mode 100644
index 0000000..14d1a3e
--- /dev/null
+++ b/c_src/sdl_clipboard.c
@@ -0,0 +1,66 @@
+// Copyright (c) 2014, Loïc Hoguin <[email protected]>
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+#include "esdl2.h"
+
+// get_clipboard_text
+
+NIF_FUNCTION(get_clipboard_text)
+{
+ char* text;
+ ERL_NIF_TERM term;
+
+ text = SDL_GetClipboardText();
+
+ if (!text)
+ return sdl_error_tuple(env);
+
+ term = enif_make_string(env, text, ERL_NIF_LATIN1);
+
+ SDL_free(text);
+
+ return term;
+}
+
+// has_clipboard_text
+
+NIF_FUNCTION(has_clipboard_text)
+{
+ if (SDL_HasClipboardText())
+ return atom_true;
+
+ return atom_false;
+}
+
+// set_clipboard_text
+
+NIF_FUNCTION(set_clipboard_text)
+{
+ unsigned int len;
+ char* text;
+ int ret;
+
+ BADARG_IF(!enif_get_list_length(env, argv[0], &len));
+ text = (char*)enif_alloc(len + 1);
+ BADARG_IF(!enif_get_string(env, argv[0], text, len + 1, ERL_NIF_LATIN1));
+
+ ret = SDL_SetClipboardText(text);
+
+ enif_free(text);
+
+ if (ret != 0)
+ return sdl_error_tuple(env);
+
+ return atom_ok;
+}
diff --git a/src/esdl2.erl b/src/esdl2.erl
index 3f29141..efe1596 100644
--- a/src/esdl2.erl
+++ b/src/esdl2.erl
@@ -22,6 +22,11 @@
-export([set_main_ready/0]).
-export([was_init/1]).
+%% sdl_clipboard
+-export([get_clipboard_text/0]).
+-export([has_clipboard_text/0]).
+-export([set_clipboard_text/1]).
+
%% sdl_events
-export([poll_event/0]).
@@ -78,6 +83,17 @@ set_main_ready() ->
was_init(_) ->
erlang:nif_error({not_loaded, ?MODULE}).
+%% sdl_clipboard
+
+get_clipboard_text() ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
+has_clipboard_text() ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
+set_clipboard_text(_) ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
%% sdl_events
poll_event() ->
diff --git a/src/sdl_clipboard.erl b/src/sdl_clipboard.erl
new file mode 100644
index 0000000..4ac3c9a
--- /dev/null
+++ b/src/sdl_clipboard.erl
@@ -0,0 +1,28 @@
+%% Copyright (c) 2014, Loïc Hoguin <[email protected]>
+%%
+%% Permission to use, copy, modify, and/or distribute this software for any
+%% purpose with or without fee is hereby granted, provided that the above
+%% copyright notice and this permission notice appear in all copies.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-module(sdl_clipboard).
+
+-export([get_text/0]).
+-export([has_text/0]).
+-export([set_text/1]).
+
+get_text() ->
+ esdl2:get_clipboard_text().
+
+has_text() ->
+ esdl2:has_clipboard_text().
+
+set_text(Text) ->
+ esdl2:set_clipboard_text(Text).