This is an automated email from the ASF dual-hosted git repository.
gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push:
new 964caea Added in a js-only utility method 'fromCanvas' for using
native canvas as source for constructing a BitmapData. Stubbed in another
method yet to be implemented.
new 7db6424 Merge branch 'develop' of
https://github.com/apache/royale-asjs into develop
964caea is described below
commit 964caea0abc2530c2879760f0405f398bdd68604
Author: greg-dove <[email protected]>
AuthorDate: Tue Dec 1 09:10:09 2020 +1300
Added in a js-only utility method 'fromCanvas' for using native canvas as
source for constructing a BitmapData. Stubbed in another method yet to be
implemented.
---
.../royale/org/apache/royale/display/BitmapData.as | 94 ++++++++++++++++------
.../royale/org/apache/royale/display/Graphics.as | 2 +-
2 files changed, 70 insertions(+), 26 deletions(-)
diff --git
a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/BitmapData.as
b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/BitmapData.as
index dfa0f9b..9512238 100644
---
a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/BitmapData.as
+++
b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/BitmapData.as
@@ -32,8 +32,40 @@
private var _ctx:CanvasRenderingContext2D;
private var _lockedData:ImageData;
private static var _instIdx:uint = 0;
-
-
+
+ private static var _fromCanvas:Boolean;
+
+ /**
+ * A javascript-only method to use an external canvas for a
bitmapData. The canvas is 'cloned' so it returns a BitmapData 'snapshot' at the
+ * time this method is called.
+ *
+ * Note that the default fillColor is different to the BitmapData
constructor. This is transparent black, the default for Canvas
+ *
+ * @royaleignorecoercion HTMLCanvasElement
+ * @royaleignorecoercion CanvasRenderingContext2D
+ */
+ public static function fromCanvas(canvasElement:HTMLCanvasElement,
transparent:Boolean=true, fillColor:uint = 0x00000000):BitmapData{
+ var w:uint = canvasElement.width;
+ var h:uint = canvasElement.height;
+ if (!canvasElement || !w || !h) throw new Error('ArgumentError:
Error #2015: Invalid BitmapData.');
+ _fromCanvas = true;
+ var bdata:BitmapData = new BitmapData(w, h, transparent);
+ _fromCanvas = false;
+ bdata._width = w;
+ bdata._height = h;
+ //clone the canvas and assign it
+ var newCanvas:HTMLCanvasElement = document.createElement('canvas')
as HTMLCanvasElement;
+ newCanvas.width = w;
+ newCanvas.height = h;
+ var context:CanvasRenderingContext2D = newCanvas.getContext('2d')
as CanvasRenderingContext2D;
+
+ bdata._canvas = newCanvas;
+ bdata._ctx = context;
+ bdata._transparent = transparent;
+ bdata.init(fillColor); //if this is transparent black (default)
then no fill will be drawn
+ context.drawImage(canvasElement, 0, 0);
+ return bdata;
+ }
/**
*
@@ -47,25 +79,28 @@
*/
public function BitmapData(width:uint, height:uint,
transparent:Boolean = true, fillColor:uint = 0xffffffff)
{
- if ((width<0 || width > 8191)|| (height<0 || height>8191) ||
(width * height > 16777215)) throw new Error('width and/or height exceed the
maximum dimensions');
- this._transparent = transparent;
- if (width && height) {
- _canvas = document.createElement('canvas') as
HTMLCanvasElement;
- _canvas.width = _width = width;
- _canvas.height = _height = height;
- _id = 'royale-bitmapdata-' + _instIdx++;
- _canvas.setAttributeNS(null,'id', _id);
-
- _ctx = _canvas.getContext('2d') as CanvasRenderingContext2D;
- if (fillColor || !transparent) { //do nothing for transparent
black, it is the default
- _ctx.fillStyle = convertColorValToStyle(fillColor);
- _ctx.fillRect(0, 0, width, height);
- }
- _svgTarget =
JSRuntimeGraphicsStore.getInstance().addBitmapDataImpl(_canvas);
- requestAnimationFrame(onRenderUpdate);
-
- } else throw new Error('ArgumentError: Error #2015: Invalid
BitmapData.');
-
+ if (!_fromCanvas) {
+ if ((width<0 || width > 8191)|| (height<0 || height>8191) ||
(width * height > 16777215)) throw new Error('width and/or height exceed the
maximum dimensions');
+ this._transparent = transparent;
+ if (width && height) {
+ _canvas = document.createElement('canvas') as
HTMLCanvasElement;
+ _canvas.width = _width = width;
+ _canvas.height = _height = height;
+ _ctx = _canvas.getContext('2d') as
CanvasRenderingContext2D;
+ init(fillColor);
+ } else throw new Error('ArgumentError: Error #2015: Invalid
BitmapData.');
+ }
+ }
+
+ private function init(fillColor:uint):void{
+ if (fillColor || !_transparent) { //do nothing for transparent
black, it is the default
+ _ctx.fillStyle = convertColorValToStyle(fillColor);
+ _ctx.fillRect(0, 0, width, height);
+ }
+ _id = 'royale-bitmapdata-' + _instIdx++;
+ _canvas.setAttributeNS(null,'id', _id);
+ _svgTarget =
JSRuntimeGraphicsStore.getInstance().addBitmapDataImpl(_canvas);
+ requestAnimationFrame(onRenderUpdate);
}
private var _id:String;
@@ -95,7 +130,7 @@
//BitmapData.prototype[altName] = isSafariDT
_safariDT = isSafariDT;
_checked = true;
- console.log('safari Desktop?', isSafariDT);
+ // console.log('safari Desktop?', isSafariDT);
return isSafariDT;
}
@@ -343,6 +378,8 @@
if (!_canvas) throw new Error('ArgumentError: Error #2015: Invalid
BitmapData');
return new Rectangle(0, 0, _width, _height);
}
+
+
public function dispose():void{
if (_canvas) {
@@ -354,9 +391,16 @@
}
}
- // not implemented
- public function draw(source:Object, matrix:Object = null,
colorTransform:Object = null, blendMode:String = null, clipRect:Object = null,
smoothing:Boolean = false):void
- {}
+ // not yet implemented
+ public function copyPixels(sourceBitmapData:BitmapData,
sourceRect:Rectangle, destPoint:Point, alphaBitmapData:BitmapData = null,
alphaPoint:Point = null, mergeAlpha:Boolean = false):void{
+ trace('BitmapData copyPixels not yet implemented')
+ }
+
+ public function draw(source:Object, matrix:Object = null,
colorTransform:Object = null, blendMode:String = null, clipRect:Object = null,
smoothing:Boolean = false):void
+ {
+ trace('BitmapData draw not yet implemented')
+ }
+
}
}
diff --git
a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/Graphics.as
b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/Graphics.as
index 7cd25e2..3db73c2 100644
---
a/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/Graphics.as
+++
b/frameworks/projects/Graphics/src/main/royale/org/apache/royale/display/Graphics.as
@@ -466,7 +466,7 @@ package org.apache.royale.display
var bitmapFill:GraphicsBitmapFill = BITMAP_FILL;
bitmapFill.bitmapData = bitmap;
- bitmapFill.matrix = matrix ? matrix.clone()/* as Matrix*/:
null;;
+ bitmapFill.matrix = matrix ? matrix.clone()/* as Matrix*/:
null;
bitmapFill.repeat = repeat;
bitmapFill.smooth = smooth;
currentFill = bitmapFill;