From 65663b29cdfc3ebe25031566b2d0b18268e0cdc2 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Mon, 8 May 2017 10:38:03 -0700 Subject: [PATCH] Make BitmapData.fromBytes synchronous where possible (resolve #1563) --- openfl/_internal/macros/AssetsMacro.hx | 6 +-- openfl/display/BitmapData.hx | 72 +++++++++++++++++++------- 2 files changed, 56 insertions(+), 22 deletions(-) diff --git a/openfl/_internal/macros/AssetsMacro.hx b/openfl/_internal/macros/AssetsMacro.hx index e01d928ebf..44363997a9 100644 --- a/openfl/_internal/macros/AssetsMacro.hx +++ b/openfl/_internal/macros/AssetsMacro.hx @@ -60,7 +60,7 @@ class AssetsMacro { } else { - __fromBase64 (haxe.Resource.getString (resourceName), resourceType, function (b) { + __loadFromBase64 (haxe.Resource.getString (resourceName), resourceType).onComplete (function (b) { if (preload == null) { @@ -315,12 +315,12 @@ class AssetsMacro { throw "not implemented"; #else var byteArray = openfl.utils.ByteArray.fromBytes (haxe.Resource.getBytes (resourceName)); - loadCompressedDataFromByteArray (byteArray, byteArray.length, forcePlayAsMusic); + loadCompressedDataFromByteArray (byteArray, byteArray.length); #end }; - var args = [ { name: "stream", opt: true, type: macro :openfl.net.URLRequest, value: null }, { name: "context", opt: true, type: macro :openfl.media.SoundLoaderContext, value: null }, { name: "forcePlayAsMusic", opt: true, type: macro :Bool, value: macro false } ]; + var args = [ { name: "stream", opt: true, type: macro :openfl.net.URLRequest, value: null }, { name: "context", opt: true, type: macro :openfl.media.SoundLoaderContext, value: null } ]; fields.push ({ name: "new", access: [ APublic ], kind: FFun({ args: args, expr: constructor, params: [], ret: null }), pos: Context.currentPos() }); #end diff --git a/openfl/display/BitmapData.hx b/openfl/display/BitmapData.hx index 6129211624..18336bb582 100644 --- a/openfl/display/BitmapData.hx +++ b/openfl/display/BitmapData.hx @@ -1618,39 +1618,30 @@ class BitmapData implements IBitmapDrawable { private inline function __fromBase64 (base64:String, type:String):Void { - Image.loadFromBase64 (base64, type).onComplete (function (image) { - - __fromImage (image); - - }); + var image = Image.fromBase64 (base64, type); + __fromImage (image); } private inline function __fromBytes (bytes:ByteArray, rawAlpha:ByteArray = null):Void { - Image.loadFromBytes (bytes).onComplete (function (image) { - - __fromImage (image); + var image = Image.fromBytes (bytes); + __fromImage (image); + + if (rawAlpha != null) { - if (rawAlpha != null) { - - __applyAlpha (rawAlpha); - - } + __applyAlpha (rawAlpha); - }); + } } private function __fromFile (path:String):Void { - Image.loadFromFile (path).onComplete (function (image) { - - __fromImage (image); - - }); + var image = Image.fromFile (path); + __fromImage (image); } @@ -1697,6 +1688,49 @@ class BitmapData implements IBitmapDrawable { } + private inline function __loadFromBase64 (base64:String, type:String):Future { + + return Image.loadFromBase64 (base64, type).then (function (image) { + + __fromImage (image); + return Future.withValue (this); + + }); + + } + + + private inline function __loadFromBytes (bytes:ByteArray, rawAlpha:ByteArray = null):Future { + + return Image.loadFromBytes (bytes).then (function (image) { + + __fromImage (image); + + if (rawAlpha != null) { + + __applyAlpha (rawAlpha); + + } + + return Future.withValue (this); + + }); + + } + + + private function __loadFromFile (path:String):Future { + + return Image.loadFromFile (path).then (function (image) { + + __fromImage (image); + return Future.withValue (this); + + }); + + } + + private function __renderCairo (renderSession:RenderSession):Void { #if lime_cairo