From d0b9e00c0f2fb66c1d26adbdd133c76096bf8b64 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Thu, 24 May 2018 19:05:19 -0700 Subject: [PATCH] Progress on HL bindings --- .vscode/settings.json | 14 +++++++++++++- lime/_backend/native/NativeApplication.hx | 2 +- lime/_backend/native/NativeCFFI.hx | 4 ++-- project/Build.xml | 12 ++++++++++++ project/include/graphics/Image.h | 6 ++++-- project/include/graphics/ImageBuffer.h | 4 ++-- project/include/system/CFFIPointer.h | 10 ++++++++++ project/src/ExternalInterface.cpp | 22 +++++++++++++++++----- project/src/system/CFFIPointer.cpp | 19 +++++++++++++++++++ 9 files changed, 80 insertions(+), 13 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 06cfeb592..650103fb7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,6 +20,18 @@ "xtree": "cpp", "xutility": "cpp", "system_error": "cpp", - "xfunctional": "cpp" + "xfunctional": "cpp", + "chrono": "cpp", + "ratio": "cpp", + "xlocmon": "cpp", + "xstddef": "cpp", + "xtr1common": "cpp", + "iterator": "cpp", + "map": "cpp", + "memory": "cpp", + "set": "cpp", + "streambuf": "cpp", + "unordered_map": "cpp", + "xmemory0": "cpp" } } \ No newline at end of file diff --git a/lime/_backend/native/NativeApplication.hx b/lime/_backend/native/NativeApplication.hx index b411c9dd6..f59212c37 100644 --- a/lime/_backend/native/NativeApplication.hx +++ b/lime/_backend/native/NativeApplication.hx @@ -104,7 +104,7 @@ class NativeApplication { public function create (config:Config):Void { #if (!macro && lime_cffi) - handle = NativeCFFI.lime_application_create ( { } ); + handle = NativeCFFI.lime_application_create (); #end } diff --git a/lime/_backend/native/NativeCFFI.hx b/lime/_backend/native/NativeCFFI.hx index afaf1a0a4..53b37ad55 100644 --- a/lime/_backend/native/NativeCFFI.hx +++ b/lime/_backend/native/NativeCFFI.hx @@ -33,7 +33,7 @@ class NativeCFFI { #if (lime_cffi && !macro && !hl) - @:cffi private static function lime_application_create (config:Dynamic):Dynamic; + @:cffi private static function lime_application_create ():Dynamic; @:cffi private static function lime_application_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_application_exec (handle:Dynamic):Int; @:cffi private static function lime_application_init (handle:Dynamic):Void; @@ -183,7 +183,7 @@ class NativeCFFI { #end #if hl - @:cffi private static function lime_application_create (config:Dynamic):Dynamic; + @:hlNative("lime", "lime_application_create") private static function lime_application_create ():CFFIPointer { return null; } @:cffi private static function lime_application_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; @:cffi private static function lime_application_exec (handle:Dynamic):Int; @:cffi private static function lime_application_init (handle:Dynamic):Void; diff --git a/project/Build.xml b/project/Build.xml index e7e2bf107..fadd5cc2b 100644 --- a/project/Build.xml +++ b/project/Build.xml @@ -16,6 +16,7 @@ + @@ -121,6 +122,13 @@ +
+ + + + +
+
@@ -381,6 +389,10 @@ + +
diff --git a/project/include/graphics/Image.h b/project/include/graphics/Image.h index a5fc646a6..309269d0b 100644 --- a/project/include/graphics/Image.h +++ b/project/include/graphics/Image.h @@ -5,6 +5,7 @@ #include #include #include +#include namespace lime { @@ -18,11 +19,12 @@ namespace lime { int height; int offsetX; int offsetY; + HL_Rectangle* rect; /*ImageType*/ int type; int version; int width; - // double x; - // double y; + double x; + double y; }; diff --git a/project/include/graphics/ImageBuffer.h b/project/include/graphics/ImageBuffer.h index 4518af148..410ccb7b5 100644 --- a/project/include/graphics/ImageBuffer.h +++ b/project/include/graphics/ImageBuffer.h @@ -22,9 +22,9 @@ namespace lime { bool transparent; int width; void* __srcBitmapData; - // void* __srcCanvas; + void* __srcCanvas; void* __srcContext; - // void* __srcCustom; + void* __srcCustom; void* __srcImage; void* __srcImageData; diff --git a/project/include/system/CFFIPointer.h b/project/include/system/CFFIPointer.h index a4f5bb0a7..bf74f3c7a 100644 --- a/project/include/system/CFFIPointer.h +++ b/project/include/system/CFFIPointer.h @@ -2,6 +2,7 @@ #define LIME_SYSTEM_CFFI_POINTER_H +#include #include @@ -16,8 +17,17 @@ namespace hx { namespace lime { + struct HL_CFFIPointer { + + void* finalizer; + void* ptr; + + }; + + value CFFIPointer (void* ptr, hx::finalizer finalizer = 0); value CFFIPointer (value handle, hx::finalizer finalizer = 0); + HL_CFFIPointer* HLCFFIPointer (void* ptr, hx::finalizer finalizer = 0); } diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 462172cf9..5787485bf 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -128,15 +128,24 @@ namespace lime { } - value lime_application_create (value callback) { + value lime_application_create () { Application* application = CreateApplication (); - Application::callback = new AutoGCRoot (callback); + // Application::callback = new ValuePointer (callback); return CFFIPointer (application, gc_application); } + HL_PRIM HL_CFFIPointer* hl_lime_application_create () { + + Application* application = CreateApplication (); + // Application::callback = new ValuePointer (callback); + return HLCFFIPointer (application, gc_application); + + } + + void lime_application_event_manager_register (value callback, value eventObject) { ApplicationEvent::callback = new AutoGCRoot (callback); @@ -1986,7 +1995,7 @@ namespace lime { } - DEFINE_PRIME1 (lime_application_create); + DEFINE_PRIME0 (lime_application_create); DEFINE_PRIME2v (lime_application_event_manager_register); DEFINE_PRIME1 (lime_application_exec); DEFINE_PRIME1v (lime_application_init); @@ -2141,14 +2150,17 @@ namespace lime { #define _ENUM "?" + // #define TCFFIPOINTER _ABSTRACT (HL_CFFIPointer) + #define TCFFIPOINTER _DYN #define TBYTES _OBJ (_I32 _BYTES) #define TARRAYBUFFER TBYTES #define TARRAYBUFFERVIEW _OBJ (_I32 TARRAYBUFFER _I32 _I32 _I32 _I32) - #define TIMAGEBUFFER _OBJ (_I32 TARRAYBUFFERVIEW _I32 _I32 _BOOL _BOOL _I32 _DYN _DYN _DYN _DYN) - #define TIMAGE _OBJ (TIMAGEBUFFER _BOOL _I32 _I32 _I32 _ENUM _I32 _I32) + #define TIMAGEBUFFER _OBJ (_I32 TARRAYBUFFERVIEW _I32 _I32 _BOOL _BOOL _I32 _DYN _DYN _DYN _DYN _DYN _DYN) #define TRECTANGLE _OBJ (_F64 _F64 _F64 _F64) + #define TIMAGE _OBJ (TIMAGEBUFFER _BOOL _I32 _I32 _I32 TRECTANGLE _ENUM _I32 _I32 _F64 _F64) + DEFINE_HL_PRIM (TCFFIPOINTER, lime_application_create, _VOID); DEFINE_HL_PRIM (_VOID, lime_image_data_util_fill_rect, TIMAGE TRECTANGLE _I32 _I32); diff --git a/project/src/system/CFFIPointer.cpp b/project/src/system/CFFIPointer.cpp index d8e49419e..2678526df 100644 --- a/project/src/system/CFFIPointer.cpp +++ b/project/src/system/CFFIPointer.cpp @@ -40,4 +40,23 @@ namespace lime { } + HL_CFFIPointer* HLCFFIPointer (void* handle, hx::finalizer finalizer) { + + if (handle) { + + // HL_CFFIPointer* pointer = (HL_CFFIPointer*)hl_gc_alloc_finalizer (sizeof (HL_CFFIPointer)); + // pointer->finalizer = finalizer ? finalizer : 0; + // pointer->ptr = handle; + // return pointer; + return 0; + + } else { + + return 0; + + } + + } + + } \ No newline at end of file