From d1a03aec0e734a3a0ba8363b2b934ea4aea2a4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 12 Sep 2026 21:29:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=A2=84=E8=A7=88=E7=94=BB?= =?UTF-8?q?=E5=B8=83=E9=80=82=E9=85=8D=E4=B8=8E=E7=BC=A9=E6=94=BE=E6=BB=91?= =?UTF-8?q?=E6=9D=86=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自动适配复用 fitToCanvas,避免重复计算;滑杆直接从原始缩放比例计算步进值。 --- .../components/preview/PreviewWorkspace.tsx | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx b/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx index 8ec753d09..26203c35a 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx +++ b/apps/ai-game-creator-shell/src/view/ui-editor/components/preview/PreviewWorkspace.tsx @@ -10,6 +10,7 @@ import { moveViewportFromPan, resolveViewportFromWheel, scaleViewportFromScreenPoint, + viewportScaleToCanvasDisplayScale, } from '@genarrative/image-canvas-core'; import { CanvasViewport as SharedCanvasViewport, @@ -162,28 +163,8 @@ export function PreviewWorkspace({ useEffect(() => { if (!activeImageId || !logicalSize) return; - const element = viewportElementRef.current; - setViewport( - fitViewportToBounds({ - bounds: { - x: 0, - y: 0, - width: logicalSize.width, - height: logicalSize.height, - }, - canvasSize: { - width: element?.clientWidth || canvasSizeRef.current.width, - height: element?.clientHeight || canvasSizeRef.current.height, - }, - }), - ); - }, [ - activeImageId, - canvasSize.height, - canvasSize.width, - logicalSize, - setViewport, - ]); + fitToCanvas(); + }, [activeImageId, fitToCanvas, logicalSize]); const scaleViewportFromCenter = useCallback( (nextScale: number) => { @@ -560,7 +541,9 @@ export function PreviewWorkspace({ min={25} max={200} step={5} - value={Math.round(Number.parseInt(displayPercent, 10))} + value={Math.round( + viewportScaleToCanvasDisplayScale(viewport.scale) * 100, + )} aria-label="画布缩放" className="h-1 w-28 accent-orange-500" onChange={(event) =>