import { GenerativeFillMathHelpers } from './GenerativeFillMathHelpers'; import { eraserColor } from './imageEditorConstants'; import { Point } from './imageEditorInterfaces'; export class BrushHandler { static brushCircleOverlay = (x: number, y: number, brushRadius: number, ctx: CanvasRenderingContext2D, fillColor: string /* , erase: boolean */) => { ctx.globalCompositeOperation = 'destination-out'; ctx.fillStyle = fillColor; ctx.shadowColor = eraserColor; ctx.shadowBlur = 5; ctx.beginPath(); ctx.arc(x, y, brushRadius, 0, 2 * Math.PI); ctx.fill(); ctx.closePath(); }; static createBrushPathOverlay = (startPoint: Point, endPoint: Point, brushRadius: number, ctx: CanvasRenderingContext2D, fillColor: string) => { const dist = GenerativeFillMathHelpers.distanceBetween(startPoint, endPoint); const pts: Point[] = []; for (let i = 0; i < dist; i += 5) { const s = i / dist; const x = startPoint.x * (1 - s) + endPoint.x * s; const y = startPoint.y * (1 - s) + endPoint.y * s; pts.push({ x: startPoint.x, y: startPoint.y }); BrushHandler.brushCircleOverlay(x, y, brushRadius, ctx, fillColor); } return pts; }; }