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
text/typescript
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);