import type { TLBounds, TLShape, TLTransformInfo } from '@tldraw/core' import Vec from '@tldraw/vec' /** * Transform a rectangular shape. * @param shape * @param bounds * @param param2 */ export function transformRectangle( shape: T, bounds: TLBounds, { initialShape, transformOrigin, scaleX, scaleY }: TLTransformInfo ) { if (shape.rotation || initialShape.isAspectRatioLocked) { const size = Vec.toFixed( Vec.mul(initialShape.size, Math.min(Math.abs(scaleX), Math.abs(scaleY))) ) const point = Vec.toFixed([ bounds.minX + (bounds.width - shape.size[0]) * (scaleX < 0 ? 1 - transformOrigin[0] : transformOrigin[0]), bounds.minY + (bounds.height - shape.size[1]) * (scaleY < 0 ? 1 - transformOrigin[1] : transformOrigin[1]), ]) const rotation = (scaleX < 0 && scaleY >= 0) || (scaleY < 0 && scaleX >= 0) ? initialShape.rotation ? -initialShape.rotation : 0 : initialShape.rotation return { size, point, rotation, } } else { return { point: Vec.toFixed([bounds.minX, bounds.minY]), size: Vec.toFixed([bounds.width, bounds.height]), } } }