UNPKG

fabric

Version:

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

70 lines (59 loc) 1.98 kB
import { classRegistry } from '../ClassRegistry'; import { FabricObject } from './Object/FabricObject'; import type { FabricObjectProps, SerializedObjectProps } from './Object/types'; import type { TClassProperties, TOptions } from '../typedefs'; import type { ObjectEvents } from '../EventTypeDefs'; export const triangleDefaultValues: Partial<TClassProperties<Triangle>> = { width: 100, height: 100, }; export class Triangle< Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>, SProps extends SerializedObjectProps = SerializedObjectProps, EventSpec extends ObjectEvents = ObjectEvents, > extends FabricObject<Props, SProps, EventSpec> implements FabricObjectProps { static type = 'Triangle'; static ownDefaults = triangleDefaultValues; static getDefaults(): Record<string, any> { return { ...super.getDefaults(), ...Triangle.ownDefaults }; } /** * Constructor * @param {Object} [options] Options object */ constructor(options?: Props) { super(); Object.assign(this, Triangle.ownDefaults); this.setOptions(options); } /** * @private * @param {CanvasRenderingContext2D} ctx Context to render on */ _render(ctx: CanvasRenderingContext2D) { const widthBy2 = this.width / 2, heightBy2 = this.height / 2; ctx.beginPath(); ctx.moveTo(-widthBy2, heightBy2); ctx.lineTo(0, -heightBy2); ctx.lineTo(widthBy2, heightBy2); ctx.closePath(); this._renderPaintInOrder(ctx); } /** * Returns svg representation of an instance * @return {Array} an array of strings with the specific svg representation * of the instance */ _toSVG() { const widthBy2 = this.width / 2, heightBy2 = this.height / 2, points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`; return ['<polygon ', 'COMMON_PARTS', 'points="', points, '" />']; } } classRegistry.setClass(Triangle); classRegistry.setSVGClass(Triangle);