From 24c565bbd8b1c6e2ebd7754c04fb281710d65d80 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Wed, 12 Aug 2015 11:49:20 -0700 Subject: [PATCH] Add initial lime.system.Clipboard implementation --- lime/system/Clipboard.hx | 67 +++++++++++++++++++++++++++ project/include/system/Clipboard.h | 24 ++++++++++ project/src/ExternalInterface.cpp | 26 +++++++++++ project/src/backend/sdl/SDLSystem.cpp | 22 +++++++++ 4 files changed, 139 insertions(+) create mode 100644 lime/system/Clipboard.hx create mode 100644 project/include/system/Clipboard.h diff --git a/lime/system/Clipboard.hx b/lime/system/Clipboard.hx new file mode 100644 index 000000000..5c0ac8d5a --- /dev/null +++ b/lime/system/Clipboard.hx @@ -0,0 +1,67 @@ +package lime.system; + + +#if flash +import flash.desktop.Clipboard in FlashClipboard; +#end + + +class Clipboard { + + + public static var text (get, set):String; + + + + + // Get & Set Methods + + + + + private static function get_text ():String { + + #if (cpp || neko || nodejs) + return lime_clipboard_get_text (); + #elseif flash + if (FlashClipboard.generalClipboard.hasFormat (TEXT_FORMAT)) { + + return FlashClipboard.generalClipboard.getData (TEXT_FORMAT); + + } + #end + + return null; + + } + + + private static function set_text (value:String):String { + + #if (cpp || neko || nodejs) + lime_clipboard_set_text (value); + return value; + #elseif flash + FlashClipboard.generalClipboard.setData (TEXT_FORMAT, value); + return value; + #end + + return null; + + } + + + + + // Native Methods + + + + + #if (cpp || neko || nodejs) + private static var lime_clipboard_get_text = System.load ("lime", "lime_clipboard_get_text", 0); + private static var lime_clipboard_set_text = System.load ("lime", "lime_clipboard_set_text", 1); + #end + + +} \ No newline at end of file diff --git a/project/include/system/Clipboard.h b/project/include/system/Clipboard.h new file mode 100644 index 000000000..3ea68b323 --- /dev/null +++ b/project/include/system/Clipboard.h @@ -0,0 +1,24 @@ +#ifndef LIME_SYSTEM_CLIPBOARD_H +#define LIME_SYSTEM_CLIPBOARD_H + + +namespace lime { + + + class Clipboard { + + + public: + + static const char* GetText (); + static bool HasText (); + static void SetText (const char* text); + + + }; + + +} + + +#endif \ No newline at end of file diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index e7ae85221..128738a23 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -160,6 +161,29 @@ namespace lime { } + value lime_clipboard_get_text () { + + if (Clipboard::HasText ()) { + + return alloc_string (Clipboard::GetText ()); + + } else { + + return alloc_null (); + + } + + } + + + value lime_clipboard_set_text (value text) { + + Clipboard::SetText (val_string (text)); + return alloc_null (); + + } + + void lime_font_destroy (value handle) { Font *font = (Font*)(intptr_t)val_float (handle); @@ -1178,6 +1202,8 @@ namespace lime { DEFINE_PRIM (lime_bytes_from_data_pointer, 2); DEFINE_PRIM (lime_bytes_get_data_pointer, 1); DEFINE_PRIM (lime_bytes_read_file, 1); + DEFINE_PRIM (lime_clipboard_get_text, 0); + DEFINE_PRIM (lime_clipboard_set_text, 1); DEFINE_PRIM (lime_font_get_ascender, 1); DEFINE_PRIM (lime_font_get_descender, 1); DEFINE_PRIM (lime_font_get_family_name, 1); diff --git a/project/src/backend/sdl/SDLSystem.cpp b/project/src/backend/sdl/SDLSystem.cpp index d19c2690b..ffbedafd1 100644 --- a/project/src/backend/sdl/SDLSystem.cpp +++ b/project/src/backend/sdl/SDLSystem.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -47,6 +48,27 @@ namespace lime { static bool init = false; + const char* Clipboard::GetText () { + + return SDL_GetClipboardText (); + + } + + + bool Clipboard::HasText () { + + return SDL_HasClipboardText (); + + } + + + void Clipboard::SetText (const char* text) { + + SDL_SetClipboardText (text); + + } + + void *JNI::GetEnv () { #ifdef ANDROID