forked from caleb531/jcanvas
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjcanvas.min.js
35 lines (35 loc) · 14.6 KB
/
jcanvas.min.js
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
/*
jCanvas v5.5b
Copyright 2012, Caleb Evans
Licensed under the MIT license
*/
(function(b,O,R,N,aa,z,E,a,u){function w(){}function B(d){d?v(P,d):P=v(w.prototype,K);return this}function C(d,c){d.fillStyle=c.fillStyle;d.strokeStyle=c.strokeStyle;d.lineWidth=c.strokeWidth;c.rounded?(d.lineCap="round",d.lineJoin="round"):(d.lineCap=c.strokeCap,d.lineJoin=c.strokeJoin,d.miterLimit=c.miterLimit);d.shadowOffsetX=c.shadowX;d.shadowOffsetY=c.shadowY;d.shadowBlur=c.shadowBlur;d.shadowColor=c.shadowColor;d.globalAlpha=c.opacity;d.globalCompositeOperation=c.compositing}function s(d){return d&&
d.getContext?d.getContext("2d"):a}function H(d,c){c.mask&&(c.autosave&&d.save(),d.clip());c.closed?(d.closePath(),d.fill(),d.stroke()):(d.fill(),d.stroke(),d.closePath())}function S(d,c){if(!c.translateX&&!c.translateY&&(c.x||c.y))c.translateX=c.x,c.translateY=c.y;c.translate&&(c.translateX=c.translateY=c.translate);d.translate(c.translateX,c.translateY)}function T(d,c){1!==c.scale&&(c.scaleX=c.scaleY=c.scale);d.translate(c.x,c.y);d.scale(c.scaleX,c.scaleY);d.translate(-c.x,-c.y)}function U(d,c){c.toRad=
c.inDegrees?A/180:1;c.rotate=c.rotate||c.angle;d.translate(c.x,c.y);d.rotate(c.rotate*c.toRad);d.translate(-c.x,-c.y)}function G(d,c,h,b,y){h.toRad=h.inDegrees?A/180:1;c.save();y=y||b;!d&&!h.fromCenter&&(h.x+=b/2,h.y+=y/2);(h.rotate||h.angle)&&U(c,h);(1!==h.scale||1!==h.scaleX||1!==h.scaleY)&&T(c,h);(h.translate||h.translateX||h.translateY)&&S(c,h)}function V(d,c,h){h&&h.visible&&(h.method===b.fn.draw?h.fn.call(d[0],c):h.method&&h.method.call(d,h))}function D(d,c,h){var a,y,p,m="function"===typeof c,
c=c||{};if(c.layer&&!c._layer){a=b(d);y=a.getLayers();m&&(c={method:b.fn.draw,fn:c,name:c.name,group:c.group,visible:c.visible});c=v(new w,c);if(!m)for(p in c.method=b.fn[c.method]||h,c.method!==b.fn.drawImage&&(c.width=c.width||0,c.height=c.height||0),B.events)B.events.hasOwnProperty(p)&&c[p]&&(b.data(d,"jCanvas-"+p)||B.events[p].call(b,a),c._event=z);c.layer=z;c._layer=z;c.index===u&&(c.index=y.length);y.splice(c.index,0,c)}}function W(d){var c;for(c=0;c<I.length;c+=1)d[I[c]]=d["_"+I[c]]}function X(d){var c;
for(c=0;c<I.length;c+=1)d["_"+I[c]]=d[I[c]]}function Y(d){var c,h,a=[],y=1;d.match(/^#?[a-z0-9]+$/i)&&(h=O.head,c=h.style.color,h.style.color=d,d=b.css(h,"color"),h.style.color=c);d.match(/^rgb/i)&&(a=d.match(/[0-9]+/gi),d.match(/%/gi)&&(y=2.55),a[0]*=y,a[1]*=y,a[2]*=y);return a}function ca(d){var c;"object"!==typeof d.start&&(d.start=Y(d.start),d.end=Y(d.end));d.now=[];for(c=0;3>c;c+=1)d.now[c]=L(d.start[c]+(d.end[c]-d.start[c])*d.pos);d.now="rgb("+d.now.join(",")+")";d.elem.style?d.elem.style[d.prop]=
d.now:d.elem[d.prop]=d.now}function Z(d){var c=b.data(d,"eventCache");c||(c=b.data(d,"eventCache",{x:[],y:[]}));return c}function J(d){B.events[d]=function(c){var h="mouseover"===d||"mouseout"===d?"mousemove":d;c.bind(h+".jCanvas",function(d){var b=Z(c[0]);b.x[1]=b.x[0];b.y[1]=b.y[0];b.x[0]=d.offsetX;b.y[0]=d.offsetY;b.type=h;c.drawLayers()});b.data(c[0],"jCanvas-"+d,z)}}function F(d,c,h){var a=b.data(d,"eventCache"),y,p,m;y=h[a.type];p=c.isPointInPath(a.x[0],a.y[0]);m=c.isPointInPath(a.x[1],a.y[1]);
h.mouseX=a.x[0];h.mouseY=a.y[0];if(h.mouseover||h.mouseout)p&&!m&&!h._fired?(h._fired=z,h.mouseover&&(h.mouseover.call(d,h),C(c,h))):!p&&(m&&h._fired)&&(h._fired=E,h.mouseout&&(h.mouseout.call(d,h),C(c,h)));y&&p&&(y.call(d,h),C(c,h))}var K,P,v=b.extend,L=N.round,A=N.PI,$=N.sin,Q=N.cos,da=b.event.fix,M={},I;b.fn.jCanvas=B;B.version="5.5b";B.events={};K={angle:0,align:"center",autosave:z,baseline:"middle",ccw:E,closed:E,compositing:"source-over",cornerRadius:0,cropFromCenter:z,each:a,end:360,fillStyle:"transparent",
font:"12pt sans-serif",fromCenter:z,height:a,inDegrees:z,load:a,mask:E,miterLimit:10,opacity:1,projection:0,r1:a,r2:a,radius:0,repeat:"repeat",rotate:0,rounded:E,scale:1,scaleX:1,scaleY:1,shadowBlur:0,shadowColor:"transparent",shadowX:0,shadowY:0,sHeight:a,sides:3,source:"",start:0,strokeCap:"butt",strokeJoin:"miter",strokeStyle:"transparent",strokeWidth:1,sWidth:a,sx:a,sy:a,text:"",translate:0,translateX:0,translateY:0,visible:z,width:a,x:0,y:0};B();B.extend=function(d){K=v(K,d.props);B();d.name&&
(b.fn[d.name]=function(c){var h,b,a=v(new w,c);for(h=0;h<this.length;h+=1)if(c=this[h],b=s(c))C(b,a),d.fn.call(c,b,a);return this});return b.fn[d.name]};b.fn.loadCanvas=function(){return s(this[0])};b.fn.draw=function(d){var c,h;d&&!d.fn&&(d={fn:d});v(new w,d);for(c=0;c<this.length;c+=1)(h=s(this[c]))&&d.fn.call(this[c],h);return this};b.fn.clearCanvas=function(d){for(var c,h=v(new w,d),d=0;d<this.length;d+=1)if(c=s(this[d]))G(d,c,h,h.width,h.height),!h.x&&!h.y&&!h.width&&!h.height?c.clearRect(0,
0,this[d].width,this[d].height):c.clearRect(h.x-h.width/2,h.y-h.height/2,h.width,h.height);return this};b.fn.saveCanvas=function(){var d,c;for(d=0;d<this.length;d+=1)(c=s(this[d]))&&c.save();return this};b.fn.restoreCanvas=function(){var d,c;for(d=0;d<this.length;d+=1)(c=s(this[d]))&&c.restore();return this};b.fn.translateCanvas=function(d){for(var c,h=v(new w,d),d=0;d<this.length;d+=1)if(c=s(this[d]))h.autosave&&c.save(),S(c,h);return this};b.fn.scaleCanvas=function(d){for(var c,h=v(new w,d),d=0;d<
this.length;d+=1)if(c=s(this[d]))h.autosave&&c.save(),T(c,h);return this};b.fn.rotateCanvas=function(d){for(var c,h=v(new w,d),d=0;d<this.length;d+=1)if(c=s(this[d]))h.autosave&&c.save(),U(c,h);return this};b.fn.drawRect=function c(h){var b,a,p=v(new w,h),m,n,o,r,i;for(b=0;b<this.length;b+=1)if(a=s(this[b]))D(this[b],h,c),C(a,p),G(b,a,p,p.width,p.height),a.beginPath(),m=p.x-p.width/2,n=p.y-p.height/2,(i=p.cornerRadius)?(p.closed=z,o=p.x+p.width/2,r=p.y+p.height/2,0>o-m-2*i&&(i=(o-m)/2),0>r-n-2*i&&
(i=(r-n)/2),a.moveTo(m+i,n),a.lineTo(o-i,n),a.arc(o-i,n+i,i,3*A/2,2*A,E),a.lineTo(o,r-i),a.arc(o-i,r-i,i,0,A/2,E),a.lineTo(m+i,r),a.arc(m+i,r-i,i,A/2,A,E),a.lineTo(m,n+i),a.arc(m+i,n+i,i,A,3*A/2,E)):a.rect(m,n,p.width,p.height),a.restore(),p._event&&F(this[b],a,h),H(a,p);return this};b.fn.drawArc=function h(a){var b,p,m=v(new w,a);!m.inDegrees&&360===m.end&&(m.end=2*A);for(b=0;b<this.length;b+=1)if(p=s(this[b]))D(this[b],a,h),C(p,m),G(b,p,m,2*m.radius),p.beginPath(),p.arc(m.x,m.y,m.radius,m.start*
m.toRad-A/2,m.end*m.toRad-A/2,m.ccw),p.restore(),m._event&&F(this[b],p,a),H(p,m);return this};b.fn.drawEllipse=function ba(b){var a,m,n=v(new w,b),o=4*n.width/3,r=n.height;for(a=0;a<this.length;a+=1)if(m=s(this[a]))D(this[a],b,ba),C(m,n),G(a,m,n,n.width,n.height),m.beginPath(),m.moveTo(n.x,n.y-r/2),m.bezierCurveTo(n.x-o/2,n.y-r/2,n.x-o/2,n.y+r/2,n.x,n.y+r/2),m.bezierCurveTo(n.x+o/2,n.y+r/2,n.x+o/2,n.y-r/2,n.x,n.y-r/2),m.restore(),n._event&&F(this[a],m,b),H(m,n);return this};b.fn.drawPolygon=function y(a){var b,
n,o=v(new w,a),r=2*A/o.sides,i=A/o.sides,e=i+A/2,j=o.radius*Q(r/2),k,l,g;o.closed=z;for(b=0;b<this.length;b+=1)if(n=s(this[b])){D(this[b],a,y);C(n,o);G(b,n,o,2*o.radius);n.beginPath();for(g=0;g<o.sides;g+=1)k=o.x+L(o.radius*Q(e)),l=o.y+L(o.radius*$(e)),n.lineTo(k,l),o.projection&&(k=o.x+L((j+j*o.projection)*Q(e+i)),l=o.y+L((j+j*o.projection)*$(e+i)),n.lineTo(k,l)),e+=r;n.restore();o._event&&F(this[b],n,a);H(n,o)}return this};b.fn.drawLine=function p(b){var a,o,r=v(new w,b),i,e,j;for(a=0;a<this.length;a+=
1)if(o=s(this[a])){D(this[a],b,p);C(o,r);i=1;for(o.beginPath();z;)if(e=r["x"+i],j=r["y"+i],e!==u&&j!==u)o.lineTo(e,j),i+=1;else break;r._event&&F(this[a],o,b);H(o,r)}return this};b.fn.drawQuad=function m(a){var b,r,i=v(new w,a),e,j,k,l,g;for(b=0;b<this.length;b+=1)if(r=s(this[b])){D(this[b],a,m);C(r,i);e=2;r.beginPath();for(r.moveTo(i.x1,i.y1);z;)if(j=i["x"+e],k=i["y"+e],l=i["cx"+(e-1)],g=i["cy"+(e-1)],j!==u&&k!==u&&l!==u&&g!==u)r.quadraticCurveTo(l,g,j,k),e+=1;else break;i._event&&F(this[b],r,a);
H(r,i)}return this};b.fn.drawBezier=function n(b){var a,i,e=v(new w,b),j,k,l,g,f,q,t,x;for(a=0;a<this.length;a+=1)if(i=s(this[a])){D(this[a],b,n);C(i,e);j=2;k=1;i.beginPath();for(i.moveTo(e.x1,e.y1);z;)if(l=e["x"+j],g=e["y"+j],f=e["cx"+k],q=e["cy"+k],t=e["cx"+(k+1)],x=e["cy"+(k+1)],l!==u&&g!==u&&f!==u&&q!==u&&t!==u&&x!==u)i.bezierCurveTo(f,q,t,x,l,g),j+=1,k+=2;else break;e._event&&F(this[a],i,b);H(i,e)}return this};b.fn.drawText=function o(a){var i,e,j=v(new w,a);for(i=0;i<this.length;i+=1)if(b(this[i]),
e=s(this[i])){D(this[i],a,o);C(e,j);e.textBaseline=j.baseline;e.textAlign=j.align;e.font=j.font;var k=this[i],l=e,g=j,f=void 0,q=void 0,t=/\b(\d*\.?\d*)\w\w\b/gi;if(M.text===g.text&&M.font===g.font)g.width=M.width,g.height=M.height;else{g.width=l.measureText(g.text).width;f=k.style.fontSize;if(q=g.font.match(t))k.style.fontSize=g.font.match(t)[0];g.height=aa(b.css(k,"fontSize"));k.style.fontSize=f}G(i,e,j,j.width,j.height);e.strokeText(j.text,j.x,j.y);e.fillText(j.text,j.x,j.y);j._event?(e.beginPath(),
e.rect(j.x-j.width/2,j.y-j.height/2,j.width,j.height),e.restore(),F(this[i],e,a),e.closePath()):e.restore()}M=j;return this};b.fn.drawImage=function r(i){function e(e,g,k){return function(){g||((x=q.width/q.height,f.width===a&&f.sWidth===a&&(i.width=f.width=f.sWidth=q.width),f.height===a&&f.sHeight===a&&(i.height=f.height=f.sHeight=q.height),f.width===a&&f.sWidth!==a&&(f.width=f.sWidth),f.height===a&&f.sHeight!==a&&(f.height=f.sHeight),f.sWidth===a&&f.width!==a&&(i.sWidth=f.sWidth=q.width),f.sHeight===
a&&f.height!==a&&(i.sHeight=f.sHeight=q.height),f.sx===a&&(f.sx=f.cropFromCenter?q.width/2:0),f.sy===a&&(f.sy=f.cropFromCenter?q.height/2:0),f.cropFromCenter||(f.sx+=f.sWidth/2,f.sy+=f.sHeight/2),f.sx+f.sWidth/2>q.width&&(f.sx=q.width-f.sWidth/2),0>f.sx-f.sWidth/2&&(f.sx=f.sWidth/2),0>f.sy-f.sHeight/2&&(f.sy=f.sHeight/2),f.sy+f.sHeight/2>q.height&&(f.sy=q.height-f.sHeight/2),f.width!==a&&f.height===a)?i.height=f.height=f.width/x:f.width===a&&f.height!==a?i.width=f.width=f.height*x:f.width===a&&f.height===
a&&(i.width=f.width=q.width,i.height=f.height=q.height));k.drawImage(q,f.sx-f.sWidth/2,f.sy-f.sHeight/2,f.sWidth,f.sHeight,f.x-f.width/2,f.y-f.height/2,f.width,f.height);f._event?(k.beginPath(),k.rect(f.x-f.width/2,f.y-f.height/2,f.width,f.height),k.restore(),F(b[g],k,i),k.closePath()):k.restore();f.load&&f.load.call(e,i)}}var b=this,k,l,g,f=v(new w,i),q,t,x;t=f.source.getContext;f.source.src||t?(q=f.source,f.width=q.width,f.height=q.height):f.source&&(q=new R,q.src=f.source);for(l=0;l<b.length;l+=
1)if(k=b[l],g=s(b[l]))D(b[l],i,r),C(g,f),G(l,g,f,f.width,f.height),q&&(q.complete||t?e(k,l,g)():(q.onload=e(k,l,g),q.src=q.src));return b};b.fn.pattern=function(b){function i(){g=j.createPattern(l,k.repeat);k.load&&k.load.call(e[0],g)}var e=this,j,k=v(new w,b),l,g;(j=s(e[0]))?"function"===typeof k.source?(l=O.createElement("canvas"),l.width=k.width,l.height=k.height,b=s(l),k.source.call(l,b),i()):(b=k.source.getContext,k.source.src||b?l=k.source:(l=new R,l.src=k.source),l.complete||b?i():l.onload=
i):g=a;return g};b.fn.gradient=function(b){var i,b=v(new w,b),e=[],j,k,l,g,f,q,t;if(i=s(this[0])){i=b.r1!==a||b.r2!==a?i.createRadialGradient(b.x1,b.y1,b.r1,b.x2,b.y2,b.r2):i.createLinearGradient(b.x1,b.y1,b.x2,b.y2);for(g=1;b["c"+g]!==u;g+=1)b["s"+g]!==u?e.push(b["s"+g]):e.push(a);j=e.length;e[0]===a&&(e[0]=0);e[j-1]===a&&(e[j-1]=1);for(g=0;g<j;g+=1){if(e[g]!==a){q=1;t=0;k=e[g];for(f=g+1;f<j;f+=1)if(e[f]!==a){l=e[f];break}else q+=1;k>l&&(e[f]=e[g])}else e[g]===a&&(t+=1,e[g]=k+t*((l-k)/q));i.addColorStop(e[g],
b["c"+(g+1)])}}else i=a;return i};b.fn.setPixels=function i(b){var j,k,l,g=v(new w,b),f={},q,t,x,u;for(k=0;k<this.length;k+=1)if(j=this[k],l=s(j)){D(this[k],b,i);G(k,l,g,g.width,g.height);!g.x&&(!g.y&&!g.width&&!g.height)&&(g.width=j.width,g.height=j.height,g.x=g.width/2,g.y=g.height/2);q=l.getImageData(g.x-g.width/2,g.y-g.height/2,g.width,g.height);t=q.data;u=t.length;f=[];if(g.each!==a)for(x=0;x<u;x+=4)f.r=t[x],f.g=t[x+1],f.b=t[x+2],f.a=t[x+3],g.each.call(j,f),t[x]=f.r,t[x+1]=f.g,t[x+2]=f.b,t[x+
3]=f.a;l.putImageData(q,g.x-g.width/2,g.y-g.height/2);l.restore()}return this};b.fn.getCanvasImage=function(b,e){var j=this[0];return j&&j.toDataURL?j.toDataURL("image/"+b,e):a};b.fn.getLayers=function(){var i=this[0],e;!i||!i.getContext?e=[]:(e=b.data(i,"jCanvas-layers"),e||(e=[],b.data(i,"jCanvas-layers",e)));return e};b.fn.getLayer=function(b){var e=this.getLayers(),a;if(!b||!b.layer){if("string"===typeof b)for(a=0;a<e.length;a+=1)if(e[a].index=a,e[a].name===b){b=a;break}b=e[b||0]}return b};b.fn.getLayerGroup=
function(b){var a=this.getLayers(),j=[],k;for(k=0;k<a.length;k+=1)a[k].group===b&&j.push(a[k]);return j};b.fn.drawLayer=function(a){var e,j,k,l;for(e=0;e<this.length;e+=1)k=b(this[e]),j=s(this[e]),l=k.getLayer(a),V(k,j,l)};b.fn.drawLayers=function(){var a,e,j,k,l,g;for(e=0;e<this.length;e+=1)if(a=b(this[e]),j=s(this[e])){j.clearRect(0,0,this[e].width,this[e].height);k=a.getLayers();for(g=0;g<k.length;g+=1)l=k[g],V(a,j,l)}return this};b.fn.addLayer=function(b){var a,j,b=b||{};for(a=0;a<this.length;a+=
1)if(j=s(this[a]))b.layer=z,D(this[a],b);return this};b.fn.removeLayers=function(){var a,e;for(e=0;e<this.length;e+=1)a=b(this[e]).getLayers(),a.length=0;return this};b.fn.removeLayer=function(a){var e,j,k;for(e=0;e<this.length;e+=1){j=b(this[e]).getLayers();if("string"===typeof a)for(k=0;k<j.length;k+=1)if(j[k].name===a){a=k;break}j.splice(a,1)}return this};I=["width","height","opacity"];b.fn.animateLayer=function(){function i(b,a){return function(){W(a);b.drawLayers();g[4]&&g[4].call(b)}}function e(b,
a){return function(e,f){W(a);b.drawLayers();g[5]&&g[5].call(b,e,f)}}var j,k,l,g=[].slice.call(arguments,0),f;"object"===typeof g[0]&&!g[0].layer&&g.unshift(0);"object"===typeof g[2]?(g.splice(2,0,g[2].duration||a),g.splice(3,0,g[3].easing||a),g.splice(4,0,g[4].complete||a),g.splice(5,0,g[5].step||a)):(g[2]===u?(g.splice(2,0,a),g.splice(3,0,a),g.splice(4,0,a)):"function"===typeof g[2]&&(g.splice(2,0,a),g.splice(3,0,a)),g[3]===u)?(g[3]=a,g.splice(4,0,a)):"function"===typeof g[3]&&g.splice(3,0,a);for(k=
0;k<this.length;k+=1)if(j=b(this[k]),l=s(this[k]))if((l=j.getLayer(g[0]))&&l.method!==b.fn.draw)X(l),X(g[1]),f=Z(this[k]),f.x=[],f.y=[],b(l).animate(g[1],{duration:g[2],easing:b.easing[g[3]]?g[3]:a,complete:i(j,l),step:e(j,l)});return this};b.fn.delayLayer=function(a,e){var j,k;for(j=0;j<this.length;j+=1)k=b(this[j]).getLayer(a),b(k).delay(e);return this};b.fn.stopLayer=function(a,e){var j,k;for(j=0;j<this.length;j+=1)k=b(this[j]).getLayer(a),b(k).stop(e);return this};(function(a){var e;for(e=0;e<
a.length;e+=1)b.fx.step[a[e]]=ca})("color backgroundColor borderColor borderTopColor borderRightColor borderBottomColor borderLeftColor fillStyle outlineColor strokeStyle shadowColor".split(" "));J("click");J("dblclick");J("mousedown");J("mouseup");J("mousemove");J("mouseover");J("mouseout");b.event.fix=function(a){var e,a=da.call(b.event,a);if(a.pageX!==u&&a.offsetX===u&&(e=b(a.target).offset()))a.offsetX=a.pageX-e.left,a.offsetY=a.pageY-e.top;return a};b.support.canvas=O.createElement("canvas").getContext!==
u;B.defaults=K;B.prefs=P;b.jCanvas=B})(jQuery,document,Image,Math,parseFloat,!0,!1,null);