canvas.js
20 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//>>built
define("./_base dojo/_base/lang dojo/_base/array dojo/_base/declare dojo/_base/window dojo/dom-geometry dojo/dom ./shape ./path ./arc ./matrix ./decompose ./bezierutils".split(" "),function(q,C,J,k,D,Q,R,h,E,L,F,w,H){function I(a,b,c,d,g,m,f,e,S,r){var M,n,l=b.length,h=0;r?(n=r.l/g,h=r.i):n=b[0]/g;for(;m<f;)m+n>f&&(M={l:(m+n-f)*g,i:h},n=f-m),h%2||(a.beginPath(),a.arc(c,d,g,m,m+n,e),S&&a.stroke()),m+=n,++h,n=b[h%l]/g;return M}function N(a,b,c,d){var g=0,m=0,f,e=0;d?(f=d.l,e=d.i):f=b[0];for(;1>m;)m=
H.tAtLength(a,f),1==m&&(g=H.computeLength(a),g={l:f-g,i:e}),a=H.splitBezierAtT(a,m),e%2||c.push(a[0]),a=a[1],++e,f=b[e%b.length];return g}function t(a,b,c,d){var g=[b.last.x,b.last.y].concat(c),m=!(a instanceof Array);c=4===c.length?"quadraticCurveTo":"bezierCurveTo";var f=[];b=N(g,b.canvasDash,f,d);for(d=0;d<f.length;++d)g=f[d],m?(a.moveTo(g[0],g[1]),a[c].apply(a,g.slice(2))):(a.push("moveTo",[g[0],g[1]]),a.push(c,g.slice(2)));return b}function l(a,b,c,d,g,m,f){var e=0,h=0,r=0,l=H.distance(c,d,g,
m),n=0;b=b.canvasDash;var k=c,t=d,q,u=!(a instanceof Array);f?(r=f.l,n=f.i):r+=b[0];for(;.01<Math.abs(1-h);)r>l&&(e={l:r-l,i:n},r=l),h=r/l,f=c+(g-c)*h,q=d+(m-d)*h,n++%2||(u?(a.moveTo(k,t),a.lineTo(f,q)):(a.push("moveTo",[k,t]),a.push("lineTo",[f,q]))),k=f,t=q,r+=b[n%b.length];return e}var e=q.canvas={},z=null,x=F.multiplyPoint,u=Math.PI,O=2*u,v=u/2;w=C.extend;if(D.global.CanvasRenderingContext2D){D=D.doc.createElement("canvas").getContext("2d");var G="function"==typeof D.setLineDash,T="function"==
typeof D.fillText}var P={solid:"none",shortdash:[4,1],shortdot:[1,1],shortdashdot:[4,1,1,1],shortdashdotdot:[4,1,1,1,1,1],dot:[1,3],dash:[4,3],longdash:[8,3],dashdot:[4,3,1,3],longdashdot:[8,3,1,3],longdashdotdot:[8,3,1,3,1,3]};e.Shape=k("dojox.gfx.canvas.Shape",h.Shape,{_render:function(a){a.save();this._renderTransform(a);this._renderClip(a);this._renderShape(a);this._renderFill(a,!0);this._renderStroke(a,!0);a.restore()},_renderClip:function(a){this.canvasClip&&(this.canvasClip.render(a),a.clip())},
_renderTransform:function(a){if("canvasTransform"in this){var b=this.canvasTransform;a.translate(b.dx,b.dy);a.rotate(b.angle2);a.scale(b.sx,b.sy);a.rotate(b.angle1)}},_renderShape:function(a){},_renderFill:function(a,b){if("canvasFill"in this){var c=this.fillStyle;if("canvasFillImage"in this){var d=c.width,g=c.height,m=this.canvasFillImage.width,f=this.canvasFillImage.height,e=Math.min(d==m?1:d/m,g==f?1:g/f),h=(d-e*m)/2,l=(g-e*f)/2;z.width=d;z.height=g;var k=z.getContext("2d");k.clearRect(0,0,d,g);
k.drawImage(this.canvasFillImage,0,0,m,f,h,l,e*m,e*f);this.canvasFill=a.createPattern(z,"repeat");delete this.canvasFillImage}a.fillStyle=this.canvasFill;b&&("pattern"!==c.type||0===c.x&&0===c.y||a.translate(c.x,c.y),a.fill())}else a.fillStyle="rgba(0,0,0,0.0)"},_renderStroke:function(a,b){var c=this.strokeStyle;c?(a.strokeStyle=c.color.toString(),a.lineWidth=c.width,a.lineCap=c.cap,"number"==typeof c.join?(a.lineJoin="miter",a.miterLimit=c.join):a.lineJoin=c.join,this.canvasDash?G?(a.setLineDash(this.canvasDash),
b&&a.stroke()):this._renderDashedStroke(a,b):b&&a.stroke()):b||(a.strokeStyle="rgba(0,0,0,0.0)")},_renderDashedStroke:function(a,b){},getEventSource:function(){return null},on:function(){},connect:function(){},disconnect:function(){},canvasClip:null,setClip:function(a){this.inherited(arguments);var b=a?"width"in a?"rect":"cx"in a?"ellipse":"points"in a?"polyline":"d"in a?"path":null:null;if(a&&!b)return this;this.canvasClip=a?U(b,a):null;this.parent&&this.parent._makeDirty();return this}});var U=
function(a,b){switch(a){case "ellipse":return{canvasEllipse:K({shape:b}),render:function(a){return e.Ellipse.prototype._renderShape.call(this,a)}};case "rect":return{shape:C.delegate(b,{r:0}),render:function(a){return e.Rect.prototype._renderShape.call(this,a)}};case "path":return{canvasPath:V(b),render:function(a){this.canvasPath._renderShape(a)}};case "polyline":return{canvasPolyline:b.points,render:function(a){return e.Polyline.prototype._renderShape.call(this,a)}}}return null},V=function(a){var b=
new dojox.gfx.canvas.Path;b.canvasPath=[];b._setPath(a.d);return b},A=function(a,b,c){var d=a.prototype[b];a.prototype[b]=c?function(){this.parent&&this.parent._makeDirty();d.apply(this,arguments);c.call(this);return this}:function(){this.parent&&this.parent._makeDirty();return d.apply(this,arguments)}};A(e.Shape,"setTransform",function(){this.matrix?this.canvasTransform=q.decompose(this.matrix):delete this.canvasTransform});A(e.Shape,"setFill",function(){var a=this.fillStyle,b;if(a){if("object"==
typeof a&&"type"in a){var c=this.surface.rawNode.getContext("2d");switch(a.type){case "linear":case "radial":b="linear"==a.type?c.createLinearGradient(a.x1,a.y1,a.x2,a.y2):c.createRadialGradient(a.cx,a.cy,0,a.cx,a.cy,a.r);J.forEach(a.colors,function(a){b.addColorStop(a.offset,q.normalizeColor(a.color).toString())});break;case "pattern":z||(z=document.createElement("canvas")),c=new Image,this.surface.downloadImage(c,a.src),this.canvasFillImage=c}}else b=a.toString();this.canvasFill=b}else delete this.canvasFill});
A(e.Shape,"setStroke",function(){var a=this.strokeStyle;if(a){var b=this.strokeStyle.style.toLowerCase();b in P&&(b=P[b]);if(b instanceof Array){this.canvasDash=b=b.slice();var c;for(c=0;c<b.length;++c)b[c]*=a.width;if("butt"!=a.cap){for(c=0;c<b.length;c+=2)b[c]-=a.width,1>b[c]&&(b[c]=1);for(c=1;c<b.length;c+=2)b[c]+=a.width}}else delete this.canvasDash}else delete this.canvasDash;this._needsDash=!G&&!!this.canvasDash});A(e.Shape,"setShape");e.Group=k("dojox.gfx.canvas.Group",e.Shape,{constructor:function(){h.Container._init.call(this)},
_render:function(a){a.save();this._renderTransform(a);this._renderClip(a);for(var b=0;b<this.children.length;++b)this.children[b]._render(a);a.restore()},destroy:function(){h.Container.clear.call(this,!0);e.Shape.prototype.destroy.apply(this,arguments)}});e.Rect=k("dojox.gfx.canvas.Rect",[e.Shape,h.Rect],{_renderShape:function(a){var b=this.shape,c=Math.min(b.r,b.height/2,b.width/2),d=b.x,g=d+b.width,m=b.y,b=m+b.height,e=d+c,h=g-c,l=m+c,k=b-c;a.beginPath();a.moveTo(e,m);c?(a.arc(h,l,c,-v,0,!1),a.arc(h,
k,c,0,v,!1),a.arc(e,k,c,v,u,!1),a.arc(e,l,c,u,u+v,!1)):(a.lineTo(h,m),a.lineTo(g,k),a.lineTo(e,b),a.lineTo(d,l));a.closePath()},_renderDashedStroke:function(a,b){var c=this.shape,d=Math.min(c.r,c.height/2,c.width/2),g=c.x,e=g+c.width,f=c.y,h=f+c.height,k=g+d,r=e-d,q=f+d,n=h-d;d?(a.beginPath(),c=l(a,this,k,f,r,f),b&&a.stroke(),c=I(a,this.canvasDash,r,q,d,-v,0,!1,b,c),a.beginPath(),c=l(a,this,e,q,e,n,c),b&&a.stroke(),c=I(a,this.canvasDash,r,n,d,0,v,!1,b,c),a.beginPath(),c=l(a,this,r,h,k,h,c),b&&a.stroke(),
c=I(a,this.canvasDash,k,n,d,v,u,!1,b,c),a.beginPath(),c=l(a,this,g,n,g,q,c),b&&a.stroke(),I(a,this.canvasDash,k,q,d,u,u+v,!1,b,c)):(a.beginPath(),c=l(a,this,k,f,r,f),c=l(a,this,r,f,e,n,c),c=l(a,this,e,n,k,h,c),l(a,this,k,h,g,q,c),b&&a.stroke())}});var y=[];(function(){var a=L.curvePI4;y.push(a.s,a.c1,a.c2,a.e);for(var b=45;360>b;b+=45){var c=F.rotateg(b);y.push(x(c,a.c1),x(c,a.c2),x(c,a.e))}})();var K=function(a){var b,c,d,g=[],e=a.shape,f=F.normalize([F.translate(e.cx,e.cy),F.scale(e.rx,e.ry)]);
b=x(f,y[0]);g.push([b.x,b.y]);for(e=1;e<y.length;e+=3)c=x(f,y[e]),d=x(f,y[e+1]),b=x(f,y[e+2]),g.push([c.x,c.y,d.x,d.y,b.x,b.y]);if(a._needsDash){b=[];c=g[0];for(e=1;e<g.length;++e)d=[],N(c.concat(g[e]),a.canvasDash,d),c=[g[e][4],g[e][5]],b.push(d);a._dashedPoints=b}return g};e.Ellipse=k("dojox.gfx.canvas.Ellipse",[e.Shape,h.Ellipse],{setShape:function(){this.inherited(arguments);this.canvasEllipse=K(this);return this},setStroke:function(){this.inherited(arguments);G||(this.canvasEllipse=K(this));
return this},_renderShape:function(a){var b=this.canvasEllipse,c;a.beginPath();a.moveTo.apply(a,b[0]);for(c=1;c<b.length;++c)a.bezierCurveTo.apply(a,b[c]);a.closePath()},_renderDashedStroke:function(a,b){var c=this._dashedPoints;a.beginPath();for(var d=0;d<c.length;++d)for(var e=c[d],h=0;h<e.length;++h){var f=e[h];a.moveTo(f[0],f[1]);a.bezierCurveTo(f[2],f[3],f[4],f[5],f[6],f[7])}b&&a.stroke()}});e.Circle=k("dojox.gfx.canvas.Circle",[e.Shape,h.Circle],{_renderShape:function(a){var b=this.shape;a.beginPath();
a.arc(b.cx,b.cy,b.r,0,O,1)},_renderDashedStroke:function(a,b){var c=this.shape,d=0,e,h=this.canvasDash.length;for(i=0;d<O;)e=this.canvasDash[i%h]/c.r,i%2||(a.beginPath(),a.arc(c.cx,c.cy,c.r,d,d+e,0),b&&a.stroke()),d+=e,++i}});e.Line=k("dojox.gfx.canvas.Line",[e.Shape,h.Line],{_renderShape:function(a){var b=this.shape;a.beginPath();a.moveTo(b.x1,b.y1);a.lineTo(b.x2,b.y2)},_renderDashedStroke:function(a,b){var c=this.shape;a.beginPath();l(a,this,c.x1,c.y1,c.x2,c.y2);b&&a.stroke()}});e.Polyline=k("dojox.gfx.canvas.Polyline",
[e.Shape,h.Polyline],{setShape:function(){this.inherited(arguments);var a=this.shape.points,b=a[0],c,d;this.bbox=null;this._normalizePoints();if(a.length)if("number"==typeof b)b=a;else for(b=[],d=0;d<a.length;++d)c=a[d],b.push(c.x,c.y);else b=[];this.canvasPolyline=b;return this},_renderShape:function(a){var b=this.canvasPolyline;if(b.length){a.beginPath();a.moveTo(b[0],b[1]);for(var c=2;c<b.length;c+=2)a.lineTo(b[c],b[c+1])}},_renderDashedStroke:function(a,b){var c=this.canvasPolyline,d=0;a.beginPath();
for(var e=0;e<c.length;e+=2)d=l(a,this,c[e],c[e+1],c[e+2],c[e+3],d);b&&a.stroke()}});e.Image=k("dojox.gfx.canvas.Image",[e.Shape,h.Image],{setShape:function(){this.inherited(arguments);var a=new Image;this.surface.downloadImage(a,this.shape.src);this.canvasImage=a;return this},_renderShape:function(a){var b=this.shape;a.drawImage(this.canvasImage,b.x,b.y,b.width,b.height)}});e.Text=k("dojox.gfx.canvas.Text",[e.Shape,h.Text],{_setFont:function(){this.fontStyle?this.canvasFont=q.makeFontString(this.fontStyle):
delete this.canvasFont},getTextWidth:function(){var a=this.shape,b=0,c;a.text&&(c=this.surface.rawNode.getContext("2d"),c.save(),this._renderTransform(c),this._renderFill(c,!1),this._renderStroke(c,!1),this.canvasFont&&(c.font=this.canvasFont),b=c.measureText(a.text).width,c.restore());return b},_render:function(a){a.save();this._renderTransform(a);this._renderFill(a,!1);this._renderStroke(a,!1);this._renderShape(a);a.restore()},_renderShape:function(a){var b=this.shape;b.text&&(a.textAlign="middle"===
b.align?"center":b.align,this.canvasFont&&(a.font=this.canvasFont),this.canvasFill&&a.fillText(b.text,b.x,b.y),this.strokeStyle&&(a.beginPath(),a.strokeText(b.text,b.x,b.y),a.closePath()))}});A(e.Text,"setFont");T||e.Text.extend({getTextWidth:function(){return 0},getBoundingBox:function(){return null},_renderShape:function(){}});var W={M:"_moveToA",m:"_moveToR",L:"_lineToA",l:"_lineToR",H:"_hLineToA",h:"_hLineToR",V:"_vLineToA",v:"_vLineToR",C:"_curveToA",c:"_curveToR",S:"_smoothCurveToA",s:"_smoothCurveToR",
Q:"_qCurveToA",q:"_qCurveToR",T:"_qSmoothCurveToA",t:"_qSmoothCurveToR",A:"_arcTo",a:"_arcTo",Z:"_closePath",z:"_closePath"};e.Path=k("dojox.gfx.canvas.Path",[e.Shape,E.Path],{constructor:function(){this.lastControl={}},setShape:function(){this.canvasPath=[];this._dashedPath=[];return this.inherited(arguments)},setStroke:function(){this.inherited(arguments);G||(this.segmented=!1,this._confirmSegmented());return this},_setPath:function(){this._dashResidue=null;this.inherited(arguments)},_updateWithSegment:function(a){var b=
C.clone(this.last);this[W[a.action]](this.canvasPath,a.action,a.args,this._needsDash?this._dashedPath:null);this.last=b;this.inherited(arguments)},_renderShape:function(a){var b=this.canvasPath;a.beginPath();for(var c=0;c<b.length;c+=2)a[b[c]].apply(a,b[c+1])},_renderDashedStroke:G?function(){}:function(a,b){var c=this._dashedPath;a.beginPath();for(var d=0;d<c.length;d+=2)a[c[d]].apply(a,c[d+1]);b&&a.stroke()},_moveToA:function(a,b,c,d){a.push("moveTo",[c[0],c[1]]);d&&d.push("moveTo",[c[0],c[1]]);
for(b=2;b<c.length;b+=2)a.push("lineTo",[c[b],c[b+1]]),d&&(this._dashResidue=l(d,this,c[b-2],c[b-1],c[b],c[b+1],this._dashResidue));this.last.x=c[c.length-2];this.last.y=c[c.length-1];this.lastControl={}},_moveToR:function(a,b,c,d){b="x"in this.last?[this.last.x+=c[0],this.last.y+=c[1]]:[this.last.x=c[0],this.last.y=c[1]];a.push("moveTo",b);d&&d.push("moveTo",b);for(b=2;b<c.length;b+=2)a.push("lineTo",[this.last.x+=c[b],this.last.y+=c[b+1]]),d&&(this._dashResidue=l(d,this,d[d.length-1][0],d[d.length-
1][1],this.last.x,this.last.y,this._dashResidue));this.lastControl={}},_lineToA:function(a,b,c,d){for(b=0;b<c.length;b+=2)d&&(this._dashResidue=l(d,this,this.last.x,this.last.y,c[b],c[b+1],this._dashResidue)),a.push("lineTo",[c[b],c[b+1]]);this.last.x=c[c.length-2];this.last.y=c[c.length-1];this.lastControl={}},_lineToR:function(a,b,c,d){for(b=0;b<c.length;b+=2)a.push("lineTo",[this.last.x+=c[b],this.last.y+=c[b+1]]),d&&(this._dashResidue=l(d,this,d[d.length-1][0],d[d.length-1][1],this.last.x,this.last.y,
this._dashResidue));this.lastControl={}},_hLineToA:function(a,b,c,d){for(b=0;b<c.length;++b)a.push("lineTo",[c[b],this.last.y]),d&&(this._dashResidue=l(d,this,d[d.length-1][0],d[d.length-1][1],c[b],this.last.y,this._dashResidue));this.last.x=c[c.length-1];this.lastControl={}},_hLineToR:function(a,b,c,d){for(b=0;b<c.length;++b)a.push("lineTo",[this.last.x+=c[b],this.last.y]),d&&(this._dashResidue=l(d,this,d[d.length-1][0],d[d.length-1][1],this.last.x,this.last.y,this._dashResidue));this.lastControl=
{}},_vLineToA:function(a,b,c,d){for(b=0;b<c.length;++b)a.push("lineTo",[this.last.x,c[b]]),d&&(this._dashResidue=l(d,this,d[d.length-1][0],d[d.length-1][1],this.last.x,c[b],this._dashResidue));this.last.y=c[c.length-1];this.lastControl={}},_vLineToR:function(a,b,c,d){for(b=0;b<c.length;++b)a.push("lineTo",[this.last.x,this.last.y+=c[b]]),d&&(this._dashResidue=l(d,this,d[d.length-1][0],d[d.length-1][1],this.last.x,this.last.y,this._dashResidue));this.lastControl={}},_curveToA:function(a,b,c,d){for(b=
0;b<c.length;b+=6)a.push("bezierCurveTo",c.slice(b,b+6)),d&&(this._dashResidue=t(d,this,a[a.length-1],this._dashResidue));this.last.x=c[c.length-2];this.last.y=c[c.length-1];this.lastControl.x=c[c.length-4];this.lastControl.y=c[c.length-3];this.lastControl.type="C"},_curveToR:function(a,b,c,d){for(b=0;b<c.length;b+=6)a.push("bezierCurveTo",[this.last.x+c[b],this.last.y+c[b+1],this.lastControl.x=this.last.x+c[b+2],this.lastControl.y=this.last.y+c[b+3],this.last.x+c[b+4],this.last.y+c[b+5]]),d&&(this._dashResidue=
t(d,this,a[a.length-1],this._dashResidue)),this.last.x+=c[b+4],this.last.y+=c[b+5];this.lastControl.type="C"},_smoothCurveToA:function(a,b,c,d){for(b=0;b<c.length;b+=4){var e="C"==this.lastControl.type;a.push("bezierCurveTo",[e?2*this.last.x-this.lastControl.x:this.last.x,e?2*this.last.y-this.lastControl.y:this.last.y,c[b],c[b+1],c[b+2],c[b+3]]);d&&(this._dashResidue=t(d,this,a[a.length-1],this._dashResidue));this.lastControl.x=c[b];this.lastControl.y=c[b+1];this.lastControl.type="C"}this.last.x=
c[c.length-2];this.last.y=c[c.length-1]},_smoothCurveToR:function(a,b,c,d){for(b=0;b<c.length;b+=4){var e="C"==this.lastControl.type;a.push("bezierCurveTo",[e?2*this.last.x-this.lastControl.x:this.last.x,e?2*this.last.y-this.lastControl.y:this.last.y,this.last.x+c[b],this.last.y+c[b+1],this.last.x+c[b+2],this.last.y+c[b+3]]);d&&(this._dashResidue=t(d,this,a[a.length-1],this._dashResidue));this.lastControl.x=this.last.x+c[b];this.lastControl.y=this.last.y+c[b+1];this.lastControl.type="C";this.last.x+=
c[b+2];this.last.y+=c[b+3]}},_qCurveToA:function(a,b,c,d){for(b=0;b<c.length;b+=4)a.push("quadraticCurveTo",c.slice(b,b+4));d&&(this._dashResidue=t(d,this,a[a.length-1],this._dashResidue));this.last.x=c[c.length-2];this.last.y=c[c.length-1];this.lastControl.x=c[c.length-4];this.lastControl.y=c[c.length-3];this.lastControl.type="Q"},_qCurveToR:function(a,b,c,d){for(b=0;b<c.length;b+=4)a.push("quadraticCurveTo",[this.lastControl.x=this.last.x+c[b],this.lastControl.y=this.last.y+c[b+1],this.last.x+c[b+
2],this.last.y+c[b+3]]),d&&(this._dashResidue=t(d,this,a[a.length-1],this._dashResidue)),this.last.x+=c[b+2],this.last.y+=c[b+3];this.lastControl.type="Q"},_qSmoothCurveToA:function(a,b,c,d){for(b=0;b<c.length;b+=2){var e="Q"==this.lastControl.type;a.push("quadraticCurveTo",[this.lastControl.x=e?2*this.last.x-this.lastControl.x:this.last.x,this.lastControl.y=e?2*this.last.y-this.lastControl.y:this.last.y,c[b],c[b+1]]);d&&(this._dashResidue=t(d,this,a[a.length-1],this._dashResidue));this.lastControl.type=
"Q"}this.last.x=c[c.length-2];this.last.y=c[c.length-1]},_qSmoothCurveToR:function(a,b,c,d){for(b=0;b<c.length;b+=2){var e="Q"==this.lastControl.type;a.push("quadraticCurveTo",[this.lastControl.x=e?2*this.last.x-this.lastControl.x:this.last.x,this.lastControl.y=e?2*this.last.y-this.lastControl.y:this.last.y,this.last.x+c[b],this.last.y+c[b+1]]);d&&(this._dashResidue=t(d,this,a[a.length-1],this._dashResidue));this.lastControl.type="Q";this.last.x+=c[b];this.last.y+=c[b+1]}},_arcTo:function(a,b,c,d){b=
"a"==b;for(var e=0;e<c.length;e+=7){var h=c[e+5],f=c[e+6];b&&(h+=this.last.x,f+=this.last.y);var k=L.arcAsBezier(this.last,c[e],c[e+1],c[e+2],c[e+3]?1:0,c[e+4]?1:0,h,f);J.forEach(k,function(b){a.push("bezierCurveTo",b)});d&&(this._dashResidue=t(d,this,p,this._dashResidue));this.last.x=h;this.last.y=f}this.lastControl={}},_closePath:function(a,b,c,d){a.push("closePath",[]);d&&(this._dashResidue=l(d,this,this.last.x,this.last.y,d[1][0],d[1][1],this._dashResidue));this.lastControl={}}});J.forEach("moveTo lineTo hLineTo vLineTo curveTo smoothCurveTo qCurveTo qSmoothCurveTo arcTo closePath".split(" "),
function(a){A(e.Path,a)});e.TextPath=k("dojox.gfx.canvas.TextPath",[e.Shape,E.TextPath],{_renderShape:function(a){},_setText:function(){},_setFont:function(){}});e.Surface=k("dojox.gfx.canvas.Surface",h.Surface,{constructor:function(){h.Container._init.call(this);this.pendingImageCount=0;this.makeDirty()},destroy:function(){h.Container.clear.call(this,!0);this.inherited(arguments)},setDimensions:function(a,b){this.width=q.normalizedLength(a);this.height=q.normalizedLength(b);if(!this.rawNode)return this;
a=!1;this.rawNode.width!=this.width&&(this.rawNode.width=this.width,a=!0);this.rawNode.height!=this.height&&(this.rawNode.height=this.height,a=!0);a&&this.makeDirty();return this},getDimensions:function(){return this.rawNode?{width:this.rawNode.width,height:this.rawNode.height}:null},_render:function(a){!this.rawNode||!a&&this.pendingImageCount||(a=this.rawNode.getContext("2d"),a.clearRect(0,0,this.rawNode.width,this.rawNode.height),this.render(a),"pendingRender"in this&&(clearTimeout(this.pendingRender),
delete this.pendingRender))},render:function(a){a.save();for(var b=0;b<this.children.length;++b)this.children[b]._render(a);a.restore()},makeDirty:function(){this.pendingImagesCount||"pendingRender"in this||this._batch||(this.pendingRender=setTimeout(C.hitch(this,this._render),0))},downloadImage:function(a,b){var c=C.hitch(this,this.onImageLoad);!this.pendingImageCount++&&"pendingRender"in this&&(clearTimeout(this.pendingRender),delete this.pendingRender);a.onload=c;a.onerror=c;a.onabort=c;a.src=
b},onImageLoad:function(){--this.pendingImageCount||(this.onImagesLoaded(),this._render())},onImagesLoaded:function(){},getEventSource:function(){return null},connect:function(){},disconnect:function(){},on:function(){}});e.createSurface=function(a,b,c){if(!b&&!c){var d=Q.position(a);b=b||d.w;c=c||d.h}"number"==typeof b&&(b+="px");"number"==typeof c&&(c+="px");d=new e.Surface;a=R.byId(a);var g=a.ownerDocument.createElement("canvas");g.width=q.normalizedLength(b);g.height=q.normalizedLength(c);a.appendChild(g);
d.rawNode=g;d._parent=a;return d.surface=d};var B=h.Container;k={openBatch:function(){++this._batch;return this},closeBatch:function(){this._batch=0<this._batch?--this._batch:0;this._makeDirty();return this},_makeDirty:function(){this._batch||this.surface.makeDirty()},add:function(a){this._makeDirty();return B.add.apply(this,arguments)},remove:function(a,b){this._makeDirty();return B.remove.apply(this,arguments)},clear:function(){this._makeDirty();return B.clear.apply(this,arguments)},getBoundingBox:B.getBoundingBox,
_moveChildToFront:function(a){this._makeDirty();return B._moveChildToFront.apply(this,arguments)},_moveChildToBack:function(a){this._makeDirty();return B._moveChildToBack.apply(this,arguments)}};E={createObject:function(a,b){a=new a;a.surface=this.surface;a.setShape(b);this.add(a);return a}};w(e.Group,k);w(e.Group,h.Creator);w(e.Group,E);w(e.Surface,k);w(e.Surface,h.Creator);w(e.Surface,E);e.fixTarget=function(a,b){return!0};return e});