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