From ba04955ee587bc433e981d467d8c847d395d3e72 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Mon, 27 Apr 2026 14:36:49 +0900 Subject: [PATCH] =?UTF-8?q?fix(study):=20legacy=20stroke=20=EB=8F=84=20?= =?UTF-8?q?=EC=B2=AB=20draw=20=EC=8B=9C=EC=A0=90=EC=97=90=20refW/refH=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이전 commit (33060e9) 의 drawStrokeScaled 가 refW 없는 legacy stroke 는 1배로 그려서 fix 효과가 새 stroke 에만 적용. 사용자 환경의 기존 stroke 129개에는 비례 보정 안 됐음. Fix: drawStrokeScaled 안에서 refW 없으면 *첫 draw 시점*의 cssWidth/cssHeight 로 자동 set. 그 후 cssWidth 변화 (button click 의 layout shift / 창 크기 조정) 시 ctx.scale 비례 적용. load 시점 cssWidth = 사용자가 그 strokes 를 보는 환경의 dimension 이므로 일관된 기준. → 기존 세션 그대로 두어도 button click / 창 이동 시 stroke 위치 보존. --- frontend/src/lib/components/HandwriteCanvas.svelte | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/components/HandwriteCanvas.svelte b/frontend/src/lib/components/HandwriteCanvas.svelte index 0517b44..e65b532 100644 --- a/frontend/src/lib/components/HandwriteCanvas.svelte +++ b/frontend/src/lib/components/HandwriteCanvas.svelte @@ -239,10 +239,13 @@ } // stroke 의 refW/refH 와 현재 cssWidth/cssHeight 비례로 ctx.scale 적용 후 그림. - // refW 없는 (legacy) stroke 는 현재 cssWidth/cssHeight 기준 = 1배 (load 시점 기준). + // legacy stroke (refW 없음) 은 *첫 draw 시점* 의 cssWidth/cssHeight 로 fix — + // 그 후 cssWidth 변화 (button click 의 layout shift / 창 크기 조정) 시 비례 유지. function drawStrokeScaled(ctx: CanvasRenderingContext2D, s: Stroke, isInflight: boolean) { - const sx = s.refW && s.refW > 0 ? cssWidth / s.refW : 1; - const sy = s.refH && s.refH > 0 ? cssHeight / s.refH : 1; + if (!s.refW || s.refW <= 0) s.refW = cssWidth; + if (!s.refH || s.refH <= 0) s.refH = cssHeight; + const sx = cssWidth / s.refW; + const sy = cssHeight / s.refH; if (sx === 1 && sy === 1) { drawStroke(ctx, s, isInflight); return;