统一画布视口缩放兜底逻辑
提取 getSafeViewportScale 供 world transform 与逆缩放变量复用 导出共享缩放辅助函数并保持现有渲染行为
This commit is contained in:
@@ -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 (
|
||||
<div
|
||||
|
||||
@@ -2,9 +2,15 @@ import type { CanvasViewport } from '@genarrative/image-canvas-core';
|
||||
|
||||
export const CANVAS_RENDER_SUPERSAMPLE = 2;
|
||||
|
||||
/** 将 viewport scale 规范化为可用于渲染和反向缩放的正有限值。 */
|
||||
export function getSafeViewportScale(viewport: CanvasViewport) {
|
||||
return Number.isFinite(viewport.scale) && viewport.scale > 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})`;
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user