fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
2 lines • 3.5 kB
JavaScript
import{_defineProperty as e}from"../../_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.min.mjs";import{CENTER as t,CHANGED as n,MODIFIED as r,MODIFY_PATH as i,MODIFY_POLY as a,MOVING as o,RESIZING as s,ROTATING as c,SCALING as l,SKEWING as u,iMatrix as d}from"../constants.min.mjs";import{classRegistry as f}from"../ClassRegistry.min.mjs";import{Point as p}from"../Point.min.mjs";import{invertTransform as m}from"../util/misc/matrix.min.mjs";import{resolveOrigin as h}from"../util/misc/resolveOrigin.min.mjs";import{LAYOUT_TYPE_OBJECT_MODIFIED as g,LAYOUT_TYPE_OBJECT_MODIFYING as _}from"./constants.min.mjs";import{FitContentLayout as v}from"./LayoutStrategies/FitContentLayout.min.mjs";const y=`layoutManager`;var b=class{constructor(t=new v){e(this,`strategy`,void 0),this.strategy=t,this._subscriptions=new Map}performLayout(e){let t={bubbles:!0,strategy:this.strategy,...e,prevStrategy:this._prevLayoutStrategy,stopPropagation(){this.bubbles=!1}};this.onBeforeLayout(t);let n=this.getLayoutResult(t);n&&this.commitLayout(t,n),this.onAfterLayout(t,n),this._prevLayoutStrategy=t.strategy}attachHandlers(e,t){let{target:d}=t;return[r,o,s,c,l,u,n,a,i].map(t=>e.on(t,e=>this.performLayout(t===`modified`?{type:g,trigger:t,e,target:d}:{type:_,trigger:t,e,target:d})))}subscribe(e,t){this.unsubscribe(e,t);let n=this.attachHandlers(e,t);this._subscriptions.set(e,n)}unsubscribe(e,t){(this._subscriptions.get(e)||[]).forEach(e=>e()),this._subscriptions.delete(e)}unsubscribeTargets(e){e.targets.forEach(t=>this.unsubscribe(t,e))}subscribeTargets(e){e.targets.forEach(t=>this.subscribe(t,e))}onBeforeLayout(e){let{target:t,type:n}=e,{canvas:r}=t;if(n===`initialization`||n===`added`?this.subscribeTargets(e):n===`removed`&&this.unsubscribeTargets(e),t.fire(`layout:before`,{context:e}),r&&r.fire(`object:layout:before`,{target:t,context:e}),n===`imperative`&&e.deep){let{strategy:n,...r}=e;t.forEachObject(e=>e.layoutManager&&e.layoutManager.performLayout({...r,bubbles:!1,target:e}))}}getLayoutResult(e){let{target:t,strategy:n,type:r}=e,i=n.calcLayoutResult(e,t.getObjects());if(!i)return;let a=r===`initialization`?new p:t.getRelativeCenterPoint(),{center:o,correction:s=new p,relativeCorrection:c=new p}=i;return{result:i,prevCenter:a,nextCenter:o,offset:a.subtract(o).add(s).transform(r===`initialization`?d:m(t.calcOwnMatrix()),!0).add(c)}}commitLayout(e,n){let{target:r}=e,{result:{size:i},nextCenter:a}=n;var o,s;r.set({width:i.x,height:i.y}),this.layoutObjects(e,n),e.type===`initialization`?r.set({left:(o=e.x)==null?a.x+i.x*h(r.originX):o,top:(s=e.y)==null?a.y+i.y*h(r.originY):s}):(r.setPositionByOrigin(a,t,t),r.setCoords(),r.set(`dirty`,!0))}layoutObjects(e,t){let{target:n}=e;n.forEachObject(r=>{r.group===n&&this.layoutObject(e,t,r)}),e.strategy.shouldLayoutClipPath(e)&&this.layoutObject(e,t,n.clipPath)}layoutObject(e,{offset:t},n){n.set({left:n.left+t.x,top:n.top+t.y})}onAfterLayout(e,t){let{target:n,strategy:r,bubbles:i,prevStrategy:a,...o}=e,{canvas:s}=n;n.fire(`layout:after`,{context:e,result:t}),s&&s.fire(`object:layout:after`,{context:e,result:t,target:n});let c=n.parent;i&&c!=null&&c.layoutManager&&((o.path||(o.path=[])).push(n),c.layoutManager.performLayout({...o,target:c})),n.set(`dirty`,!0)}dispose(){let{_subscriptions:e}=this;e.forEach(e=>e.forEach(e=>e())),e.clear()}toObject(){return{type:y,strategy:this.strategy.constructor.type}}toJSON(){return this.toObject()}};f.setClass(b,y);export{b as LayoutManager};
//# sourceMappingURL=LayoutManager.min.mjs.map