fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
3 lines (2 loc) • 3.15 kB
JavaScript
import{defineProperty as t}from"../_virtual/_rollupPluginBabelHelpers.min.mjs";import{removeFromArray as e}from"./util/internals/removeFromArray.min.mjs";import{Point as s}from"./Point.min.mjs";const r=t=>!!t&&Array.isArray(t._objects);function n(r){class n extends r{constructor(){super(...arguments),t(this,"_objects",[])}_onObjectAdded(t){}_onObjectRemoved(t){}_onStackOrderChanged(t){}add(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const r=this._objects.push(...e);return e.forEach((t=>this._onObjectAdded(t))),r}insertAt(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),r=1;r<e;r++)s[r-1]=arguments[r];return this._objects.splice(t,0,...s),s.forEach((t=>this._onObjectAdded(t))),this._objects.length}remove(){const t=this._objects,e=[];for(var s=arguments.length,r=new Array(s),n=0;n<s;n++)r[n]=arguments[n];return r.forEach((s=>{const r=t.indexOf(s);-1!==r&&(t.splice(r,1),e.push(s),this._onObjectRemoved(s))})),e}forEachObject(t){this.getObjects().forEach(((e,s,r)=>t(e,s,r)))}getObjects(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];return 0===e.length?[...this._objects]:this._objects.filter((t=>t.isType(...e)))}item(t){return this._objects[t]}isEmpty(){return 0===this._objects.length}size(){return this._objects.length}contains(t,e){return!!this._objects.includes(t)||!!e&&this._objects.some((e=>e instanceof n&&e.contains(t,!0)))}complexity(){return this._objects.reduce(((t,e)=>t+=e.complexity?e.complexity():0),0)}sendObjectToBack(t){return!(!t||t===this._objects[0])&&(e(this._objects,t),this._objects.unshift(t),this._onStackOrderChanged(t),!0)}bringObjectToFront(t){return!(!t||t===this._objects[this._objects.length-1])&&(e(this._objects,t),this._objects.push(t),this._onStackOrderChanged(t),!0)}sendObjectBackwards(t,s){if(!t)return!1;const r=this._objects.indexOf(t);if(0!==r){const n=this.findNewLowerIndex(t,r,s);return e(this._objects,t),this._objects.splice(n,0,t),this._onStackOrderChanged(t),!0}return!1}bringObjectForward(t,s){if(!t)return!1;const r=this._objects.indexOf(t);if(r!==this._objects.length-1){const n=this.findNewUpperIndex(t,r,s);return e(this._objects,t),this._objects.splice(n,0,t),this._onStackOrderChanged(t),!0}return!1}moveObjectTo(t,s){return t!==this._objects[s]&&(e(this._objects,t),this._objects.splice(s,0,t),this._onStackOrderChanged(t),!0)}findNewLowerIndex(t,e,s){let r;if(s){r=e;for(let s=e-1;s>=0;--s)if(t.isOverlapping(this._objects[s])){r=s;break}}else r=e-1;return r}findNewUpperIndex(t,e,s){let r;if(s){r=e;for(let s=e+1;s<this._objects.length;++s)if(t.isOverlapping(this._objects[s])){r=s;break}}else r=e+1;return r}collectObjects(t){let{left:e,top:r,width:n,height:i}=t,{includeIntersecting:o=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const c=[],h=new s(e,r),b=h.add(new s(n,i));for(let t=this._objects.length-1;t>=0;t--){const e=this._objects[t];e.selectable&&e.visible&&(o&&e.intersectsWithRect(h,b)||e.isContainedWithinRect(h,b)||o&&e.containsPoint(h)||o&&e.containsPoint(b))&&c.push(e)}return c}}return n}export{n as createCollectionMixin,r as isCollection};
//# sourceMappingURL=Collection.min.mjs.map