4db6d28603
* 提示词:完善组件建议,增加容器背景与节点大小一致的实现 * 支持Delete删除节点 ctrl + -缩放 * 步骤结束弹窗提醒   * UI 树快捷删除  * zoom滑动条样式 before:  after:  Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/278 Co-authored-by: 王德宇 <kvtodev@outlook.com> Co-committed-by: 王德宇 <kvtodev@outlook.com>
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import {
|
|
CANVAS_ZOOM_IN_FACTOR,
|
|
CANVAS_ZOOM_OUT_FACTOR,
|
|
canvasDisplayScaleToViewportScale,
|
|
type CanvasViewport,
|
|
formatCanvasDisplayScalePercent,
|
|
} from '@genarrative/image-canvas-core';
|
|
import type { ReactNode } from 'react';
|
|
|
|
export type CanvasZoomActions = {
|
|
displayPercent: string;
|
|
fit: () => void;
|
|
zoomIn: () => void;
|
|
zoomOut: () => void;
|
|
zoomToDisplayScale: (displayScale: number) => void;
|
|
};
|
|
|
|
export function ZoomControls({
|
|
children,
|
|
onFit,
|
|
onScaleFromCenter,
|
|
viewport,
|
|
}: {
|
|
children: (actions: CanvasZoomActions) => ReactNode;
|
|
onFit: () => void;
|
|
onScaleFromCenter: (scale: number) => void;
|
|
viewport: CanvasViewport;
|
|
}) {
|
|
const actions: CanvasZoomActions = {
|
|
displayPercent: formatCanvasDisplayScalePercent(viewport.scale),
|
|
fit: onFit,
|
|
zoomIn: () => onScaleFromCenter(viewport.scale * CANVAS_ZOOM_IN_FACTOR),
|
|
zoomOut: () => onScaleFromCenter(viewport.scale * CANVAS_ZOOM_OUT_FACTOR),
|
|
zoomToDisplayScale: (displayScale) =>
|
|
onScaleFromCenter(canvasDisplayScaleToViewportScale(displayScale)),
|
|
};
|
|
return <>{children(actions)}</>;
|
|
}
|