UNPKG

fabric

Version:

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

1 lines 8.39 kB
{"version":3,"file":"CircleBrush.mjs","sources":["../../../src/brushes/CircleBrush.ts"],"sourcesContent":["import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Circle } from '../shapes/Circle';\nimport { Group } from '../shapes/Group';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { CircleBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\nexport class CircleBrush extends BaseBrush {\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width = 10;\n\n declare points: CircleBrushPoint[];\n\n constructor(canvas: Canvas) {\n super(canvas);\n this.points = [];\n }\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Point} pointer\n */\n drawDot(pointer: Point) {\n const point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n }\n\n dot(ctx: CanvasRenderingContext2D, point: CircleBrushPoint) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n }\n\n /**\n * Invoked on mouse down\n */\n onMouseDown(pointer: Point) {\n this.points = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n }\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render() {\n const ctx = this.canvas.contextTop,\n points = this.points;\n this._saveAndTransform(ctx);\n for (let i = 0; i < points.length; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n } else {\n this.drawDot(pointer);\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const circles: Circle[] = [];\n\n for (let i = 0; i < this.points.length; i++) {\n const point = this.points[i],\n circle = new Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: CENTER,\n originY: CENTER,\n fill: point.fill,\n });\n\n this.shadow && (circle.shadow = new Shadow(this.shadow));\n\n circles.push(circle);\n }\n const group = new Group(circles, { canvas: this.canvas });\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n /**\n * @param {Object} pointer\n * @return {Point} Just added pointer point\n */\n addPoint({ x, y }: Point) {\n const pointerPoint: CircleBrushPoint = {\n x,\n y,\n radius: getRandomInt(Math.max(0, this.width - 20), this.width + 20) / 2,\n fill: new Color(this.color).setAlpha(getRandomInt(0, 100) / 100).toRgba(),\n };\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n}\n"],"names":["CircleBrush","BaseBrush","constructor","canvas","_defineProperty","points","drawDot","pointer","point","addPoint","ctx","contextTop","_saveAndTransform","dot","restore","fillStyle","fill","beginPath","arc","x","y","radius","Math","PI","closePath","onMouseDown","clearContext","_setShadow","_render","i","length","onMouseMove","limitedToCanvasSize","_isOutSideCanvas","needsFullRender","onMouseUp","originalRenderOnAddRemove","renderOnAddRemove","circles","circle","Circle","left","top","originX","CENTER","originY","shadow","Shadow","push","group","Group","fire","path","add","_resetShadow","requestRenderAll","_ref","pointerPoint","getRandomInt","max","width","Color","color","setAlpha","toRgba"],"mappings":"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"}