-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOC.min.js
1 lines (1 loc) · 16.2 KB
/
OC.min.js
1
(function(){window.OC||(window.OC={},OC.defaultContext=null,OC.setDefaultContext=function(t){this.defaultContext=t},OC.BoundingRect=function(t,e,i,s){this.x=t||0,this.y=e||0,this.w=i||0,this.h=s||0},OC.Object=function(){this.translateX=0,this.translateY=0,this.rotate=0,this.shadowOffsetX=0,this.shadowOffsetY=0,this.shadowBlur=0,this.shadowColor="rgba(0,0,0,0)",this.fillStyle="#eee",this.strokeStyle="#999",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.lineDash=null,this.opacity=1,this.clip=null,this.boundColor="#f00"},OC.Object.prototype.setFillStyle=function(t){return this.fillStyle=t,this},OC.Object.prototype.setStrokeStyle=function(t){return this.strokeStyle=t,this},OC.Object.prototype.setLineWidth=function(t){return this.lineWidth=t,this},OC.Object.prototype.setLineJoin=function(t){return this.lineJoin=t,this},OC.Object.prototype.setLineCap=function(t){return this.lineCap=t,this},OC.Object.prototype.setScaleX=function(t){return this.scaleX=t,this},OC.Object.prototype.setScaleY=function(t){return this.scaleY=t,this},OC.Object.prototype.setTranslateX=function(t){return this.translateX=t,this},OC.Object.prototype.setTranslateY=function(t){return this.translateY=t,this},OC.Object.prototype.setRotate=function(t){return this.rotate=t,this},OC.Object.prototype.setRotateDeg=function(t){return this.rotate=t/180*Math.PI,this},OC.Object.prototype.setShadowOffsetX=function(t){return this.shadowOffsetX=t,this},OC.Object.prototype.setShadowOffsetY=function(t){return this.shadowOffsetY=t,this},OC.Object.prototype.setShadowOffset=function(t,e){return this.setShadowOffsetX(t).setShadowOffsetY(e)},OC.Object.prototype.setShadowColor=function(t){return this.shadowColor=t,this},OC.Object.prototype.setShadowBlur=function(t){return this.shadowBlur=t,this},OC.Object.prototype.setOpacity=function(t){return this.opacity=t,this},OC.Object.prototype.setLineDash=function(t){return this.lineDashOffset=t,this},OC.Object.prototype.setClip=function(t){return this.clip=t,this},OC.Object.prototype.setScale=function(t,e){return this.setScaleX(t).setScaleY(e)},OC.Object.prototype.setTranslate=function(t,e){return this.setTranslateX(t).setTranslateY(e)},OC.Object.prototype.setShadowOffset=function(t,e){return this.setShadowOffsetX(t).setShadowOffsetY(e)},OC.Object.prototype.translate=function(t,e){return this.translateX+=t,this.translateY+=e,this},OC.Object.prototype.translateShadow=function(t,e){return this.shadowOffsetX+=t,this.shadowOffsetY+=e,this},OC.Object.prototype.rotateRad=function(t){return this.rotate+=t,this},OC.Object.prototype.rotateDeg=function(t){return this.rotate+=t/180*Math.PI,this},OC.Object.prototype.setShadow=function(t,e,i,s){return this.setShadowOffset(t,e).setShadowBlur(i).setShadowColor(s)},OC.Object.prototype.fix=function(t,e){if(t=t||OC.defaultContext,t.save(),t.beginPath(),this.clip){t.globalAlpha=this.clip.opacity;var i=this.clip.translateX+(this.clip.x||0),s=this.clip.translateY+(this.clip.y||0);t.translate(i,s),t.scale(this.clip.scaleX,this.clip.scaleY),t.rotate(this.clip.rotate),this.clip.path(t),t.clip(),t.beginPath(),t.rotate(-this.clip.rotate),t.scale(1/this.clip.scaleX,1/this.clip.scaleY),t.translate(-i,-s)}return t.globalAlpha=this.opacity,t.translate(this.translateX+(this.x||0),this.translateY+(this.y||0)),t.scale(this.scaleX,this.scaleY),t.rotate(this.rotate),this.path&&this.path(t),e.call(this,t),t.restore(),this},OC.Object.prototype.path=function(t){t.moveTo(0,0),t.lineTo(0,0)},OC.Object.prototype.fill=function(t){return this.fix(t,function(t){t.fillStyle=this.fillStyle,"none"!==this.shadowColor.toLowerCase()&&(t.shadowColor=this.shadowColor,t.shadowBlur=this.shadowBlur,t.shadowOffsetX=this.shadowOffsetX,t.shadowOffsetY=this.shadowOffsetY),t.fill()}),this},OC.Object.prototype.stroke=function(t){return this.fix(t,function(t){t.strokeStyle=this.strokeStyle,t.lineWidth=this.lineWidth,t.lineCap=this.lineCap,t.lineJoin=this.lineJoin,this.lineDash&&t.setLineDash(this.lineDash),t.stroke()}),this},OC.Object.prototype.draw=function(t){return this.fill(t).stroke(t)},OC.Object.prototype.set=function(t){for(var e in t)e in this&&(this[e]=t[e]);return this},OC.Object.prototype.isPointInPath=function(t,e){var i=document.createElement("canvas"),s=i.getContext("2d"),o=this.getBoundingRect(),n=this.fillStyle,h=this.strokeStyle,r=this.opacity;return i.width=o.w,i.height=o.h,s.translate(-o.x,-o.y),this.fillStyle="#000",this.strokeStyle="#000",this.opacity=1,this.draw(s),this.fillStyle=n,this.strokeStyle=h,this.opacity=r,s.getImageData(t-o.x,e-o.y,1,1).data[3]>0},OC.Object.prototype.getBoundingRect=function(){return new OC.BoundingRect},OC.Object.prototype.drawBoundingRect=function(t){t=t||OC.defaultContext;var e=this.getBoundingRect();return t.save(),t.strokeStyle=this.boundColor,t.strokeRect(e.x,e.y,e.w,e.h),t.restore(),this},OC.Shape=function(t,e){OC.Object.call(this),this.x=t||0,this.y=e||0,this.scaleX=1,this.scaleY=1},OC.Shape.prototype=new OC.Object,OC.Shape.prototype.setX=function(t){return this.x=t,this},OC.Shape.prototype.setY=function(t){return this.y=t,this},OC.Shape.prototype.setPos=function(t,e){return this.setX(t).setY(e)},OC.Rect=function(t,e,i,s){OC.Shape.call(this,t,e),this.w=i||0,this.h=s||0},OC.Rect.prototype=new OC.Shape,OC.Rect.prototype.setW=function(t){return this.w=t,this},OC.Rect.prototype.setH=function(t){return this.h=t,this},OC.Rect.prototype.path=function(t){t.rect(0,0,this.w,this.h)},OC.Rect.prototype.getBoundingRect=function(){var t=this.x,e=this.y,i=this.w,s=this.h,o=this.rotate;if(o%360!==0){var n=Math.sqrt(i*i+s*s),h=[t,t-s*Math.sin(o),t+i*Math.cos(o),t+n*Math.cos(o+Math.atan(s/i))],r=Math.min.apply(Math,h),a=Math.max.apply(Math,h),c=[e,e+s*Math.cos(o),e+i*Math.sin(o),e+n*Math.sin(o+Math.atan(s/i))],p=Math.min.apply(Math,c),u=Math.max.apply(Math,c);t=r,e=p,i=a-r,s=u-p}return new OC.BoundingRect(t+this.translateX,e+this.translateY,i*this.scaleX,s*this.scaleY)},OC.Circle=function(t,e,i){OC.Shape.call(this,t,e),this.r=i||0},OC.Circle.prototype=new OC.Shape,OC.Circle.prototype.setR=function(t){return this.r=t,this},OC.Circle.prototype.path=function(t){t.arc(0,0,this.r,0,2*Math.PI)},OC.Circle.prototype.getBoundingRect=function(){return new OC.BoundingRect(this.x+this.translateX-this.r*this.scaleX,this.y+this.translateY-this.r*this.scaleY,2*this.r*this.scaleX,2*this.r*this.scaleY)},OC.Arc=function(t,e,i,s,o,n){OC.Circle.call(this,t,e,i),this.start=s||0,this.end=o||0,this.anticlockwise=n||!1},OC.Arc.prototype=new OC.Circle,OC.Arc.prototype.setStart=function(t){return this.start=t,this},OC.Arc.prototype.setEnd=function(t){return this.end=t,this},OC.Arc.prototype.setAnticlockwise=function(t){return this.anticlockwise=t,this},OC.Arc.prototype.path=function(t){t.arc(0,0,this.r,this.start,this.end,this.anticlockwise)},OC.RoundRect=function(t,e,i,s,o){OC.Rect.call(this,t,e,i,s),this.r=o||2},OC.RoundRect.prototype=new OC.Rect,OC.RoundRect.prototype.setR=function(t){return this.r=t,this},OC.RoundRect.prototype.path=function(t){var e=this.w,i=this.h,s=(this.x,this.y,this.r),o=Math.min(e,i)/2;Math.abs(s)>o&&(s=s>0?o:-o),s>=0?(t.moveTo(s,0),t.lineTo(e-s,0),t.arcTo(e,0,e,s,s),t.lineTo(e,i-s),t.arcTo(e,i,e-s,i,s),t.lineTo(s,i),t.arcTo(0,i,0,i-s,s),t.lineTo(0,s),t.arcTo(0,0,s,0,s)):(t.moveTo(-s,0),t.lineTo(e+s,0),t.arcTo(e+s,-s,e,-s,-s),t.lineTo(e,i+s),t.arcTo(e+s,i+s,e+s,i,-s),t.lineTo(-s,i),t.arcTo(-s,i+s,0,i+s,-s),t.lineTo(0,-s),t.arcTo(-s,-s,-s,0,-s))},OC.Star=function(t,e,i,s,o){OC.Shape.call(this,t,e),this.innerRadius=i||0,this.outerRadius=s||0,this.count=void 0===o?5:o},OC.Star.prototype=new OC.Shape,OC.Star.prototype.setInnerRadius=function(t){return this.innerRadius=t,this},OC.Star.prototype.setOuterRadius=function(t){return this.outerRadius=t,this},OC.Star.prototype.setCount=function(t){return this.count=t,this},OC.Star.prototype.path=function(t){var e=this.innerRadius,i=this.outerRadius,s=Math.sin,o=Math.cos,n=Math.PI,h=this.count,r=360/h;t.moveTo(0,-i);for(var a=0;a<h;a++)t.lineTo(e*s((r/2+a*r)/180*n),-e*o((r/2+a*r)/180*n)),t.lineTo(i*s((r+a*r)/180*n),-i*o((r+a*r)/180*n));t.lineTo(e*s((360-r/2)/180*n),-e*o((360-r/2)/180*n))},OC.Star.prototype.getBoundingRect=function(){return OC.Circle.prototype.getBoundingRect.call({x:this.x,y:this.y,scaleX:this.scaleX,scaleY:this.scaleY,translateX:this.translateX,translateY:this.translateY,r:this.outerRadius})},OC.Text=function(t,e,i,s,o,n,h){OC.RoundRect.call(this,i,s,o,n,h),this.text=t||"",this.font=e||"bold 50px 楷体",this.baseline="middle",this.align="center",this.textShadowOffsetX=0,this.textShadowOffsetY=0,this.textShadowBlur=0,this.textShadowColor="rgba(0,0,0,0)",this.textFillStyle="#eee",this.textStrokeStyle="#999",this.textLineWidth=1,this.textLineDashOffset=0,this.textOpacity=1,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0,this.paddingLeft=0},OC.Text.prototype=new OC.RoundRect,OC.Text.prototype.setText=function(t){return this.text=t,this},OC.Text.prototype.setTextOpacity=function(t){return this.textOpacity=t,this},OC.Text.prototype.setFont=function(t){return this.font=t,this},OC.Text.prototype.setBaseline=function(t){return this.baseline=t,this},OC.Text.prototype.setAlign=function(t){return this.align=t,this},OC.Text.prototype.setTextFillStyle=function(t){return this.textFillStyle=t,this},OC.Text.prototype.setTextStrokeStyle=function(t){return this.textStrokeStyle=t,this},OC.Text.prototype.setTextLineWidth=function(t){return this.textLineWidth=t,this},OC.Text.prototype.setTextLineDashOffset=function(t){return this.textLineDashOffset=t,this},OC.Text.prototype.setTextShadowColor=function(t){return this.textShadowColor=t,this},OC.Text.prototype.setTextShadowBlur=function(t){return this.textShadowBlur=t,this},OC.Text.prototype.setTextShadowOffsetX=function(t){return this.textShadowOffsetX=t,this},OC.Text.prototype.setTextShadowOffsetY=function(t){return this.textShadowOffsetY=t,this},OC.Text.prototype.setTextShadowOffset=function(t,e){return this.setTextShadowOffsetX(t).setTextShadowOffsetY(e)},OC.Text.prototype.setTextShadow=function(t,e,i,s){return this.setTextShadowOffset(t,e).setTextShadowBlur(i).setTextShadowColor(s)},OC.Text.prototype.setPaddingTop=function(t){return this.paddingTop=t,this},OC.Text.prototype.setPaddingLeft=function(t){return this.paddingLeft=t,this},OC.Text.prototype.setPaddingBottom=function(t){return this.paddingBottom=t,this},OC.Text.prototype.setPaddingRight=function(t){return this.paddingRight=t,this},OC.Text.prototype.setPadding=function(t,e,i,s){return e=e||t,i=i||t,s=s||e,this.setPaddingTop(t).setPaddingRight(e).setPaddingBottom(i).setPaddingLeft(s)},OC.Text.prototype.calc=function(){var t=this.w/2,e=this.h/2,i=this.align.toLowerCase(),s=this.baseline.toLowerCase();return"left"===i?(t-=this.w/2,t+=this.paddingLeft):"right"===i&&(t+=this.w/2,t-=this.paddingRight),"top"===s?(e+=this.h/2,e+=this.paddingBottom,s="bottom"):"bottom"===s&&(e-=this.h/2,e-=this.paddingTop,s="top"),{x:t,y:e,baseline:s}},OC.Text.prototype.fillText=function(t){return this.fix(t,function(t){t.font=this.font,t.globalAlpha=this.textOpacity,t.fillStyle=this.textFillStyle,"none"!==this.textShadowColor.toLowerCase()&&(t.shadowColor=this.textShadowColor,t.shadowBlur=this.textShadowBlur,t.shadowOffsetX=this.textShadowOffsetX,t.shadowOffsetY=this.textShadowOffsetY);var e=this.calc();t.textAlign=this.align,t.textBaseline=e.baseline,t.fillText(this.text,e.x,e.y)}),this},OC.Text.prototype.strokeText=function(t){return this.fix(t,function(t){t.font=this.font,t.globalAlpha=this.textOpacity,t.strokeStyle=this.textStrokeStyle,t.lineWidth=this.textLineWidth,t.lineDashOffset=this.textLineDashOffset;var e=this.calc();t.textAlign=this.align,t.textBaseline=e.baseline,t.strokeText(this.text,e.x,e.y)}),this},OC.Text.prototype.drawText=function(t){return this.fillText(t).strokeText(t)},OC.Text.prototype.fill=function(t){return OC.RoundRect.prototype.fill.call(this,t),this.fillText(t)},OC.Text.prototype.stroke=function(t){return OC.RoundRect.prototype.stroke.call(this,t),this.strokeText(t)},OC.Text.prototype.draw=function(t){return OC.RoundRect.prototype.draw.call(this,t),this.drawText(t)},OC.Polygon=function(t){OC.Object.call(this),this.points=t||[]},OC.Polygon.prototype=new OC.Object,OC.Polygon.prototype.path=function(t){this.points.forEach(function(e,i){0===i?t.moveTo(e.x,e.y):t.lineTo(e.x,e.y)})},OC.Polygon.prototype.getBoundingRect=function(){var t,e,i,s;return this.points.forEach(function(t,e){0===e?(x=t.x,y=t.y):(x=Math.max(x,t.x),y=Math.max(y,t.y))}),new OC.BoundingRect(e+this.translateX,s+this.translateY,(t-e)*this.scaleX,(i-s)*this.scaleY)},OC.Line=function(t,e,i,s){OC.Object.call(this),this.x1=t||0,this.y1=e||0,this.x2=i||0,this.y2=s||0},OC.Line.prototype=new OC.Object,OC.Line.prototype.setX1=function(t){return this.x1=t,this},OC.Line.prototype.setY1=function(t){return this.y1=t,this},OC.Line.prototype.setX2=function(t){return this.x2=t,this},OC.Line.prototype.setY2=function(t){return this.y2=t,this},OC.Line.prototype.setPoint1=function(t,e){return this.setX1(t).setY1(e)},OC.Line.prototype.setPoint2=function(t,e){return this.setX2(t).setY2(e)},OC.Line.prototype.path=function(t){t.moveTo(this.x1,this.y1),t.lineTo(this.x2,this.y2)},OC.Line.prototype.getBoundingRect=function(){var t=Math.max(this.x1,this.x2),e=Math.max(this.y1,this.y2);return OC.Rect.prototype.getBoundingRect.call({x:t,y:e,w:t-Math.min(this.x1,this.x2),h:e-Math.min(this.y1,this.y2),scaleX:this.scaleX,scaleY:this.scaleY,translateX:this.translateX,translateY:this.translateY})},OC.Sprite=function(t,e,i){OC.Object.call(this);var s=!1;this.img=new Image,this.srcX=0,this.srcY=0,this.srcW=null,this.srcH=null,this.dstX=e||0,this.dstY=i||0,this.dstW=null,this.dstH=null,this.load=function(t,e,i){i=i||function(){},s=!1,this.img.src=t;var o=this;this.img.onload=function(){s=!0,e&&e(o)},this.img.onerror=i,this.img.onabort=i},this.draw=function(t){if(t=t||OC.defaultContext,s){var e=this.srcW,i=this.srcH;"number"!=typeof e&&(e=this.img.width),"number"!=typeof i&&(i=this.img.height),"number"!=typeof dstW&&(dstW=this.img.width),"number"!=typeof dstH&&(dstH=this.img.height),this.fix(t,function(){t.drawImage(this.img,this.srcX,this.srcY,e,i,0,0,dstW,dstH)})}return this},Object.defineProperty(this,"ready",{get:function(){return s}}),Object.defineProperty(this,"x",{set:function(t){this.dstX=t},get:function(){return this.dstX}}),Object.defineProperty(this,"y",{set:function(t){this.dstY=t},get:function(){return this.dstY}}),Object.defineProperty(this,"src",{set:function(t){this.img.src=t},get:function(){return this.img.src}}),t&&this.load(t)},OC.Sprite.prototype=new OC.Object,OC.Sprite.prototype.center=function(){return this.translate(-(this.dstW||this.img.width)/2,-(this.dstH||this.img.height)/2)},OC.Sprite.prototype.getBoundingRect=function(){return this.ready?new OC.BoundingRect(this.dstX,this.dstY,this.dstW||this.img.width,this.dstH||this.img.height):new OC.BoundingRect},OC.TextGroup=function(t,e,i,s,o,n,h,r){OC.RoundRect.call(this,i,s,o,n,h),this.texts=[],this.padding=10,this.lineHeight=r||30,this.initTexts.apply(this,arguments)},OC.TextGroup.prototype=new OC.RoundRect,OC.TextGroup.prototype.setLineHeight=function(t){return this.lineHeight=t,this},OC.TextGroup.prototype.setPadding=function(t){return this.padding=t,this},OC.TextGroup.prototype.initTexts=function(t,e,i,s,o,n,h){return this.texts=t.map(function(t){return new OC.Text(t,e,i,s,o,n,h)}),this},OC.TextGroup.prototype.setTexts=function(t,e,i,s,o,n,h){var r=this.texts;return Hi.each(t,function(t,a){a<r.length?r[a].text=t:r[a].text=new OC.Text(t,e,i,s,o,n,h)},this),this},OC.TextGroup.prototype.setEach=function(t){return this.texts.forEach(function(e){e.set(t)}),this},OC.TextGroup.prototype.fixTexts=function(){return this.texts.forEach(function(t,e){switch(t.align){case"left":t.x=this.x+this.padding;break;case"right":t.x=this.x+this.w-this.padding;break;case"center":t.x=this.x+this.w/2}t.y=this.y+(e+.5)*this.lineHeight+this.padding},this),this},OC.TextGroup.prototype.strokeTexts=function(t){return this.fixTexts(),this.texts.forEach(function(e,i){e.stroke(t)},this),this},OC.TextGroup.prototype.fillTexts=function(t){return this.fixTexts(),this.texts.forEach(function(e,i){e.fill(t)},this),this},OC.TextGroup.prototype.drawTexts=function(t){return this.fixTexts(),this.texts.forEach(function(e,i){e.draw(t)},this),this},OC.TextGroup.prototype.draw=function(t){return OC.RoundRect.prototype.draw.call(this,t),this.drawTexts(t),this},OC.parse=function(t){try{var e=JSON.parse(t);if(!e.constructor)return;var i=new OC[e.constructor];return i.set(e),i}catch(t){return null}})})();