Files
Genarrative/packages/image-canvas-react/src/ZoomControls.tsx
T
menghao 03a4410272
Project CI / Native shell tests (push) Failing after 11m56s
Project CI / Repository checks (push) Successful in 1m5s
Project CI / Frontend tests (push) Successful in 3m20s
Project CI / Backend tests (push) Successful in 4m1s
game agent无限画布开发 (#136)
主要工作是共享同一套“画布内核与通用 UI 源码”,网站和 Tauri 只分别实现宿主适配层。

---------

Co-authored-by: 段舒康 <kdletters@qq.com>
Co-authored-by: kdletters <kdletters@qq.com>
Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/136
Co-authored-by: menghao <mh18530625731@163.com>
Co-committed-by: menghao <mh18530625731@163.com>
2026-08-12 10:54:16 +08:00

37 lines
1016 B
TypeScript

import {
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 * 1.16),
zoomOut: () => onScaleFromCenter(viewport.scale * 0.86),
zoomToDisplayScale: (displayScale) =>
onScaleFromCenter(canvasDisplayScaleToViewportScale(displayScale)),
};
return <>{children(actions)}</>;
}