统一预览画布适配与缩放滑杆计算

自动适配复用 fitToCanvas,避免重复计算;滑杆直接从原始缩放比例计算步进值。
This commit is contained in:
2026-09-12 21:29:04 +08:00
parent b90d12c5fb
commit d1a03aec0e
@@ -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) =>