import Konva from "konva"; import { IMarkupEllipse } from "../../IMarkupEllipse"; import { IMarkupColorable } from "../../IMarkupColorable"; export class KonvaEllipse implements IMarkupEllipse, IMarkupColorable { private _ref: Konva.Ellipse; constructor( params: { position: { x: number; y: number }; radius: { x: number; y: number }; color: string; lineWidth?: number; id?: string; }, ref = null ) { if (ref) { this._ref = ref; return; } if (!params.position) return; this._ref = new Konva.Ellipse({ stroke: params.color ?? "#ff0000", strokeWidth: params.lineWidth ?? 4, globalCompositeOperation: "source-over", lineCap: "round", lineJoin: "round", x: params.position.x, y: params.position.y, radiusX: params.radius.x, radiusY: params.radius.y, draggable: true, strokeScaleEnabled: false, }); this._ref.id(this._ref._id.toString()); } getPosition(): { x: number; y: number } { return this._ref.position(); } setPosition(x: number, y: number) { this._ref.setPosition({ x, y }); } getRadiusX(): number { return this._ref.radiusX(); } setRadiusX(r: number) { this._ref.radius({ x: r, y: this._ref.radiusY() }); } getRadiusY(): number { return this._ref.radiusY(); } setRadiusY(r: number) { this._ref.radius({ x: this._ref.radiusX(), y: r }); } getLineWidth(): number { return this._ref.strokeWidth(); } setLineWidth(size: number) { this._ref.strokeWidth(size); } ref() { return this._ref; } id(): string { return this._ref.id(); } enableMouseEditing(value: boolean) { this._ref.draggable(value); } type(): string { return "ellipse"; } getColor(): string { return this._ref.stroke(); } setColor(hex: string) { this._ref.stroke(hex); } getRotation(): number { return this._ref.rotation(); } setRotation(degrees: number): void { this._ref.rotation(degrees); } getZIndex(): number { return this._ref.zIndex(); } setZIndex(zIndex: number): void { this._ref.zIndex(zIndex); } delete() { this._ref.destroy(); this._ref = null; } }