拆分图片画布舞台交互

新增画布舞台交互 hook,承接选择、框选、拖拽、平移和小地图 pointer 状态机

更新历史恢复清理入口,撤销重做时统一重置舞台交互状态

补充舞台交互 hook 测试并更新前端拆分文档和 TRACKING 记录
This commit is contained in:
2026-06-17 10:04:32 +08:00
parent 31cc1f0473
commit 31da3b2fa2
7 changed files with 1307 additions and 429 deletions

View File

@@ -5,12 +5,8 @@ import type {
CanvasGenerationDialogState,
CanvasHistorySnapshot,
CanvasLayer,
CanvasMarqueeState,
CanvasContextMenuState,
CanvasViewport,
GenerateDialogState,
ImageContextMenuState,
SnapGuide,
} from './ImageCanvasEditorTypes';
type CanvasHistoryRefs = {
@@ -36,12 +32,7 @@ type CanvasHistorySetters = {
type CanvasHistoryResetters = {
setHoveredLayerId: (layerId: string | null) => void;
setMetadataLayer: (layer: CanvasLayer | null) => void;
setCanvasMarquee: (marquee: CanvasMarqueeState | null) => void;
setSnapGuide: (guide: SnapGuide | null) => void;
setImageContextMenu: (menu: ImageContextMenuState | null) => void;
setContextMenu: (menu: CanvasContextMenuState | null) => void;
setIsPanning: (isPanning: boolean) => void;
clearDragState: () => void;
resetCanvasInteractionState: () => void;
};
function cloneGenerateDialog(dialog: GenerateDialogState): GenerateDialogState {
@@ -104,12 +95,7 @@ export function useCanvasHistory({
setters.setSelectedLayerIds([...snapshot.selectedLayerIds]);
resetters.setHoveredLayerId(null);
resetters.setMetadataLayer(null);
resetters.setCanvasMarquee(null);
resetters.setSnapGuide(null);
resetters.setImageContextMenu(null);
resetters.setContextMenu(null);
resetters.setIsPanning(false);
resetters.clearDragState();
resetters.resetCanvasInteractionState();
},
[resetters, setters],
);