fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 3.14 kB
Source Map (JSON)
{"version":3,"file":"PatternBrush.min.mjs","sources":["../../../src/brushes/PatternBrush.ts"],"sourcesContent":["import { Pattern } from '../Pattern';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { Canvas } from '../canvas/Canvas';\nimport { PencilBrush } from './PencilBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\nexport class PatternBrush extends PencilBrush {\n declare source?: CanvasImageSource;\n\n constructor(canvas: Canvas) {\n super(canvas);\n }\n\n getPatternSrc() {\n const dotWidth = 20,\n dotDistance = 5,\n patternCanvas = createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n if (patternCtx) {\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(\n dotWidth / 2,\n dotWidth / 2,\n dotWidth / 2,\n 0,\n Math.PI * 2,\n false,\n );\n patternCtx.closePath();\n patternCtx.fill();\n }\n return patternCanvas;\n }\n\n /**\n * Creates \"pattern\" instance property\n * @param {CanvasRenderingContext2D} ctx\n */\n getPattern(ctx: CanvasRenderingContext2D) {\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n }\n\n /**\n * Sets brush styles\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n super._setBrushStyles(ctx);\n const pattern = this.getPattern(ctx);\n pattern && (ctx.strokeStyle = pattern);\n }\n\n /**\n * Creates path\n */\n createPath(pathData: TSimplePathData) {\n const path = super.createPath(pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new Pattern({\n source: this.source || this.getPatternSrc(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y,\n });\n return path;\n }\n}\n"],"names":["PatternBrush","PencilBrush","constructor","canvas","super","getPatternSrc","patternCanvas","createCanvasElement","patternCtx","getContext","width","height","dotWidth","fillStyle","this","color","beginPath","arc","Math","PI","closePath","fill","getPattern","ctx","createPattern","source","_setBrushStyles","pattern","strokeStyle","createPath","pathData","path","topLeft","_getLeftTopCoords","scalarAdd","strokeWidth","stroke","Pattern","offsetX","x","offsetY","y"],"mappings":"wKAMO,MAAMA,UAAqBC,EAGhCC,WAAAA,CAAYC,GACVC,MAAMD,EACR,CAEAE,aAAAA,GACE,MAEEC,EAAgBC,IAChBC,EAAaF,EAAcG,WAAW,MAiBxC,OAfAH,EAAcI,MAAQJ,EAAcK,OAASC,GACzCJ,IACFA,EAAWK,UAAYC,KAAKC,MAC5BP,EAAWQ,YACXR,EAAWS,IACTL,GACAA,GACAA,GACA,EACU,EAAVM,KAAKC,IACL,GAEFX,EAAWY,YACXZ,EAAWa,QAENf,CACT,CAMAgB,UAAAA,CAAWC,GACT,OAAOA,EAAIC,cAAcV,KAAKW,QAAUX,KAAKT,gBAAiB,SAChE,CAMAqB,eAAAA,CAAgBH,GACdnB,MAAMsB,gBAAgBH,GACtB,MAAMI,EAAUb,KAAKQ,WAAWC,GAChCI,IAAYJ,EAAIK,YAAcD,EAChC,CAKAE,UAAAA,CAAWC,GACT,MAAMC,EAAO3B,MAAMyB,WAAWC,GAC5BE,EAAUD,EAAKE,oBAAoBC,UAAUH,EAAKI,YAAc,GAOlE,OALAJ,EAAKK,OAAS,IAAIC,EAAQ,CACxBZ,OAAQX,KAAKW,QAAUX,KAAKT,gBAC5BiC,SAAUN,EAAQO,EAClBC,SAAUR,EAAQS,IAEbV,CACT"}