{"version":3,"file":"PatternBrush.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","getPatternSrc","dotWidth","dotDistance","patternCanvas","createCanvasElement","patternCtx","getContext","width","height","fillStyle","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":";;;;AAMO,MAAMA,YAAY,SAASC,WAAW,CAAC;EAG5CC,WAAWA,CAACC,MAAc,EAAE;IAC1B,KAAK,CAACA,MAAM,CAAC,CAAA;AACf,GAAA;AAEAC,EAAAA,aAAaA,GAAG;IACd,MAAMC,QAAQ,GAAG,EAAE;AACjBC,MAAAA,WAAW,GAAG,CAAC;MACfC,aAAa,GAAGC,mBAAmB,EAAE;AACrCC,MAAAA,UAAU,GAAGF,aAAa,CAACG,UAAU,CAAC,IAAI,CAAC,CAAA;IAE7CH,aAAa,CAACI,KAAK,GAAGJ,aAAa,CAACK,MAAM,GAAGP,QAAQ,GAAGC,WAAW,CAAA;AACnE,IAAA,IAAIG,UAAU,EAAE;AACdA,MAAAA,UAAU,CAACI,SAAS,GAAG,IAAI,CAACC,KAAK,CAAA;MACjCL,UAAU,CAACM,SAAS,EAAE,CAAA;MACtBN,UAAU,CAACO,GAAG,CACZX,QAAQ,GAAG,CAAC,EACZA,QAAQ,GAAG,CAAC,EACZA,QAAQ,GAAG,CAAC,EACZ,CAAC,EACDY,IAAI,CAACC,EAAE,GAAG,CAAC,EACX,KACF,CAAC,CAAA;MACDT,UAAU,CAACU,SAAS,EAAE,CAAA;MACtBV,UAAU,CAACW,IAAI,EAAE,CAAA;AACnB,KAAA;AACA,IAAA,OAAOb,aAAa,CAAA;AACtB,GAAA;;AAEA;AACF;AACA;AACA;EACEc,UAAUA,CAACC,GAA6B,EAAE;AACxC,IAAA,OAAOA,GAAG,CAACC,aAAa,CAAC,IAAI,CAACC,MAAM,IAAI,IAAI,CAACpB,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAA;AACzE,GAAA;;AAEA;AACF;AACA;AACA;EACEqB,eAAeA,CAACH,GAA6B,EAAE;AAC7C,IAAA,KAAK,CAACG,eAAe,CAACH,GAAG,CAAC,CAAA;AAC1B,IAAA,MAAMI,OAAO,GAAG,IAAI,CAACL,UAAU,CAACC,GAAG,CAAC,CAAA;AACpCI,IAAAA,OAAO,KAAKJ,GAAG,CAACK,WAAW,GAAGD,OAAO,CAAC,CAAA;AACxC,GAAA;;AAEA;AACF;AACA;EACEE,UAAUA,CAACC,QAAyB,EAAE;AACpC,IAAA,MAAMC,IAAI,GAAG,KAAK,CAACF,UAAU,CAACC,QAAQ,CAAC;AACrCE,MAAAA,OAAO,GAAGD,IAAI,CAACE,iBAAiB,EAAE,CAACC,SAAS,CAACH,IAAI,CAACI,WAAW,GAAG,CAAC,CAAC,CAAA;AAEpEJ,IAAAA,IAAI,CAACK,MAAM,GAAG,IAAIC,OAAO,CAAC;MACxBZ,MAAM,EAAE,IAAI,CAACA,MAAM,IAAI,IAAI,CAACpB,aAAa,EAAE;AAC3CiC,MAAAA,OAAO,EAAE,CAACN,OAAO,CAACO,CAAC;MACnBC,OAAO,EAAE,CAACR,OAAO,CAACS,CAAAA;AACpB,KAAC,CAAC,CAAA;AACF,IAAA,OAAOV,IAAI,CAAA;AACb,GAAA;AACF;;;;"}