From 8d34d423772b60fbdd186b54b6017ccfeaf4a1b0 Mon Sep 17 00:00:00 2001 From: Hiren Kangad Date: Fri, 13 Mar 2026 15:05:54 +0530 Subject: [PATCH] refboard: preserve center when rotating items --- frontend/src/canvas/operations.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/frontend/src/canvas/operations.ts b/frontend/src/canvas/operations.ts index d07b922..a16fd16 100644 --- a/frontend/src/canvas/operations.ts +++ b/frontend/src/canvas/operations.ts @@ -485,6 +485,9 @@ export function scaleBy(objects: SceneItem[], factor: number) { export function rotate90(objects: SceneItem[], clockwise: boolean) { objects.forEach((item) => { + const before = bounds(item); + const cx = before.x + before.w / 2; + const cy = before.y + before.h / 2; item.data.angle = ((item.data.angle + (clockwise ? 90 : -90)) % 360 + 360) % 360; if (item.type === 'image') { const t = getImageDisplayTransform(item.data as ImageObject); @@ -493,6 +496,20 @@ export function rotate90(objects: SceneItem[], clockwise: boolean) { } else { item.displayObject.angle = item.data.angle; } + const after = bounds(item); + item.data.x += cx - (after.x + after.w / 2); + item.data.y += cy - (after.y + after.h / 2); + if (item.type === 'image') { + const t = getImageDisplayTransform(item.data as ImageObject); + item.displayObject.x = t.x; + item.displayObject.y = t.y; + item.displayObject.angle = t.angle; + item.displayObject.scale.set(t.scaleX, t.scaleY); + } else { + item.displayObject.x = item.data.x; + item.displayObject.y = item.data.y; + item.displayObject.angle = item.data.angle; + } }); }