Dart DocumentationstagexlRenderContextCanvas

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;

final String renderEngine #

String get renderEngine => RenderEngine.Canvas2D;

final Matrix viewPortMatrix #

Matrix get viewPortMatrix => new Matrix.fromIdentity();

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();
}