diff --git a/packages/image-canvas-react/src/CanvasWorld.tsx b/packages/image-canvas-react/src/CanvasWorld.tsx
index 7698a9d23..bc089d1ce 100644
--- a/packages/image-canvas-react/src/CanvasWorld.tsx
+++ b/packages/image-canvas-react/src/CanvasWorld.tsx
@@ -7,6 +7,7 @@ import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';
import {
CANVAS_RENDER_SUPERSAMPLE,
canvasViewportToWorldTransform,
+ getSafeViewportScale,
} from './canvasWorldRendering';
export function CanvasWorld({
@@ -21,8 +22,7 @@ export function CanvasWorld({
viewport: CanvasViewport;
worldSize?: number;
}) {
- const viewportScale =
- Number.isFinite(viewport.scale) && viewport.scale > 0 ? viewport.scale : 1;
+ const viewportScale = getSafeViewportScale(viewport);
return (
0
+ ? viewport.scale
+ : 1;
+}
+
/** 将逻辑 viewport 转换为 world 的渲染 transform。 */
export function canvasViewportToWorldTransform(viewport: CanvasViewport) {
- const scale =
- Number.isFinite(viewport.scale) && viewport.scale > 0 ? viewport.scale : 1;
+ const scale = getSafeViewportScale(viewport);
return `translate(${viewport.x}px, ${viewport.y}px) scale(${scale / CANVAS_RENDER_SUPERSAMPLE})`;
}
diff --git a/packages/image-canvas-react/src/index.ts b/packages/image-canvas-react/src/index.ts
index ea4d68259..a1ea0ab9d 100644
--- a/packages/image-canvas-react/src/index.ts
+++ b/packages/image-canvas-react/src/index.ts
@@ -2,7 +2,10 @@ export * from './CanvasChrome';
export * from './CanvasPortal';
export * from './CanvasViewport';
export * from './CanvasWorld';
-export { canvasViewportToWorldTransform } from './canvasWorldRendering';
+export {
+ canvasViewportToWorldTransform,
+ getSafeViewportScale,
+} from './canvasWorldRendering';
export * from './LayerRenderer';
export * from './Minimap';
export * from './SelectionOverlay';