/**
|
|
_enyo.Canvas_ is a control that generates a <canvas> HTML tag. It may
|
|
contain other canvas components that are derived not from
|
|
<a href="#enyo.Control">enyo.Control</a>, but from
|
|
<a href="#enyo.canvas.Control">enyo.canvas.Control</a>. These aren't true
|
|
controls in the sense of being DOM elements; they are, rather, shapes drawn
|
|
into the canvas.
|
|
*/
|
|
enyo.kind({
|
|
name: "enyo.Canvas",
|
|
kind: enyo.Control,
|
|
tag: "canvas",
|
|
attributes: {
|
|
//* Width of the canvas element
|
|
width: 500,
|
|
//* Height of the canvas element
|
|
height: 500
|
|
},
|
|
defaultKind: "enyo.canvas.Control",
|
|
//* @protected
|
|
generateInnerHtml: function() {
|
|
return '';
|
|
},
|
|
teardownChildren: function() {
|
|
},
|
|
rendered: function() {
|
|
this.renderChildren();
|
|
},
|
|
/*
|
|
addChild and removeChild of Control kind assumes children are Controls.
|
|
CanvasControls are not, so we use UiComponent's version, the superkind of Control
|
|
*/
|
|
addChild: function() {
|
|
enyo.UiComponent.prototype.addChild.apply(this, arguments);
|
|
},
|
|
removeChild: function() {
|
|
enyo.UiComponent.prototype.removeChild.apply(this, arguments);
|
|
},
|
|
renderChildren: function(inContext) {
|
|
var ctx = inContext;
|
|
var canvas = this.hasNode();
|
|
if (!ctx) {
|
|
if (canvas.getContext) {
|
|
ctx = canvas.getContext('2d');
|
|
}
|
|
}
|
|
if (ctx) {
|
|
for (var i=0, c; (c=this.children[i]); i++) {
|
|
c.render(ctx);
|
|
}
|
|
}
|
|
},
|
|
//* @public
|
|
/**
|
|
Refreshes the canvas context, clears existing drawings, and redraws all
|
|
of the children.
|
|
*/
|
|
update: function() {
|
|
var canvas = this.hasNode();
|
|
if (canvas.getContext) {
|
|
var ctx = canvas.getContext('2d');
|
|
var b = this.getBounds();
|
|
// clear canvas
|
|
ctx.clearRect(0, 0, b.width, b.height);
|
|
this.renderChildren(ctx);
|
|
}
|
|
}
|
|
});
|