UNPKG

fabric

Version:

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

1 lines 21.8 kB
{"version":3,"file":"Path.mjs","sources":["../../../src/shapes/Path.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { toFixed } from '../util/misc/toFixed';\nimport {\n getBoundsOfCurve,\n joinPath,\n makePathSimpler,\n parsePath,\n} from '../util/path';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n TComplexPathData,\n TPathSegmentInfo,\n TSimplePathData,\n} from '../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type {\n TBBox,\n TClassProperties,\n TSVGReviver,\n TOptions,\n} from '../typedefs';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniquePathProps {\n sourcePath?: string;\n path?: TSimplePathData;\n}\n\nexport interface SerializedPathProps\n extends SerializedObjectProps,\n UniquePathProps {}\n\nexport interface PathProps extends FabricObjectProps, UniquePathProps {}\n\nexport interface IPathBBox extends TBBox {\n left: number;\n top: number;\n pathOffset: Point;\n}\n\nexport class Path<\n Props extends TOptions<PathProps> = Partial<PathProps>,\n SProps extends SerializedPathProps = SerializedPathProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Array of path points\n * @type Array\n * @default\n */\n declare path: TSimplePathData;\n\n declare pathOffset: Point;\n\n declare sourcePath?: string;\n\n declare segmentsInfo?: TPathSegmentInfo[];\n\n static type = 'Path';\n\n static cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n /**\n * Constructor\n * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Partial<PathProps>} [options] Options object\n * @return {Path} thisArg\n */\n constructor(\n path: TComplexPathData | string,\n // todo: evaluate this spread here\n { path: _, left, top, ...options }: Partial<Props> = {},\n ) {\n super();\n Object.assign(this, Path.ownDefaults);\n this.setOptions(options);\n this._setPath(path || [], true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {TComplexPathData | string} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {boolean} [adjustPosition] pass true to reposition the object according to the bounding box\n * @returns {Point} top left position of the bounding box, useful for complementary positioning\n */\n _setPath(path: TComplexPathData | string, adjustPosition?: boolean) {\n this.path = makePathSimpler(Array.isArray(path) ? path : parsePath(path));\n this.setBoundingBox(adjustPosition);\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = this._calcBoundsFromPath();\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands(ctx: CanvasRenderingContext2D) {\n const l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (const command of this.path) {\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n ctx.lineTo(command[1] + l, command[2] + t);\n break;\n\n case 'M': // moveTo, absolute\n ctx.moveTo(command[1] + l, command[2] + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n ctx.bezierCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n command[5] + l,\n command[6] + t,\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n );\n break;\n\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render(ctx: CanvasRenderingContext2D) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns string representation of an instance\n * @return {string} string representation of an instance\n */\n toString() {\n return `#<Path (${this.complexity()}): { \"top\": ${this.top}, \"left\": ${\n this.left\n } }>`;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n path: this.path.map((pathCmd) => pathCmd.slice()),\n };\n }\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n const o = this.toObject<T, K>(propertiesToInclude);\n if (this.sourcePath) {\n delete o.path;\n o.sourcePath = this.sourcePath;\n }\n return o;\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const path = joinPath(this.path, config.NUM_FRACTION_DIGITS);\n return [\n '<path ',\n 'COMMON_PARTS',\n `d=\"${path}\" stroke-linecap=\"round\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @return the path command's translate transform attribute\n */\n _getOffsetTransform() {\n const digits = config.NUM_FRACTION_DIGITS;\n return ` translate(${toFixed(-this.pathOffset.x, digits)}, ${toFixed(\n -this.pathOffset.y,\n digits,\n )})`;\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n })\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n });\n }\n\n /**\n * Returns number representation of an instance complexity\n * @return {number} complexity of this instance\n */\n complexity() {\n return this.path.length;\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { width, height, pathOffset } = this._calcDimensions();\n this.set({ width, height, pathOffset });\n // using pathOffset because it match the use case.\n // if pathOffset change here we need to use left + width/2 , top + height/2\n adjustPosition && this.setPositionByOrigin(pathOffset, CENTER, CENTER);\n }\n\n _calcBoundsFromPath(): TBBox {\n const bounds: XY[] = [];\n let subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0; // current y\n\n for (const command of this.path) {\n // current instruction\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n x = command[1];\n y = command[2];\n bounds.push({ x: subpathStartX, y: subpathStartY }, { x, y });\n break;\n\n case 'M': // moveTo, absolute\n x = command[1];\n y = command[2];\n subpathStartX = x;\n subpathStartY = y;\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[3],\n command[4],\n command[5],\n command[6],\n ),\n );\n x = command[5];\n y = command[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[1],\n command[2],\n command[3],\n command[4],\n ),\n );\n x = command[3];\n y = command[4];\n break;\n\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n }\n return makeBoundingBoxFromPoints(bounds);\n }\n\n /**\n * @private\n */\n _calcDimensions(): IPathBBox {\n const bbox = this._calcBoundsFromPath();\n\n return {\n ...bbox,\n pathOffset: new Point(\n bbox.left + bbox.width / 2,\n bbox.top + bbox.height / 2,\n ),\n };\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Path.fromElement`)\n * @static\n * @memberOf Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'd'];\n\n /**\n * Creates an instance of Path from an object\n * @static\n * @memberOf Path\n * @param {Object} object\n * @returns {Promise<Path>}\n */\n static fromObject<T extends TOptions<SerializedPathProps>>(object: T) {\n return this._fromObject<Path>(object, {\n extraParam: 'path',\n });\n }\n\n /**\n * Creates an instance of Path from an SVG <path> element\n * @static\n * @memberOf Path\n * @param {HTMLElement} element to parse\n * @param {Partial<PathProps>} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Partial<PathProps>,\n cssRules?: CSSRules,\n ) {\n const { d, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(d, {\n ...parsedAttributes,\n ...options,\n // we pass undefined to instruct the constructor to position the object using the bbox\n left: undefined,\n top: undefined,\n });\n }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n"],"names":["Path","FabricObject","constructor","path","_ref","arguments","length","undefined","_","left","top","options","_objectWithoutProperties","_excluded","Object","assign","ownDefaults","setOptions","_setPath","set","LEFT","TOP","adjustPosition","makePathSimpler","Array","isArray","parsePath","setBoundingBox","_findCenterFromElement","bbox","_calcBoundsFromPath","Point","width","height","_renderPathCommands","ctx","l","pathOffset","x","t","y","beginPath","command","lineTo","moveTo","bezierCurveTo","quadraticCurveTo","closePath","_render","_renderPaintInOrder","toString","concat","complexity","toObject","propertiesToInclude","_objectSpread","map","pathCmd","slice","toDatalessObject","o","sourcePath","_toSVG","joinPath","config","NUM_FRACTION_DIGITS","_getOffsetTransform","digits","toFixed","toClipPathSVG","reviver","additionalTransform","_createBaseClipPathSVGMarkup","toSVG","_createBaseSVGMarkup","setDimensions","_calcDimensions","setPositionByOrigin","CENTER","bounds","subpathStartX","subpathStartY","push","getBoundsOfCurve","makeBoundingBoxFromPoints","fromObject","object","_fromObject","extraParam","fromElement","element","cssRules","_parseAttributes","parseAttributes","ATTRIBUTE_NAMES","d","parsedAttributes","_excluded2","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}