fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 7.49 kB
Source Map (JSON)
{"version":3,"file":"BaseBrush.mjs","sources":["../../../src/brushes/BaseBrush.ts"],"sourcesContent":["import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport type { Shadow } from '../Shadow';\nimport type { Canvas } from '../canvas/Canvas';\nimport type { TBrushEventData } from './typedefs';\n\n/**\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nexport abstract class BaseBrush {\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color = 'rgb(0, 0, 0)';\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width = 1;\n\n /**\n * Shadow object representing shadow of this shape.\n * <b>Backwards incompatibility note:</b> This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type Shadow\n * @default\n */\n shadow: Shadow | null = null;\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: CanvasLineCap = 'round';\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: CanvasLineJoin = 'round';\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit = 10;\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: number[] | null = null;\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize = false;\n\n /**\n * @todo add type\n */\n declare canvas: Canvas;\n\n constructor(canvas: Canvas) {\n this.canvas = canvas;\n }\n\n abstract _render(): void;\n abstract onMouseDown(pointer: Point, ev: TBrushEventData): void;\n abstract onMouseMove(pointer: Point, ev: TBrushEventData): void;\n /**\n * @returns true if brush should continue blocking interaction\n */\n abstract onMouseUp(ev: TBrushEventData): boolean | void;\n\n /**\n * Sets brush styles\n * @private\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n }\n\n /**\n * Sets the transformation on given context\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @private\n */\n protected _saveAndTransform(ctx: CanvasRenderingContext2D) {\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n\n protected needsFullRender() {\n const color = new Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n }\n\n /**\n * Sets brush shadow styles\n * @private\n */\n protected _setShadow() {\n if (!this.shadow || !this.canvas) {\n return;\n }\n\n const canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom() * canvas.getRetinaScaling();\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n }\n\n /**\n * Removes brush shadow styles\n * @private\n */\n protected _resetShadow() {\n const ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n protected _isOutSideCanvas(pointer: Point) {\n return (\n pointer.x < 0 ||\n pointer.x > this.canvas.getWidth() ||\n pointer.y < 0 ||\n pointer.y > this.canvas.getHeight()\n );\n }\n}\n"],"names":["BaseBrush","constructor","canvas","_defineProperty","_setBrushStyles","ctx","strokeStyle","color","lineWidth","width","lineCap","strokeLineCap","miterLimit","strokeMiterLimit","lineJoin","strokeLineJoin","setLineDash","strokeDashArray","_saveAndTransform","v","viewportTransform","save","transform","needsFullRender","Color","getAlpha","shadow","_setShadow","contextTop","zoom","getZoom","getRetinaScaling","shadowColor","shadowBlur","blur","shadowOffsetX","offsetX","shadowOffsetY","offsetY","_resetShadow","_isOutSideCanvas","pointer","x","getWidth","y","getHeight"],"mappings":"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"}