UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

3 lines (2 loc) 2.36 kB
import{Point as t}from"../Point.min.mjs";import{Control as n}from"./Control.min.mjs";import{multiplyTransformMatrices as o}from"../util/misc/matrix.min.mjs";import{sendPointToPlane as e}from"../util/misc/planeChange.min.mjs";import{fireEvent as r}from"./fireEvent.min.mjs";import{commonEventInfo as s}from"./util.min.mjs";const c=(n,e,r)=>{const{path:s,pathOffset:c}=n,i=s[e];return new t(i[r]-c.x,i[r+1]-c.y).transform(o(n.getViewportTransform(),n.calcTransformMatrix()))};function i(t,n,o){const{commandIndex:e,pointIndex:r}=this;return c(o,e,r)}function a(n,o,c,i){const{target:a}=o,{commandIndex:m,pointIndex:l}=this,d=((n,o,r,s,c)=>{const{path:i,pathOffset:a}=n,m=i[(s>0?s:i.length)-1],l=new t(m[c],m[c+1]),d=l.subtract(a).transform(n.calcOwnMatrix()),p=e(new t(o,r),void 0,n.calcOwnMatrix());i[s][c]=p.x+a.x,i[s][c+1]=p.y+a.y,n.setDimensions();const x=l.subtract(n.pathOffset).transform(n.calcOwnMatrix()).subtract(d);return n.left-=x.x,n.top-=x.y,n.set("dirty",!0),!0})(a,c,i,m,l);return r(this.actionName,{...s(n,o,c,i),commandIndex:m,pointIndex:l}),d}class m extends n{constructor(t){super(t)}render(t,n,o,e,r){const s={...e,cornerColor:this.controlFill,cornerStrokeColor:this.controlStroke,transparentCorners:!this.controlFill};super.render(t,n,o,s,r)}}class l extends m{constructor(t){super(t)}render(t,n,o,e,r){const{path:s}=r,{commandIndex:i,pointIndex:a,connectToCommandIndex:m,connectToPointIndex:l}=this;t.save(),t.strokeStyle=this.controlStroke,this.connectionDashArray&&t.setLineDash(this.connectionDashArray);const[d]=s[i],p=c(r,m,l);if("Q"===d){const e=c(r,i,a+2);t.moveTo(e.x,e.y),t.lineTo(n,o)}else t.moveTo(n,o);t.lineTo(p.x,p.y),t.stroke(),t.restore(),super.render(t,n,o,e,r)}}const d=(t,n,o,e,r,s)=>new(o?l:m)({commandIndex:t,pointIndex:n,actionName:"modifyPath",positionHandler:i,actionHandler:a,connectToCommandIndex:r,connectToPointIndex:s,...e,...o?e.controlPointStyle:e.pointStyle});function p(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o={};let e="M";return t.path.forEach((t,r)=>{const s=t[0];switch("Z"!==s&&(o[`c_${r}_${s}`]=d(r,t.length-2,!1,n)),s){case"C":o[`c_${r}_C_CP_1`]=d(r,1,!0,n,r-1,(t=>"C"===t?5:"Q"===t?3:1)(e)),o[`c_${r}_C_CP_2`]=d(r,3,!0,n,r,5);break;case"Q":o[`c_${r}_Q_CP_1`]=d(r,1,!0,n,r,3)}e=s}),o}export{p as createPathControls}; //# sourceMappingURL=pathControl.min.mjs.map