UNPKG

fabric

Version:

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

2 lines 5.64 kB
import{_defineProperty as e}from"../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.min.mjs";import"../../constants.min.mjs";import{Point as t,ZERO as n}from"../../Point.min.mjs";import{degreesToRadians as r}from"../../util/misc/radiansDegreesConversion.min.mjs";import{calcDimensionsMatrix as i,createRotateMatrix as a,createTranslateMatrix as o,multiplyTransformMatrices as s,qrDecompose as c}from"../../util/misc/matrix.min.mjs";import{sizeAfterTransform as l}from"../../util/misc/objectTransforms.min.mjs";import{interactiveObjectDefaultValues as u}from"./defaultValues.min.mjs";import{FabricObject as d}from"./Object.min.mjs";import{createObjectDefaultControls as f}from"../../controls/commonControls.min.mjs";var p=class e extends d{static getDefaults(){return{...super.getDefaults(),...e.ownDefaults}}constructor(t){super(),Object.assign(this,this.constructor.createControls(),e.ownDefaults),this.setOptions(t)}static createControls(){return{controls:f()}}_updateCacheCanvas(){let e=this.canvas;if(this.noScaleCache&&e&&e._currentTransform){let t=e._currentTransform,n=t.target,r=t.action;if(this===n&&r&&r.startsWith(`scale`))return!1}return super._updateCacheCanvas()}getActiveControl(){let e=this.__corner;return e?{key:e,control:this.controls[e],coord:this.oCoords[e]}:void 0}findControl(e,t=!1){if(!this.hasControls||!this.canvas)return;this.__corner=void 0;let n=Object.entries(this.oCoords);for(let r=n.length-1;r>=0;r--){let[i,a]=n[r],o=this.controls[i];if(o.shouldActivate(i,this,e,t?a.touchCorner:a.corner))return this.__corner=i,{key:i,control:o,coord:this.oCoords[i]}}}calcOCoords(){let e=this.getViewportTransform(),t=this.getCenterPoint(),n=s(s(e,s(o(t.x,t.y),a({angle:this.getTotalAngle()-(this.group&&this.flipX?180:0)}))),[1/e[0],0,0,1/e[3],0,0]),r=this.group?c(this.calcTransformMatrix()):void 0;r&&(r.scaleX=Math.abs(r.scaleX),r.scaleY=Math.abs(r.scaleY));let i=this._calculateCurrentDimensions(r),l={};return this.forEachControl((e,t)=>{let r=e.positionHandler(i,n,this,e);l[t]=Object.assign(r,this._calcCornerCoords(e,r))}),l}_calcCornerCoords(e,t){let n=this.getTotalAngle();return{corner:e.calcCornerCoords(n,this.cornerSize,t.x,t.y,!1,this),touchCorner:e.calcCornerCoords(n,this.touchCornerSize,t.x,t.y,!0,this)}}setCoords(){super.setCoords(),this.canvas&&(this.oCoords=this.calcOCoords())}forEachControl(e){for(let t in this.controls)e(this.controls[t],t,this)}drawSelectionBackground(e){if(!this.selectionBackgroundColor||this.canvas&&this.canvas._activeObject!==this)return;e.save();let t=this.getRelativeCenterPoint(),n=this._calculateCurrentDimensions(),i=this.getViewportTransform();e.translate(t.x,t.y),e.scale(1/i[0],1/i[3]),e.rotate(r(this.angle)),e.fillStyle=this.selectionBackgroundColor,e.fillRect(-n.x/2,-n.y/2,n.x,n.y),e.restore()}strokeBorders(e,t){e.strokeRect(-t.x/2,-t.y/2,t.x,t.y)}_drawBorders(e,t,n={}){let r={hasControls:this.hasControls,borderColor:this.borderColor,borderDashArray:this.borderDashArray,...n};e.save(),e.strokeStyle=r.borderColor,this._setLineDash(e,r.borderDashArray),this.strokeBorders(e,t),r.hasControls&&this.drawControlsConnectingLines(e,t),e.restore()}_renderControls(e,t={}){let{hasBorders:n,hasControls:i}=this,a={hasBorders:n,hasControls:i,...t},o=this.getViewportTransform(),l=a.hasBorders,u=a.hasControls,d=c(s(o,this.calcTransformMatrix()));e.save(),e.translate(d.translateX,d.translateY),e.lineWidth=this.borderScaleFactor,this.group===this.parent&&(e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(d.angle-=180),e.rotate(r(this.group?d.angle:this.angle)),l&&this.drawBorders(e,d,t),u&&this.drawControls(e,t),e.restore()}drawBorders(e,r,a){let o;if(a&&a.forActiveSelection||this.group){let e=l(this.width,this.height,i(r)),a=this.isStrokeAccountedForInDimensions()?n:(this.strokeUniform?new t().scalarAdd(this.canvas?this.canvas.getZoom():1):new t(r.scaleX,r.scaleY)).scalarMultiply(this.strokeWidth);o=e.add(a).scalarAdd(this.borderScaleFactor).scalarAdd(2*this.padding)}else o=this._calculateCurrentDimensions().scalarAdd(this.borderScaleFactor);this._drawBorders(e,o,a)}drawControlsConnectingLines(e,t){let n=!1;e.beginPath(),this.forEachControl((r,i)=>{r.withConnection&&r.getVisibility(this,i)&&(n=!0,e.moveTo(r.x*t.x,r.y*t.y),e.lineTo(r.x*t.x+r.offsetX,r.y*t.y+r.offsetY))}),n&&e.stroke()}drawControls(e,t={}){e.save();let n=this.getCanvasRetinaScaling(),{cornerStrokeColor:r,cornerDashArray:i,cornerColor:a}=this,o={cornerStrokeColor:r,cornerDashArray:i,cornerColor:a,...t};e.setTransform(n,0,0,n,0,0),e.strokeStyle=e.fillStyle=o.cornerColor,this.transparentCorners||(e.strokeStyle=o.cornerStrokeColor),this._setLineDash(e,o.cornerDashArray),this.forEachControl((t,n)=>{if(t.getVisibility(this,n)){let r=this.oCoords[n];t.render(e,r.x,r.y,o,this)}}),e.restore()}isControlVisible(e){return this.controls[e]&&this.controls[e].getVisibility(this,e)}setControlVisible(e,t){this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[e]=t}setControlsVisibility(e={}){Object.entries(e).forEach(([e,t])=>this.setControlVisible(e,t))}clearContextTop(e){if(!this.canvas)return;let t=this.canvas.contextTop;if(!t)return;let n=this.canvas.viewportTransform;t.save(),t.transform(n[0],n[1],n[2],n[3],n[4],n[5]),this.transform(t);let r=this.width+4,i=this.height+4;return t.clearRect(-r/2,-i/2,r,i),e||t.restore(),t}onDeselect(e){return!1}onSelect(e){return!1}shouldStartDragging(e){return!1}onDragStart(e){return!1}canDrop(e){return!1}renderDragSourceEffect(e){}renderDropTargetEffect(e){}};e(p,`ownDefaults`,u);export{p as InteractiveFabricObject}; //# sourceMappingURL=InteractiveObject.min.mjs.map