统一预览画布适配与缩放滑杆计算
自动适配复用 fitToCanvas,避免重复计算;滑杆直接从原始缩放比例计算步进值。
This commit is contained in:
+6
-23
@@ -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) =>
|
||||
|
||||
Reference in New Issue
Block a user