UNPKG

fabric

Version:

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

470 lines (340 loc) 15.7 kB
import { describe, it, expect } from 'vitest'; import { Rect } from '../Rect'; import { Point } from '../../Point'; import { Control } from '../../controls/Control'; import { getLocalPoint } from '../../controls'; describe('fabric.ObjectOrigins', () => { const rectOptions = { originX: 'left', originY: 'top', left: 35, top: 45, width: 20, height: 40, fill: 'rgb(0,0,0)', strokeWidth: 2, angle: 0, scaleX: 2, scaleY: 2, } as const; function normalizePoint( target: Rect, point: Point, originX?: string | number, originY?: string | number, ) { target.controls = { test: new Control({ offsetX: 0, offsetY: 0, }), }; return getLocalPoint( // @ts-expect-error -- partial of Transform { target, corner: 'test' }, originX, originY, point.x, point.y, ); } it('getCenterPoint', () => { const rect = new Rect(rectOptions); const p = rect.getCenterPoint(); expect(p).toEqual(new Point(57, 87)); }); it('translateToCenterPoint', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); p = rect.translateToCenterPoint(point, 'center', 'center'); expect(p).toEqual(new Point(15, 20)); p = rect.translateToCenterPoint(point, 'center', 'center'); expect(p).toEqual(new Point(15, 20)); p = rect.translateToCenterPoint(point, 'center', 'top'); expect(p).toEqual(new Point(15, 62)); p = rect.translateToCenterPoint(point, 'center', 'bottom'); expect(p).toEqual(new Point(15, -22)); p = rect.translateToCenterPoint(point, 'left', 'center'); expect(p).toEqual(new Point(37, 20)); p = rect.translateToCenterPoint(point, 'left', 'top'); expect(p).toEqual(new Point(37, 62)); p = rect.translateToCenterPoint(point, 'left', 'bottom'); expect(p).toEqual(new Point(37, -22)); p = rect.translateToCenterPoint(point, 'right', 'center'); expect(p).toEqual(new Point(-7, 20)); p = rect.translateToCenterPoint(point, 'right', 'top'); expect(p).toEqual(new Point(-7, 62)); p = rect.translateToCenterPoint(point, 'right', 'bottom'); expect(p).toEqual(new Point(-7, -22)); }); it('translateToCenterPointRotated', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); rect.angle = 35; p = rect.translateToCenterPoint(point, 'center', 'center'); expect(p).toEqual(new Point(15, 20)); p = rect.translateToCenterPoint(point, 'center', 'top'); expect(p).toEqual(new Point(-9.090210326743936, 54.40438586013766)); p = rect.translateToCenterPoint(point, 'center', 'bottom'); expect(p).toEqual(new Point(39.090210326743936, -14.404385860137658)); p = rect.translateToCenterPoint(point, 'left', 'center'); expect(p).toEqual(new Point(33.02134497435782, 32.61868159972301)); p = rect.translateToCenterPoint(point, 'left', 'top'); expect(p).toEqual(new Point(8.931134647613884, 67.02306745986067)); p = rect.translateToCenterPoint(point, 'left', 'bottom'); expect(p).toEqual(new Point(57.11155530110176, -1.7857042604146471)); p = rect.translateToCenterPoint(point, 'right', 'center'); expect(p).toEqual(new Point(-3.0213449743578202, 7.381318400276987)); p = rect.translateToCenterPoint(point, 'right', 'top'); expect(p).toEqual(new Point(-27.11155530110176, 41.78570426041465)); p = rect.translateToCenterPoint(point, 'right', 'bottom'); expect(p).toEqual(new Point(21.068865352386116, -27.02306745986067)); }); it('translateToOriginPoint', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); p = rect.translateToOriginPoint(point, 'center', 'center'); expect(p).toEqual(new Point(15, 20)); p = rect.translateToOriginPoint(point, 'center', 'top'); expect(p).toEqual(new Point(15, -22)); p = rect.translateToOriginPoint(point, 'center', 'bottom'); expect(p).toEqual(new Point(15, 62)); p = rect.translateToOriginPoint(point, 'left', 'center'); expect(p).toEqual(new Point(-7, 20)); p = rect.translateToOriginPoint(point, 'left', 'top'); expect(p).toEqual(new Point(-7, -22)); p = rect.translateToOriginPoint(point, 'left', 'bottom'); expect(p).toEqual(new Point(-7, 62)); p = rect.translateToOriginPoint(point, 'right', 'center'); expect(p).toEqual(new Point(37, 20)); p = rect.translateToOriginPoint(point, 'right', 'top'); expect(p).toEqual(new Point(37, -22)); p = rect.translateToOriginPoint(point, 'right', 'bottom'); expect(p).toEqual(new Point(37, 62)); }); it('translateToOriginPointRotated', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); rect.angle = 35; p = rect.translateToOriginPoint(point, 'center', 'center'); expect(p).toEqual(new Point(15, 20)); p = rect.translateToOriginPoint(point, 'center', 'top'); expect(p).toEqual(new Point(39.090210326743936, -14.404385860137658)); p = rect.translateToOriginPoint(point, 'center', 'bottom'); expect(p).toEqual(new Point(-9.090210326743936, 54.40438586013766)); p = rect.translateToOriginPoint(point, 'left', 'center'); expect(p).toEqual(new Point(-3.0213449743578202, 7.381318400276987)); p = rect.translateToOriginPoint(point, 'left', 'top'); expect(p).toEqual(new Point(21.068865352386116, -27.02306745986067)); p = rect.translateToOriginPoint(point, 'left', 'bottom'); expect(p).toEqual(new Point(-27.11155530110176, 41.78570426041465)); p = rect.translateToOriginPoint(point, 'right', 'center'); expect(p).toEqual(new Point(33.02134497435782, 32.61868159972301)); p = rect.translateToOriginPoint(point, 'right', 'top'); expect(p).toEqual(new Point(57.11155530110176, -1.7857042604146471)); p = rect.translateToOriginPoint(point, 'right', 'bottom'); expect(p).toEqual(new Point(8.931134647613884, 67.02306745986067)); }); it('getLocalPoint', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); p = normalizePoint(rect, point, 'center', 'center'); expect(p).toEqual(new Point(-42, -67)); p = normalizePoint(rect, point, 'center', 'top'); expect(p).toEqual(new Point(-42, -25)); p = normalizePoint(rect, point, 'center', 'bottom'); expect(p).toEqual(new Point(-42, -109)); p = normalizePoint(rect, point, 'left', 'center'); expect(p).toEqual(new Point(-20, -67)); p = normalizePoint(rect, point, 'left', 'top'); expect(p).toEqual(new Point(-20, -25)); p = normalizePoint(rect, point, 'left', 'bottom'); expect(p).toEqual(new Point(-20, -109)); p = normalizePoint(rect, point, 'right', 'center'); expect(p).toEqual(new Point(-64, -67)); p = normalizePoint(rect, point, 'right', 'top'); expect(p).toEqual(new Point(-64, -25)); p = normalizePoint(rect, point, 'right', 'bottom'); expect(p).toEqual(new Point(-64, -109)); p = normalizePoint(rect, point); expect(p).toEqual(new Point(-20, -25)); }); it('getLocalPoint rotated', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); rect.angle = 35; p = normalizePoint(rect, point, 'center', 'center'); expect(p).toEqual(new Point(-52.72245179455599, -51.00727238020387)); p = normalizePoint(rect, point, 'center', 'top'); expect(p).toEqual(new Point(-52.72245179455599, -9.007272380203872)); p = normalizePoint(rect, point, 'center', 'bottom'); expect(p).toEqual(new Point(-52.72245179455599, -93.00727238020387)); p = normalizePoint(rect, point, 'left', 'center'); expect(p).toEqual(new Point(-30.722451794555987, -51.00727238020387)); p = normalizePoint(rect, point, 'left', 'top'); expect(p).toEqual(new Point(-30.722451794555987, -9.007272380203872)); p = normalizePoint(rect, point, 'left', 'bottom'); expect(p).toEqual(new Point(-30.722451794555987, -93.00727238020387)); p = normalizePoint(rect, point, 'right', 'center'); expect(p).toEqual(new Point(-74.722451794556, -51.00727238020387)); p = normalizePoint(rect, point, 'right', 'top'); expect(p).toEqual(new Point(-74.722451794556, -9.007272380203872)); p = normalizePoint(rect, point, 'right', 'bottom'); expect(p).toEqual(new Point(-74.722451794556, -93.00727238020387)); p = normalizePoint(rect, point); expect(p).toEqual(new Point(-58.791317146942106, -3.9842049203432026)); }); it('translateToCenterPoint with numeric origins', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); p = rect.translateToCenterPoint(point, 0.5, 0.5); expect(p).toEqual(new Point(15, 20)); p = rect.translateToCenterPoint(point, 0.5, 0.5); expect(p).toEqual(new Point(15, 20)); p = rect.translateToCenterPoint(point, 0.5, 0); expect(p).toEqual(new Point(15, 62)); p = rect.translateToCenterPoint(point, 0.5, 1); expect(p).toEqual(new Point(15, -22)); p = rect.translateToCenterPoint(point, 0, 0.5); expect(p).toEqual(new Point(37, 20)); p = rect.translateToCenterPoint(point, 0, 0); expect(p).toEqual(new Point(37, 62)); p = rect.translateToCenterPoint(point, 0, 1); expect(p).toEqual(new Point(37, -22)); p = rect.translateToCenterPoint(point, 1, 0.5); expect(p).toEqual(new Point(-7, 20)); p = rect.translateToCenterPoint(point, 1, 0); expect(p).toEqual(new Point(-7, 62)); p = rect.translateToCenterPoint(point, 1, 1); expect(p).toEqual(new Point(-7, -22)); }); it('translateToCenterPointRotated with numeric origins', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); rect.angle = 35; p = rect.translateToCenterPoint(point, 0.5, 0.5); expect(p).toEqual(new Point(15, 20)); p = rect.translateToCenterPoint(point, 0.5, 0); expect(p).toEqual(new Point(-9.090210326743936, 54.40438586013766)); p = rect.translateToCenterPoint(point, 0.5, 1); expect(p).toEqual(new Point(39.090210326743936, -14.404385860137658)); p = rect.translateToCenterPoint(point, 0, 0.5); expect(p).toEqual(new Point(33.02134497435782, 32.61868159972301)); p = rect.translateToCenterPoint(point, 0, 0); expect(p).toEqual(new Point(8.931134647613884, 67.02306745986067)); p = rect.translateToCenterPoint(point, 0, 1); expect(p).toEqual(new Point(57.11155530110176, -1.7857042604146471)); p = rect.translateToCenterPoint(point, 1, 0.5); expect(p).toEqual(new Point(-3.0213449743578202, 7.381318400276987)); p = rect.translateToCenterPoint(point, 1, 0); expect(p).toEqual(new Point(-27.11155530110176, 41.78570426041465)); p = rect.translateToCenterPoint(point, 1, 1); expect(p).toEqual(new Point(21.068865352386116, -27.02306745986067)); }); it('translateToOriginPoint with numeric origins', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); p = rect.translateToOriginPoint(point, 0.5, 0.5); expect(p).toEqual(new Point(15, 20)); p = rect.translateToOriginPoint(point, 0.5, 0); expect(p).toEqual(new Point(15, -22)); p = rect.translateToOriginPoint(point, 0.5, 1); expect(p).toEqual(new Point(15, 62)); p = rect.translateToOriginPoint(point, 0, 0.5); expect(p).toEqual(new Point(-7, 20)); p = rect.translateToOriginPoint(point, 0, 0); expect(p).toEqual(new Point(-7, -22)); p = rect.translateToOriginPoint(point, 0, 1); expect(p).toEqual(new Point(-7, 62)); p = rect.translateToOriginPoint(point, 1, 0.5); expect(p).toEqual(new Point(37, 20)); p = rect.translateToOriginPoint(point, 1, 0); expect(p).toEqual(new Point(37, -22)); p = rect.translateToOriginPoint(point, 1, 1); expect(p).toEqual(new Point(37, 62)); }); it('translateToOriginPointRotated with numeric origins', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); rect.angle = 35; p = rect.translateToOriginPoint(point, 0.5, 0.5); expect(p).toEqual(new Point(15, 20)); p = rect.translateToOriginPoint(point, 0.5, 0); expect(p).toEqual(new Point(39.090210326743936, -14.404385860137658)); p = rect.translateToOriginPoint(point, 0.5, 1); expect(p).toEqual(new Point(-9.090210326743936, 54.40438586013766)); p = rect.translateToOriginPoint(point, 0, 0.5); expect(p).toEqual(new Point(-3.0213449743578202, 7.381318400276987)); p = rect.translateToOriginPoint(point, 0, 0); expect(p).toEqual(new Point(21.068865352386116, -27.02306745986067)); p = rect.translateToOriginPoint(point, 0, 1); expect(p).toEqual(new Point(-27.11155530110176, 41.78570426041465)); p = rect.translateToOriginPoint(point, 1, 0.5); expect(p).toEqual(new Point(33.02134497435782, 32.61868159972301)); p = rect.translateToOriginPoint(point, 1, 0); expect(p).toEqual(new Point(57.11155530110176, -1.7857042604146471)); p = rect.translateToOriginPoint(point, 1, 1); expect(p).toEqual(new Point(8.931134647613884, 67.02306745986067)); }); it('normalizePoint with numeric origins', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); p = normalizePoint(rect, point, 0.5, 0.5); expect(p).toEqual(new Point(-42, -67)); p = normalizePoint(rect, point, 0.5, 0); expect(p).toEqual(new Point(-42, -25)); p = normalizePoint(rect, point, 0.5, 1); expect(p).toEqual(new Point(-42, -109)); p = normalizePoint(rect, point, 0, 0.5); expect(p).toEqual(new Point(-20, -67)); p = normalizePoint(rect, point, 0, 0); expect(p).toEqual(new Point(-20, -25)); p = normalizePoint(rect, point, 0, 1); expect(p).toEqual(new Point(-20, -109)); p = normalizePoint(rect, point, 1, 0.5); expect(p).toEqual(new Point(-64, -67)); p = normalizePoint(rect, point, 1, 0); expect(p).toEqual(new Point(-64, -25)); p = normalizePoint(rect, point, 1, 1); expect(p).toEqual(new Point(-64, -109)); p = normalizePoint(rect, point); expect(p).toEqual(new Point(-20, -25)); }); it('toLocalPointRotated with numeric origins', () => { const rect = new Rect(rectOptions); let p; const point = new Point(15, 20); rect.angle = 35; p = normalizePoint(rect, point, 0.5, 0.5); expect(p).toEqual(new Point(-52.72245179455599, -51.00727238020387)); p = normalizePoint(rect, point, 0.5, 0); expect(p).toEqual(new Point(-52.72245179455599, -9.007272380203872)); p = normalizePoint(rect, point, 0.5, 1); expect(p).toEqual(new Point(-52.72245179455599, -93.00727238020387)); p = normalizePoint(rect, point, 0, 0.5); expect(p).toEqual(new Point(-30.722451794555987, -51.00727238020387)); p = normalizePoint(rect, point, 0, 0); expect(p).toEqual(new Point(-30.722451794555987, -9.007272380203872)); p = normalizePoint(rect, point, 0, 1); expect(p).toEqual(new Point(-30.722451794555987, -93.00727238020387)); p = normalizePoint(rect, point, 1, 0.5); expect(p).toEqual(new Point(-74.722451794556, -51.00727238020387)); p = normalizePoint(rect, point, 1, 0); expect(p).toEqual(new Point(-74.722451794556, -9.007272380203872)); p = normalizePoint(rect, point, 1, 1); expect(p).toEqual(new Point(-74.722451794556, -93.00727238020387)); p = normalizePoint(rect, point); expect(p).toEqual(new Point(-58.791317146942106, -3.9842049203432026)); }); });