From 2fe10275e33d1be40351e28dc9a8cfb2639da1b2 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Wed, 23 May 2018 19:43:55 -0700 Subject: [PATCH] Initial strict HL bindings for passing Image, Rectangle, Bytes --- lime/_backend/native/NativeCFFI.hx | 154 +++++++++++++++++++++++- project/include/graphics/Image.h | 19 +++ project/include/graphics/ImageBuffer.h | 22 ++++ project/include/math/Rectangle.h | 13 ++ project/include/utils/ArrayBufferView.h | 15 +++ project/include/utils/Bytes.h | 12 ++ project/src/ExternalInterface.cpp | 23 ++++ project/src/graphics/Image.cpp | 11 ++ project/src/graphics/ImageBuffer.cpp | 29 +++++ project/src/math/Rectangle.cpp | 10 ++ project/src/utils/ArrayBufferView.cpp | 21 ++++ project/src/utils/Bytes.cpp | 41 +++++++ 12 files changed, 369 insertions(+), 1 deletion(-) diff --git a/lime/_backend/native/NativeCFFI.hx b/lime/_backend/native/NativeCFFI.hx index 1bec7d27a..afaf1a0a4 100644 --- a/lime/_backend/native/NativeCFFI.hx +++ b/lime/_backend/native/NativeCFFI.hx @@ -7,6 +7,8 @@ import lime.graphics.opengl.GLProgram; import lime.graphics.opengl.GLRenderbuffer; import lime.graphics.opengl.GLShader; import lime.graphics.opengl.GLTexture; +import lime.graphics.Image; +import lime.math.Rectangle; import lime.media.openal.ALAuxiliaryEffectSlot; import lime.system.CFFIPointer; import lime.utils.DataPointer; @@ -30,7 +32,7 @@ typedef Float32 = Float; class NativeCFFI { - #if (lime_cffi && !macro) + #if (lime_cffi && !macro && !hl) @:cffi private static function lime_application_create (config:Dynamic):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; @@ -180,6 +182,156 @@ class NativeCFFI { @:cffi private static function lime_zlib_decompress (data:Dynamic, bytes:Dynamic):Dynamic; #end + #if hl + @:cffi private static function lime_application_create (config:Dynamic):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; + @:cffi private static function lime_application_quit (handle:Dynamic):Int; + @:cffi private static function lime_application_set_frame_rate (handle:Dynamic, value:Float):Void; + @:cffi private static function lime_application_update (handle:Dynamic):Bool; + @:cffi private static function lime_audio_load (data:Dynamic, buffer:Dynamic):Dynamic; + @:cffi private static function lime_bytes_from_data_pointer (data:Float, length:Int):Dynamic; + @:cffi private static function lime_bytes_get_data_pointer (data:Dynamic):Float; + @:cffi private static function lime_bytes_get_data_pointer_offset (data:Dynamic, offset:Int):Float; + @:cffi private static function lime_bytes_read_file (path:String, bytes:Dynamic):Dynamic; + @:cffi private static function lime_cffi_get_native_pointer (ptr:Dynamic):Float; + @:cffi private static function lime_clipboard_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_clipboard_get_text ():Dynamic; + @:cffi private static function lime_clipboard_set_text (text:String):Void; + @:cffi private static function lime_data_pointer_offset (dataPointer:DataPointer, offset:Int):Float; + @:cffi private static function lime_deflate_compress (data:Dynamic, bytes:Dynamic):Dynamic; + @:cffi private static function lime_deflate_decompress (data:Dynamic, bytes:Dynamic):Dynamic; + @:cffi private static function lime_drop_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_file_dialog_open_directory (title:String, filter:String, defaultPath:String):Dynamic; + @:cffi private static function lime_file_dialog_open_file (title:String, filter:String, defaultPath:String):Dynamic; + @:cffi private static function lime_file_dialog_open_files (title:String, filter:String, defaultPath:String):Dynamic; + @:cffi private static function lime_file_dialog_save_file (title:String, filter:String, defaultPath:String):Dynamic; + @:cffi private static function lime_file_watcher_create (callback:Dynamic):CFFIPointer; + @:cffi private static function lime_file_watcher_add_directory (handle:CFFIPointer, path:Dynamic, recursive:Bool):Dynamic; + @:cffi private static function lime_file_watcher_remove_directory (handle:CFFIPointer, watchID:Dynamic):Void; + @:cffi private static function lime_file_watcher_update (handle:CFFIPointer):Void; + @:cffi private static function lime_font_get_ascender (handle:Dynamic):Int; + @:cffi private static function lime_font_get_descender (handle:Dynamic):Int; + @:cffi private static function lime_font_get_family_name (handle:Dynamic):Dynamic; + @:cffi private static function lime_font_get_glyph_index (handle:Dynamic, character:String):Int; + @:cffi private static function lime_font_get_glyph_indices (handle:Dynamic, characters:String):Dynamic; + @:cffi private static function lime_font_get_glyph_metrics (handle:Dynamic, index:Int):Dynamic; + @:cffi private static function lime_font_get_height (handle:Dynamic):Int; + @:cffi private static function lime_font_get_num_glyphs (handle:Dynamic):Int; + @:cffi private static function lime_font_get_underline_position (handle:Dynamic):Int; + @:cffi private static function lime_font_get_underline_thickness (handle:Dynamic):Int; + @:cffi private static function lime_font_get_units_per_em (handle:Dynamic):Int; + @:cffi private static function lime_font_load (data:Dynamic):Dynamic; + @:cffi private static function lime_font_outline_decompose (handle:Dynamic, size:Int):Dynamic; + @:cffi private static function lime_font_render_glyph (handle:Dynamic, index:Int, data:Dynamic):Bool; + @:cffi private static function lime_font_render_glyphs (handle:Dynamic, indices:Dynamic, data:Dynamic):Bool; + @:cffi private static function lime_font_set_size (handle:Dynamic, size:Int):Void; + @:cffi private static function lime_gamepad_add_mappings (mappings:Dynamic):Void; + @:cffi private static function lime_gamepad_get_device_guid (id:Int):Dynamic; + @:cffi private static function lime_gamepad_get_device_name (id:Int):Dynamic; + @:cffi private static function lime_gamepad_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_gzip_compress (data:Dynamic, bytes:Dynamic):Dynamic; + @:cffi private static function lime_gzip_decompress (data:Dynamic, bytes:Dynamic):Dynamic; + @:cffi private static function lime_haptic_vibrate (period:Int, duration:Int):Void; + @:cffi private static function lime_image_encode (data:Dynamic, type:Int, quality:Int, bytes:Dynamic):Dynamic; + @:cffi private static function lime_image_load (data:Dynamic, buffer:Dynamic):Dynamic; + @:cffi private static function lime_image_data_util_color_transform (image:Dynamic, rect:Dynamic, colorMatrix:Dynamic):Void; + @:cffi private static function lime_image_data_util_copy_channel (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, srcChannel:Int, destChannel:Int):Void; + @:cffi private static function lime_image_data_util_copy_pixels (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, alphaImage:Dynamic, alphaPoint:Dynamic, mergeAlpha:Bool):Void; + @:hlNative("lime", "lime_image_data_util_fill_rect") private static function lime_image_data_util_fill_rect (image:Image, rect:Rectangle, rg:Int, ba:Int):Void {} + @:cffi private static function lime_image_data_util_flood_fill (image:Dynamic, x:Int, y:Int, rg:Int, ba:Int):Void; + @:cffi private static function lime_image_data_util_get_pixels (image:Dynamic, rect:Dynamic, format:Int, bytes:Dynamic):Void; + @:cffi private static function lime_image_data_util_merge (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, redMultiplier:Int, greenMultiplier:Int, blueMultiplier:Int, alphaMultiplier:Int):Void; + @:cffi private static function lime_image_data_util_multiply_alpha (image:Dynamic):Void; + @:cffi private static function lime_image_data_util_resize (image:Dynamic, buffer:Dynamic, width:Int, height:Int):Void; + @:cffi private static function lime_image_data_util_set_format (image:Dynamic, format:Int):Void; + @:cffi private static function lime_image_data_util_set_pixels (image:Dynamic, rect:Dynamic, bytes:Dynamic, offset:Int, format:Int, endian:Int):Void; + @:cffi private static function lime_image_data_util_threshold (image:Dynamic, sourceImage:Dynamic, sourceRect:Dynamic, destPoint:Dynamic, operation:Int, thresholdRG:Int, thresholdBA:Int, colorRG:Int, colorBA:Int, maskRG:Int, maskBA:Int, copySource:Bool):Int; + @:cffi private static function lime_image_data_util_unmultiply_alpha (image:Dynamic):Void; + @:cffi private static function lime_joystick_get_device_guid (id:Int):Dynamic; + @:cffi private static function lime_joystick_get_device_name (id:Int):Dynamic; + @:cffi private static function lime_joystick_get_num_axes (id:Int):Int; + @:cffi private static function lime_joystick_get_num_buttons (id:Int):Int; + @:cffi private static function lime_joystick_get_num_hats (id:Int):Int; + @:cffi private static function lime_joystick_get_num_trackballs (id:Int):Int; + @:cffi private static function lime_joystick_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_jpeg_decode_bytes (data:Dynamic, decodeData:Bool, buffer:Dynamic):Dynamic; + @:cffi private static function lime_jpeg_decode_file (path:String, decodeData:Bool, buffer:Dynamic):Dynamic; + @:cffi private static function lime_key_code_from_scan_code (scanCode:Float32):Float32; + @:cffi private static function lime_key_code_to_scan_code (keyCode:Float32):Float32; + @:cffi private static function lime_key_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_lzma_compress (data:Dynamic, bytes:Dynamic):Dynamic; + @:cffi private static function lime_lzma_decompress (data:Dynamic, bytes:Dynamic):Dynamic; + @:cffi private static function lime_mouse_hide ():Void; + @:cffi private static function lime_mouse_set_cursor (cursor:Int):Void; + @:cffi private static function lime_mouse_set_lock (lock:Bool):Void; + @:cffi private static function lime_mouse_show ():Void; + @:cffi private static function lime_mouse_warp (x:Int, y:Int, window:Dynamic):Void; + @:cffi private static function lime_mouse_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_neko_execute (module:String):Void; + @:cffi private static function lime_png_decode_bytes (data:Dynamic, decodeData:Bool, buffer:Dynamic):Dynamic; + @:cffi private static function lime_png_decode_file (path:String, decodeData:Bool, buffer:Dynamic):Dynamic; + @:cffi private static function lime_renderer_create (window:Dynamic):Dynamic; + @:cffi private static function lime_renderer_flip (handle:Dynamic):Void; + @:cffi private static function lime_renderer_get_context (handle:Dynamic):Float; + @:cffi private static function lime_renderer_get_scale (handle:Dynamic):Float; + @:cffi private static function lime_renderer_get_type (handle:Dynamic):Dynamic; + @:cffi private static function lime_renderer_lock (handle:Dynamic):Dynamic; + @:cffi private static function lime_renderer_make_current (handle:Dynamic):Void; + @:cffi private static function lime_renderer_read_pixels (handle:Dynamic, rect:Dynamic, imageBuffer:Dynamic):Dynamic; + @:cffi private static function lime_renderer_unlock (handle:Dynamic):Void; + @:cffi private static function lime_render_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_sensor_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_system_get_allow_screen_timeout ():Bool; + @:cffi private static function lime_system_set_allow_screen_timeout (value:Bool):Bool; + @:cffi private static function lime_system_get_device_model ():Dynamic; + @:cffi private static function lime_system_get_device_vendor ():Dynamic; + @:cffi private static function lime_system_get_directory (type:Int, company:String, title:String):Dynamic; + @:cffi private static function lime_system_get_display (index:Int):Dynamic; + @:cffi private static function lime_system_get_ios_tablet ():Bool; + @:cffi private static function lime_system_get_num_displays ():Int; + @:cffi private static function lime_system_get_platform_label ():Dynamic; + @:cffi private static function lime_system_get_platform_name ():Dynamic; + @:cffi private static function lime_system_get_platform_version ():Dynamic; + @:cffi private static function lime_system_get_timer ():Float; + @:cffi private static function lime_system_open_file (path:String):Void; + @:cffi private static function lime_system_open_url (url:String, target:String):Void; + @:cffi private static function lime_text_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_text_layout_create (direction:Int, script:String, language:String):Dynamic; + @:cffi private static function lime_text_layout_position (textHandle:Dynamic, fontHandle:Dynamic, size:Int, textString:String, data:Dynamic):Dynamic; + @:cffi private static function lime_text_layout_set_direction (textHandle:Dynamic, direction:Int):Void; + @:cffi private static function lime_text_layout_set_language (textHandle:Dynamic, language:String):Void; + @:cffi private static function lime_text_layout_set_script (textHandle:Dynamic, script:String):Void; + @:cffi private static function lime_touch_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_window_alert (handle:Dynamic, message:String, title:String):Void; + @:cffi private static function lime_window_close (handle:Dynamic):Void; + @:cffi private static function lime_window_create (application:Dynamic, width:Int, height:Int, flags:Int, title:String):Dynamic; + @:cffi private static function lime_window_focus (handle:Dynamic):Void; + @:cffi private static function lime_window_get_display (handle:Dynamic):Int; + @:cffi private static function lime_window_get_display_mode (handle:Dynamic):Dynamic; + @:cffi private static function lime_window_get_enable_text_events (handle:Dynamic):Bool; + @:cffi private static function lime_window_get_height (handle:Dynamic):Int; + @:cffi private static function lime_window_get_id (handle:Dynamic):Int; + @:cffi private static function lime_window_get_width (handle:Dynamic):Int; + @:cffi private static function lime_window_get_x (handle:Dynamic):Int; + @:cffi private static function lime_window_get_y (handle:Dynamic):Int; + @:cffi private static function lime_window_move (handle:Dynamic, x:Int, y:Int):Void; + @:cffi private static function lime_window_resize (handle:Dynamic, width:Int, height:Int):Void; + @:cffi private static function lime_window_set_borderless (handle:Dynamic, borderless:Bool):Bool; + @:cffi private static function lime_window_set_display_mode (handle:Dynamic, displayMode:Dynamic):Dynamic; + @:cffi private static function lime_window_set_enable_text_events (handle:Dynamic, enabled:Bool):Void; + @:cffi private static function lime_window_set_fullscreen (handle:Dynamic, fullscreen:Bool):Bool; + @:cffi private static function lime_window_set_icon (handle:Dynamic, buffer:Dynamic):Void; + @:cffi private static function lime_window_set_maximized (handle:Dynamic, maximized:Bool):Bool; + @:cffi private static function lime_window_set_minimized (handle:Dynamic, minimized:Bool):Bool; + @:cffi private static function lime_window_set_resizable (handle:Dynamic, resizable:Bool):Bool; + @:cffi private static function lime_window_set_title (handle:Dynamic, title:String):Dynamic; + @:cffi private static function lime_window_event_manager_register (callback:Dynamic, eventObject:Dynamic):Void; + @:cffi private static function lime_zlib_compress (data:Dynamic, bytes:Dynamic):Dynamic; + @:cffi private static function lime_zlib_decompress (data:Dynamic, bytes:Dynamic):Dynamic; + #end + #if (lime_cffi && !macro && android) @:cffi private static function lime_jni_call_member (jniMethod:Dynamic, jniObject:Dynamic, args:Dynamic):Dynamic; @:cffi private static function lime_jni_call_static (jniMethod:Dynamic, args:Dynamic):Dynamic; diff --git a/project/include/graphics/Image.h b/project/include/graphics/Image.h index ef8bd6eb9..a5fc646a6 100644 --- a/project/include/graphics/Image.h +++ b/project/include/graphics/Image.h @@ -2,6 +2,7 @@ #define LIME_GRAPHICS_IMAGE_H +#include #include #include @@ -9,6 +10,23 @@ namespace lime { + struct HL_Image { + + hl_type* t; + HL_ImageBuffer* buffer; + bool dirty; + int height; + int offsetX; + int offsetY; + /*ImageType*/ int type; + int version; + int width; + // double x; + // double y; + + }; + + class Image { @@ -16,6 +34,7 @@ namespace lime { Image (); Image (value image); + Image (HL_Image* image); ~Image (); ImageBuffer *buffer; diff --git a/project/include/graphics/ImageBuffer.h b/project/include/graphics/ImageBuffer.h index d286a2cc2..4518af148 100644 --- a/project/include/graphics/ImageBuffer.h +++ b/project/include/graphics/ImageBuffer.h @@ -2,6 +2,7 @@ #define LIME_GRAPHICS_IMAGE_BUFFER_H +#include #include #include #include @@ -10,6 +11,26 @@ namespace lime { + struct HL_ImageBuffer { + + hl_type* t; + int bitsPerPixel; + HL_ArrayBufferView* data; + PixelFormat format; + int height; + bool premultiplied; + bool transparent; + int width; + void* __srcBitmapData; + // void* __srcCanvas; + void* __srcContext; + // void* __srcCustom; + void* __srcImage; + void* __srcImageData; + + }; + + class ImageBuffer { @@ -17,6 +38,7 @@ namespace lime { ImageBuffer (); ImageBuffer (value imageBuffer); + ImageBuffer (HL_ImageBuffer* imageBuffer); ~ImageBuffer (); void Blit (const unsigned char *data, int x, int y, int width, int height); diff --git a/project/include/math/Rectangle.h b/project/include/math/Rectangle.h index 405b9322b..0324c20fc 100644 --- a/project/include/math/Rectangle.h +++ b/project/include/math/Rectangle.h @@ -2,12 +2,24 @@ #define LIME_MATH_RECTANGLE_H +#include #include namespace lime { + struct HL_Rectangle { + + hl_type* type; + double height; + double width; + double x; + double y; + + }; + + class Rectangle { @@ -16,6 +28,7 @@ namespace lime { Rectangle (); Rectangle (double x, double y, double width, double height); Rectangle (value rect); + Rectangle (HL_Rectangle* rect); void Contract (double x, double y, double width, double height); value Value (); diff --git a/project/include/utils/ArrayBufferView.h b/project/include/utils/ArrayBufferView.h index b24d6f4af..c850135ce 100644 --- a/project/include/utils/ArrayBufferView.h +++ b/project/include/utils/ArrayBufferView.h @@ -2,6 +2,7 @@ #define LIME_UTILS_ARRAY_BUFFER_VIEW_H +#include #include #include @@ -9,6 +10,19 @@ namespace lime { + struct HL_ArrayBufferView { + + hl_type* t; + /*TypedArrayType*/ int type; + HL_Bytes* buffer; + int byteOffset; + int byteLength; + int length; + int bytesPerElement; + + }; + + class ArrayBufferView { @@ -17,6 +31,7 @@ namespace lime { ArrayBufferView (); ArrayBufferView (int size); ArrayBufferView (value arrayBufferView); + ArrayBufferView (HL_ArrayBufferView* arrayBufferView); ~ArrayBufferView (); unsigned char *Data (); diff --git a/project/include/utils/Bytes.h b/project/include/utils/Bytes.h index 6b66cc2ad..845ffb62c 100644 --- a/project/include/utils/Bytes.h +++ b/project/include/utils/Bytes.h @@ -2,6 +2,7 @@ #define LIME_UTILS_BYTES_H +#include #include #include @@ -9,12 +10,22 @@ namespace lime { + struct HL_Bytes { + + hl_type* t; + int length; + unsigned char* b; + + }; + + struct Bytes { Bytes (); Bytes (int size); Bytes (value bytes); + Bytes (HL_Bytes* bytes); Bytes (const char* path); Bytes (const QuickVec data); ~Bytes (); @@ -25,6 +36,7 @@ namespace lime { void ReadFile (const char* path); void Resize (int size); void Set (value bytes); + void Set (HL_Bytes* bytes); void Set (const QuickVec data); value Value (); diff --git a/project/src/ExternalInterface.cpp b/project/src/ExternalInterface.cpp index 84379ff44..462172cf9 100644 --- a/project/src/ExternalInterface.cpp +++ b/project/src/ExternalInterface.cpp @@ -7,6 +7,7 @@ #endif +#include #include #include #include @@ -989,6 +990,16 @@ namespace lime { } + HL_PRIM void hl_lime_image_data_util_fill_rect (HL_Image* image, HL_Rectangle* rect, int rg, int ba) { + + Image _image = Image (image); + Rectangle _rect = Rectangle (rect); + int32_t color = (rg << 16) | ba; + ImageDataUtil::FillRect (&_image, &_rect, color); + + } + + void lime_image_data_util_flood_fill (value image, int x, int y, int rg, int ba) { Image _image = Image (image); @@ -2129,6 +2140,18 @@ namespace lime { DEFINE_PRIME2 (lime_zlib_decompress); + #define _ENUM "?" + #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 TRECTANGLE _OBJ (_F64 _F64 _F64 _F64) + + + DEFINE_HL_PRIM (_VOID, lime_image_data_util_fill_rect, TIMAGE TRECTANGLE _I32 _I32); + + } diff --git a/project/src/graphics/Image.cpp b/project/src/graphics/Image.cpp index d7d3f318f..15beb3f45 100644 --- a/project/src/graphics/Image.cpp +++ b/project/src/graphics/Image.cpp @@ -45,6 +45,17 @@ namespace lime { } + Image::Image (HL_Image* image) { + + width = image->width; + height = image->height; + buffer = new ImageBuffer (image->buffer); + offsetX = image->offsetX; + offsetY = image->offsetY; + + } + + Image::~Image () { delete buffer; diff --git a/project/src/graphics/ImageBuffer.cpp b/project/src/graphics/ImageBuffer.cpp index b168856fb..b3c9ec477 100644 --- a/project/src/graphics/ImageBuffer.cpp +++ b/project/src/graphics/ImageBuffer.cpp @@ -70,6 +70,35 @@ namespace lime { } + ImageBuffer::ImageBuffer (HL_ImageBuffer* imageBuffer) { + + if (imageBuffer) { + + width = imageBuffer->width; + height = imageBuffer->height; + bitsPerPixel = imageBuffer->bitsPerPixel; + format = imageBuffer->format; + transparent = imageBuffer->transparent; + premultiplied = imageBuffer->premultiplied; + data = new ArrayBufferView (imageBuffer->data); + + } else { + + width = 0; + height = 0; + bitsPerPixel = 32; + format = RGBA32; + data = 0; + premultiplied = false; + transparent = false; + + } + + mValue = 0; + + } + + ImageBuffer::~ImageBuffer () { delete data; diff --git a/project/src/math/Rectangle.cpp b/project/src/math/Rectangle.cpp index eff5db309..1ddcf5573 100644 --- a/project/src/math/Rectangle.cpp +++ b/project/src/math/Rectangle.cpp @@ -51,6 +51,16 @@ namespace lime { } + Rectangle::Rectangle (HL_Rectangle* rect) { + + width = rect->width; + height = rect->height; + x = rect->x; + y = rect->y; + + } + + void Rectangle::Contract (double x, double y, double width, double height) { if (this->width == 0 && this->height == 0) { diff --git a/project/src/utils/ArrayBufferView.cpp b/project/src/utils/ArrayBufferView.cpp index 5a35b2364..0ee57a771 100644 --- a/project/src/utils/ArrayBufferView.cpp +++ b/project/src/utils/ArrayBufferView.cpp @@ -60,6 +60,27 @@ namespace lime { } + ArrayBufferView::ArrayBufferView (HL_ArrayBufferView* arrayBufferView) { + + if (arrayBufferView) { + + buffer = new Bytes (arrayBufferView->buffer); + byteLength = arrayBufferView->byteLength; + length = arrayBufferView->length; + + } else { + + buffer = new Bytes (); + byteLength = 0; + length = 0; + + } + + mValue = 0; + + } + + ArrayBufferView::~ArrayBufferView () { delete buffer; diff --git a/project/src/utils/Bytes.cpp b/project/src/utils/Bytes.cpp index d1d9553b7..98ce90308 100644 --- a/project/src/utils/Bytes.cpp +++ b/project/src/utils/Bytes.cpp @@ -70,6 +70,19 @@ namespace lime { } + Bytes::Bytes (HL_Bytes* bytes) { + + // _initializeBytes (); + + _data = 0; + _length = 0; + _value = 0; + + Set (bytes); + + } + + Bytes::Bytes (const char* path) { _initializeBytes (); @@ -245,6 +258,34 @@ namespace lime { } + void Bytes::Set (HL_Bytes* bytes) { + + if (!bytes) { + + _length = 0; + _data = 0; + _value = 0; + + } else { + + _value = 0; + _length = bytes->length; + + if (_length > 0) { + + _data = bytes->b; + + } else { + + _data = 0; + + } + + } + + } + + void Bytes::Set (const QuickVec data) { int size = data.size ();