RenderContextCanvas class
class RenderContextCanvas extends RenderContext {
 final CanvasElement _canvasElement;
 final int _backgroundColor;
 CanvasRenderingContext2D _renderingContext;
 RenderContextCanvas(CanvasElement canvasElement, int backgroundColor) :
   _canvasElement = canvasElement,
   _backgroundColor = _ensureInt(backgroundColor) {
   var renderingContext = _canvasElement.context2D;
   if (renderingContext is! CanvasRenderingContext2D) {
     throw new StateError("Failed to get Canvas context.");
   }
   _renderingContext = renderingContext;
 }
 //-----------------------------------------------------------------------------------------------
 String get renderEngine => RenderEngine.Canvas2D;
 CanvasRenderingContext2D get rawContext => _renderingContext;
 Matrix get viewPortMatrix => new Matrix.fromIdentity();
 //-----------------------------------------------------------------------------------------------
 void clear() {
   _renderingContext.setTransform(1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
   _renderingContext.globalAlpha = 1.0;
   if (_backgroundColor & 0xFF000000 == 0) {
     _renderingContext.clearRect(0, 0, _canvasElement.width, _canvasElement.height);
   } else {
     _renderingContext.fillStyle = _color2rgb(_backgroundColor);
     _renderingContext.fillRect(0, 0, _canvasElement.width, _canvasElement.height);
   }
 }
 void renderQuad(RenderTextureQuad renderTextureQuad, Matrix matrix, num alpha) {
   var context = _renderingContext;
   var source = renderTextureQuad.renderTexture.canvas;
   var rotation = renderTextureQuad.rotation;
   var xyList = renderTextureQuad.xyList;
   context.globalAlpha = alpha;
   if (rotation == 0) {
     var sourceX = xyList[0];
     var sourceY = xyList[1];
     var sourceWidth = xyList[4] - sourceX;
     var sourceHeight = xyList[5] - sourceY;
     var destinationX = renderTextureQuad.offsetX;
     var destinationY = renderTextureQuad.offsetY;
     var destinationWidth= renderTextureQuad.textureWidth;
     var destinationHeight = renderTextureQuad.textureHeight;
     context.setTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);
     context.drawImageScaledFromSource(source,
         sourceX, sourceY, sourceWidth, sourceHeight,
         destinationX, destinationY, destinationWidth, destinationHeight);
   } else if (rotation == 1) {
     var sourceX = xyList[6];
     var sourceY = xyList[7];
     var sourceWidth = xyList[2] - sourceX;
     var sourceHeight = xyList[3] - sourceY;
     var destinationX = 0.0 - renderTextureQuad.offsetY - renderTextureQuad.textureHeight;
     var destinationY = renderTextureQuad.offsetX;
     var destinationWidth = renderTextureQuad.textureHeight;
     var destinationHeight = renderTextureQuad.textureWidth;
     context.setTransform(-matrix.c, -matrix.d, matrix.a, matrix.b, matrix.tx, matrix.ty);
     context.drawImageScaledFromSource(source,
         sourceX, sourceY, sourceWidth, sourceHeight,
         destinationX, destinationY, destinationWidth, destinationHeight);
   }
 }
 void renderTriangle(num x1, num y1, num x2, num y2, num x3, num y3, Matrix matrix, int color) {
   var context = _renderingContext;
   context.setTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);
   context.beginPath();
   context.moveTo(x1, y1);
   context.lineTo(x2, y2);
   context.lineTo(x3, y3);
   context.closePath();
   context.fillStyle = _color2rgba(color);
   context.fill();
 }
 void flush() {
 }
 //-----------------------------------------------------------------------------------------------
 void beginRenderMask(RenderState renderState, Mask mask, Matrix matrix) {
   _renderingContext.setTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);
   _renderingContext.beginPath();
   mask._drawCanvasPath(_renderingContext);
   _renderingContext.save();
   _renderingContext.clip();
 }
 void endRenderMask(Mask mask) {
   _renderingContext.restore();
   if (mask.border) {
     _renderingContext.strokeStyle = _color2rgba(mask.borderColor);
     _renderingContext.lineWidth = mask.borderWidth;
     _renderingContext.lineCap = "round";
     _renderingContext.lineJoin = "round";
     _renderingContext.stroke();
   }
 }
 //-----------------------------------------------------------------------------------------------
 void beginRenderShadow(RenderState renderState, Shadow shadow, Matrix matrix) {
   _renderingContext.save();
   _renderingContext.shadowColor = _color2rgba(shadow.color);
   _renderingContext.shadowBlur = sqrt(matrix.det) * shadow.blur;
   _renderingContext.shadowOffsetX = shadow.offsetX * matrix.a + shadow.offsetY * matrix.c;
   _renderingContext.shadowOffsetY = shadow.offsetX * matrix.b + shadow.offsetY * matrix.d;
 }
 void endRenderShadow(Shadow shadow) {
   _renderingContext.restore();
 }
}
Extends
EventDispatcher > RenderContext > RenderContextCanvas
Constructors
new RenderContextCanvas(CanvasElement canvasElement, int backgroundColor) #
Creates a new Object instance.
Object instances have no meaningful state, and are only useful through their identity. An Object instance is equal to itself only.
docs inherited from Object 
RenderContextCanvas(CanvasElement canvasElement, int backgroundColor) :
 _canvasElement = canvasElement,
 _backgroundColor = _ensureInt(backgroundColor) {
 var renderingContext = _canvasElement.context2D;
 if (renderingContext is! CanvasRenderingContext2D) {
   throw new StateError("Failed to get Canvas context.");
 }
 _renderingContext = renderingContext;
}
Properties
final EventStream<Event> onContextLost #
inherited from RenderContext 
EventStream<Event> get onContextLost => RenderContext.contextLostEvent.forTarget(this);
final EventStream<Event> onContextRestored #
inherited from RenderContext 
EventStream<Event> get onContextRestored => RenderContext.contextRestoredEvent.forTarget(this);
final CanvasRenderingContext2D rawContext #
CanvasRenderingContext2D get rawContext => _renderingContext;
Methods
StreamSubscription<Event> addEventListener(String eventType, EventListener eventListener, {bool useCapture: false, int priority: 0}) #
inherited from EventDispatcher 
StreamSubscription<Event> addEventListener(String eventType, EventListener eventListener, {
 bool useCapture: false, int priority: 0 }) {
 return this.on(eventType)._subscribe(eventListener, useCapture, priority);
}
void beginRenderMask(RenderState renderState, Mask mask, Matrix matrix) #
void beginRenderMask(RenderState renderState, Mask mask, Matrix matrix) {
 _renderingContext.setTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);
 _renderingContext.beginPath();
 mask._drawCanvasPath(_renderingContext);
 _renderingContext.save();
 _renderingContext.clip();
}
void beginRenderShadow(RenderState renderState, Shadow shadow, Matrix matrix) #
void beginRenderShadow(RenderState renderState, Shadow shadow, Matrix matrix) {
 _renderingContext.save();
 _renderingContext.shadowColor = _color2rgba(shadow.color);
 _renderingContext.shadowBlur = sqrt(matrix.det) * shadow.blur;
 _renderingContext.shadowOffsetX = shadow.offsetX * matrix.a + shadow.offsetY * matrix.c;
 _renderingContext.shadowOffsetY = shadow.offsetX * matrix.b + shadow.offsetY * matrix.d;
}
void clear() #
void clear() {
 _renderingContext.setTransform(1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
 _renderingContext.globalAlpha = 1.0;
 if (_backgroundColor & 0xFF000000 == 0) {
   _renderingContext.clearRect(0, 0, _canvasElement.width, _canvasElement.height);
 } else {
   _renderingContext.fillStyle = _color2rgb(_backgroundColor);
   _renderingContext.fillRect(0, 0, _canvasElement.width, _canvasElement.height);
 }
}
void dispatchEvent(Event event) #
inherited from EventDispatcher 
void dispatchEvent(Event event) {
 _dispatchEventInternal(event, this, EventPhase.AT_TARGET);
}
void endRenderMask(Mask mask) #
void endRenderMask(Mask mask) {
 _renderingContext.restore();
 if (mask.border) {
   _renderingContext.strokeStyle = _color2rgba(mask.borderColor);
   _renderingContext.lineWidth = mask.borderWidth;
   _renderingContext.lineCap = "round";
   _renderingContext.lineJoin = "round";
   _renderingContext.stroke();
 }
}
void endRenderShadow(Shadow shadow) #
void endRenderShadow(Shadow shadow) {
 _renderingContext.restore();
}
void flush() #
void flush() {
}
bool hasEventListener(String eventType) #
inherited from EventDispatcher 
bool hasEventListener(String eventType) {
 var eventStreams = _eventStreams;
 if (eventStreams == null) return false;
 var eventStream = eventStreams[eventType];
 if (eventStream == null) return false;
 return eventStream.hasSubscriptions;
}
EventStream<Event> on(String eventType) #
inherited from EventDispatcher 
EventStream<Event> on(String eventType) {
 var eventStreams = _eventStreams;
 if (eventStreams == null) {
   eventStreams = new Map<String, EventStream>();
   _eventStreams = eventStreams;
 }
 var eventStream = eventStreams[eventType];
 if (eventStream == null) {
   eventStream = new EventStream._internal(this, eventType);
   eventStreams[eventType] = eventStream;
 }
 return eventStream;
}
void removeEventListener(String eventType, EventListener eventListener, {bool useCapture: false}) #
inherited from EventDispatcher 
void removeEventListener(String eventType, EventListener eventListener, {
 bool useCapture: false }) {
 this.on(eventType)._unsubscribe(eventListener, useCapture);
}
void removeEventListeners(String eventType) #
inherited from EventDispatcher 
void removeEventListeners(String eventType) {
 this.on(eventType).cancelSubscriptions();
}
void renderQuad(RenderTextureQuad renderTextureQuad, Matrix matrix, num alpha) #
void renderQuad(RenderTextureQuad renderTextureQuad, Matrix matrix, num alpha) {
 var context = _renderingContext;
 var source = renderTextureQuad.renderTexture.canvas;
 var rotation = renderTextureQuad.rotation;
 var xyList = renderTextureQuad.xyList;
 context.globalAlpha = alpha;
 if (rotation == 0) {
   var sourceX = xyList[0];
   var sourceY = xyList[1];
   var sourceWidth = xyList[4] - sourceX;
   var sourceHeight = xyList[5] - sourceY;
   var destinationX = renderTextureQuad.offsetX;
   var destinationY = renderTextureQuad.offsetY;
   var destinationWidth= renderTextureQuad.textureWidth;
   var destinationHeight = renderTextureQuad.textureHeight;
   context.setTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);
   context.drawImageScaledFromSource(source,
       sourceX, sourceY, sourceWidth, sourceHeight,
       destinationX, destinationY, destinationWidth, destinationHeight);
 } else if (rotation == 1) {
   var sourceX = xyList[6];
   var sourceY = xyList[7];
   var sourceWidth = xyList[2] - sourceX;
   var sourceHeight = xyList[3] - sourceY;
   var destinationX = 0.0 - renderTextureQuad.offsetY - renderTextureQuad.textureHeight;
   var destinationY = renderTextureQuad.offsetX;
   var destinationWidth = renderTextureQuad.textureHeight;
   var destinationHeight = renderTextureQuad.textureWidth;
   context.setTransform(-matrix.c, -matrix.d, matrix.a, matrix.b, matrix.tx, matrix.ty);
   context.drawImageScaledFromSource(source,
       sourceX, sourceY, sourceWidth, sourceHeight,
       destinationX, destinationY, destinationWidth, destinationHeight);
 }
}
void renderTriangle(num x1, num y1, num x2, num y2, num x3, num y3, Matrix matrix, int color) #
void renderTriangle(num x1, num y1, num x2, num y2, num x3, num y3, Matrix matrix, int color) {
 var context = _renderingContext;
 context.setTransform(matrix.a, matrix.b, matrix.c, matrix.d, matrix.tx, matrix.ty);
 context.beginPath();
 context.moveTo(x1, y1);
 context.lineTo(x2, y2);
 context.lineTo(x3, y3);
 context.closePath();
 context.fillStyle = _color2rgba(color);
 context.fill();
}