fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
2 lines • 2.56 kB
JavaScript
import{_defineProperty as e}from"../../_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.min.mjs";import{CENTER as t}from"../constants.min.mjs";import{Shadow as n}from"../Shadow.min.mjs";import{Rect as r}from"../shapes/Rect.min.mjs";import{Group as i}from"../shapes/Group.min.mjs";import{getRandomInt as a}from"../util/internals/getRandomInt.min.mjs";import{BaseBrush as o}from"./BaseBrush.min.mjs";var s=class extends o{constructor(t){super(t),e(this,`width`,10),e(this,`density`,20),e(this,`dotWidth`,1),e(this,`dotWidthVariance`,1),e(this,`randomOpacity`,!1),e(this,`optimizeOverlapping`,!0),this.sprayChunks=[],this.sprayChunk=[]}onMouseDown(e){this.sprayChunks=[],this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(e),this.renderChunck(this.sprayChunk)}onMouseMove(e){!0===this.limitedToCanvasSize&&this._isOutSideCanvas(e)||(this.addSprayChunk(e),this.renderChunck(this.sprayChunk))}onMouseUp(){let e=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;let a=[];for(let e=0;e<this.sprayChunks.length;e++){let n=this.sprayChunks[e];for(let e=0;e<n.length;e++){let i=n[e],o=new r({width:i.width,height:i.width,left:i.x+1,top:i.y+1,originX:t,originY:t,fill:this.color});a.push(o)}}let o=new i(this.optimizeOverlapping?function(e){let t={},n=[];for(let r,i=0;i<e.length;i++)r=`${e[i].left}${e[i].top}`,t[r]||(t[r]=!0,n.push(e[i]));return n}(a):a,{objectCaching:!0,subTargetCheck:!1,interactive:!1});this.shadow&&o.set(`shadow`,new n(this.shadow)),this.canvas.fire(`before:path:created`,{path:o}),this.canvas.add(o),this.canvas.fire(`path:created`,{path:o}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=e,this.canvas.requestRenderAll()}renderChunck(e){let t=this.canvas.contextTop;t.fillStyle=this.color,this._saveAndTransform(t);for(let n=0;n<e.length;n++){let r=e[n];t.globalAlpha=r.opacity,t.fillRect(r.x,r.y,r.width,r.width)}t.restore()}_render(){let e=this.canvas.contextTop;e.fillStyle=this.color,this._saveAndTransform(e);for(let e=0;e<this.sprayChunks.length;e++)this.renderChunck(this.sprayChunks[e]);e.restore()}addSprayChunk(e){this.sprayChunk=[];let t=this.width/2;for(let n=0;n<this.density;n++)this.sprayChunk.push({x:a(e.x-t,e.x+t),y:a(e.y-t,e.y+t),width:this.dotWidthVariance?a(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):this.dotWidth,opacity:this.randomOpacity?a(0,100)/100:1});this.sprayChunks.push(this.sprayChunk)}};export{s as SprayBrush};
//# sourceMappingURL=SprayBrush.min.mjs.map