Improve Clipboard support, add Clipboard.onUpdate (resolve #925)
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#include <media/AudioBuffer.h>
|
||||
#include <system/CFFIPointer.h>
|
||||
#include <system/Clipboard.h>
|
||||
#include <system/ClipboardEvent.h>
|
||||
#include <system/JNI.h>
|
||||
#include <system/Locale.h>
|
||||
#include <system/SensorEvent.h>
|
||||
@@ -272,6 +273,14 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
void lime_clipboard_event_manager_register (value callback, value eventObject) {
|
||||
|
||||
ClipboardEvent::callback = new AutoGCRoot (callback);
|
||||
ClipboardEvent::eventObject = new AutoGCRoot (eventObject);
|
||||
|
||||
}
|
||||
|
||||
|
||||
value lime_clipboard_get_text () {
|
||||
|
||||
if (Clipboard::HasText ()) {
|
||||
@@ -1794,6 +1803,7 @@ namespace lime {
|
||||
DEFINE_PRIME2 (lime_bytes_read_file);
|
||||
DEFINE_PRIME1 (lime_cffi_get_native_pointer);
|
||||
DEFINE_PRIME1 (lime_cffi_set_finalizer);
|
||||
DEFINE_PRIME2v (lime_clipboard_event_manager_register);
|
||||
DEFINE_PRIME0 (lime_clipboard_get_text);
|
||||
DEFINE_PRIME1v (lime_clipboard_set_text);
|
||||
DEFINE_PRIME2 (lime_data_pointer_offset);
|
||||
|
||||
@@ -48,6 +48,7 @@ namespace lime {
|
||||
nextUpdate = 0;
|
||||
|
||||
ApplicationEvent applicationEvent;
|
||||
ClipboardEvent clipboardEvent;
|
||||
DropEvent dropEvent;
|
||||
GamepadEvent gamepadEvent;
|
||||
JoystickEvent joystickEvent;
|
||||
@@ -156,6 +157,11 @@ namespace lime {
|
||||
inBackground = false;
|
||||
break;
|
||||
|
||||
case SDL_CLIPBOARDUPDATE:
|
||||
|
||||
ProcessClipboardEvent (event);
|
||||
break;
|
||||
|
||||
case SDL_CONTROLLERAXISMOTION:
|
||||
case SDL_CONTROLLERBUTTONDOWN:
|
||||
case SDL_CONTROLLERBUTTONUP:
|
||||
@@ -316,6 +322,19 @@ namespace lime {
|
||||
}
|
||||
|
||||
|
||||
void SDLApplication::ProcessClipboardEvent (SDL_Event* event) {
|
||||
|
||||
if (ClipboardEvent::callback) {
|
||||
|
||||
clipboardEvent.type = CLIPBOARD_UPDATE;
|
||||
|
||||
ClipboardEvent::Dispatch (&clipboardEvent);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void SDLApplication::ProcessDropEvent (SDL_Event* event) {
|
||||
|
||||
if (DropEvent::callback) {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <app/Application.h>
|
||||
#include <app/ApplicationEvent.h>
|
||||
#include <graphics/RenderEvent.h>
|
||||
#include <system/ClipboardEvent.h>
|
||||
#include <system/SensorEvent.h>
|
||||
#include <ui/DropEvent.h>
|
||||
#include <ui/GamepadEvent.h>
|
||||
@@ -39,6 +40,7 @@ namespace lime {
|
||||
private:
|
||||
|
||||
void HandleEvent (SDL_Event* event);
|
||||
void ProcessClipboardEvent (SDL_Event* event);
|
||||
void ProcessDropEvent (SDL_Event* event);
|
||||
void ProcessGamepadEvent (SDL_Event* event);
|
||||
void ProcessJoystickEvent (SDL_Event* event);
|
||||
@@ -57,6 +59,7 @@ namespace lime {
|
||||
|
||||
bool active;
|
||||
ApplicationEvent applicationEvent;
|
||||
ClipboardEvent clipboardEvent;
|
||||
Uint32 currentUpdate;
|
||||
double framePeriod;
|
||||
DropEvent dropEvent;
|
||||
|
||||
44
project/src/system/ClipboardEvent.cpp
Normal file
44
project/src/system/ClipboardEvent.cpp
Normal file
@@ -0,0 +1,44 @@
|
||||
#include <hx/CFFI.h>
|
||||
#include <system/ClipboardEvent.h>
|
||||
|
||||
|
||||
namespace lime {
|
||||
|
||||
|
||||
AutoGCRoot* ClipboardEvent::callback = 0;
|
||||
AutoGCRoot* ClipboardEvent::eventObject = 0;
|
||||
|
||||
static int id_type;
|
||||
static bool init = false;
|
||||
|
||||
|
||||
ClipboardEvent::ClipboardEvent () {
|
||||
|
||||
type = CLIPBOARD_UPDATE;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ClipboardEvent::Dispatch (ClipboardEvent* event) {
|
||||
|
||||
if (ClipboardEvent::callback) {
|
||||
|
||||
if (!init) {
|
||||
|
||||
id_type = val_id ("type");
|
||||
init = true;
|
||||
|
||||
}
|
||||
|
||||
value object = (ClipboardEvent::eventObject ? ClipboardEvent::eventObject->get () : alloc_empty_object ());
|
||||
|
||||
alloc_field (object, id_type, alloc_int (event->type));
|
||||
|
||||
val_call0 (ClipboardEvent::callback->get ());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user