fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 11.1 kB
Source Map (JSON)
{"version":3,"file":"Rect.mjs","sources":["../../../src/shapes/Rect.ts"],"sourcesContent":["import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const rectDefaultValues: Partial<TClassProperties<Rect>> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps,\n UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions<RectProps> = Partial<RectProps>,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\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 super.toObject([...RECT_PROPS, ...propertiesToInclude]);\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 { width, height, rx, ry } = this;\n return [\n '<rect ',\n 'COMMON_PARTS',\n `x=\"${-width / 2}\" y=\"${\n -height / 2\n }\" rx=\"${rx}\" ry=\"${ry}\" width=\"${width}\" height=\"${height}\" />\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @static\n * @memberOf Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @static\n * @memberOf Rect\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n"],"names":["rectDefaultValues","rx","ry","RECT_PROPS","Rect","FabricObject","getDefaults","_objectSpread","ownDefaults","constructor","options","Object","assign","setOptions","_initRxRy","_render","ctx","width","w","height","h","x","y","Math","min","isRounded","beginPath","moveTo","lineTo","bezierCurveTo","kRect","closePath","_renderPaintInOrder","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","concat","fromElement","element","cssRules","_parseAttributes","parseAttributes","ATTRIBUTE_NAMES","left","top","visible","restOfparsedAttributes","_objectWithoutProperties","_excluded","Boolean","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}