UNPKG

fabric

Version:

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

139 lines (129 loc) 3.65 kB
import { defineProperty as _defineProperty } from '../../_virtual/_rollupPluginBabelHelpers.mjs'; import { Color } from '../color/Color.mjs'; /** * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo} */ class BaseBrush { /** * @todo add type */ constructor(canvas) { /** * Color of a brush * @type String * @default */ _defineProperty(this, "color", 'rgb(0, 0, 0)'); /** * Width of a brush, has to be a Number, no string literals * @type Number * @default */ _defineProperty(this, "width", 1); /** * Shadow object representing shadow of this shape. * <b>Backwards incompatibility note:</b> This property replaces "shadowColor" (String), "shadowOffsetX" (Number), * "shadowOffsetY" (Number) and "shadowBlur" (Number) since v1.2.12 * @type Shadow * @default */ _defineProperty(this, "shadow", null); /** * Line endings style of a brush (one of "butt", "round", "square") * @type String * @default */ _defineProperty(this, "strokeLineCap", 'round'); /** * Corner style of a brush (one of "bevel", "round", "miter") * @type String * @default */ _defineProperty(this, "strokeLineJoin", 'round'); /** * Maximum miter length (used for strokeLineJoin = "miter") of a brush's * @type Number * @default */ _defineProperty(this, "strokeMiterLimit", 10); /** * Stroke Dash Array. * @type Array * @default */ _defineProperty(this, "strokeDashArray", null); /** * When `true`, the free drawing is limited to the whiteboard size. Default to false. * @type Boolean * @default false */ _defineProperty(this, "limitedToCanvasSize", false); this.canvas = canvas; } /** * @returns true if brush should continue blocking interaction */ /** * Sets brush styles * @private * @param {CanvasRenderingContext2D} ctx */ _setBrushStyles(ctx) { ctx.strokeStyle = this.color; ctx.lineWidth = this.width; ctx.lineCap = this.strokeLineCap; ctx.miterLimit = this.strokeMiterLimit; ctx.lineJoin = this.strokeLineJoin; ctx.setLineDash(this.strokeDashArray || []); } /** * Sets the transformation on given context * @param {CanvasRenderingContext2D} ctx context to render on * @private */ _saveAndTransform(ctx) { const v = this.canvas.viewportTransform; ctx.save(); ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]); } needsFullRender() { const color = new Color(this.color); return color.getAlpha() < 1 || !!this.shadow; } /** * Sets brush shadow styles * @private */ _setShadow() { if (!this.shadow || !this.canvas) { return; } const canvas = this.canvas, shadow = this.shadow, ctx = canvas.contextTop, zoom = canvas.getZoom() * canvas.getRetinaScaling(); ctx.shadowColor = shadow.color; ctx.shadowBlur = shadow.blur * zoom; ctx.shadowOffsetX = shadow.offsetX * zoom; ctx.shadowOffsetY = shadow.offsetY * zoom; } /** * Removes brush shadow styles * @private */ _resetShadow() { const ctx = this.canvas.contextTop; ctx.shadowColor = ''; ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0; } /** * Check is pointer is outside canvas boundaries * @param {Object} pointer * @private */ _isOutSideCanvas(pointer) { return pointer.x < 0 || pointer.x > this.canvas.getWidth() || pointer.y < 0 || pointer.y > this.canvas.getHeight(); } } export { BaseBrush }; //# sourceMappingURL=BaseBrush.mjs.map