//>>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(;mf&&(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;dl&&(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;cb[c]&&(b[c]=1);for(c=1;cb;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