画布交互: - 滚轮缩放视口(2%~1600%),纯滚轮 10%/tick,Ctrl/Cmd+滚轮 3%/tick 精细控制 - 鼠标拖拽平移画布,Ctrl/Cmd+0 重置缩放 - 预览打开时锁定底层视口(previewActiveRef 事件穿透防护) - 预览内图片独立滚轮缩放 + 拖拽平移 + 缩放指示器 文件拖拽: - 画布缩略图/预览支持原生文件拖拽到外部应用(startDrag IPC) Bug 修复: - local-media:// 协议支持 UNC 网络路径 - passive event listener 报错:window 级原生 wheel listener 替代 React onWheel - Zustand v5 getState() 批处理旧值:改用 ref(currentZoomRef + setZoomRef)读写 主进程(electron/main.ts): - 画布窗口 before-input-event 拦截 Chromium 页面缩放 - 新增 canvas-ipc.ts(startDrag、文件扫描等 IPC handler)
96 lines
3.7 KiB
TypeScript
96 lines
3.7 KiB
TypeScript
// ============================================================
|
||
// IPC 通道名称常量 —— 避免魔法字符串
|
||
// ============================================================
|
||
|
||
/** 主进程 → 渲染进程 */
|
||
export const MAIN_TO_RENDERER = {
|
||
/** 主进程消息推送 */
|
||
MAIN_PROCESS_MESSAGE: 'main-process-message',
|
||
/** 主题变更通知 */
|
||
THEME_CHANGED: 'theme-changed',
|
||
/** 窗口聚焦通知 */
|
||
WINDOW_FOCUSED: 'window-focused',
|
||
/** 窗口失焦通知 */
|
||
WINDOW_BLURRED: 'window-blurred',
|
||
/** 画布窗口准备就绪 */
|
||
CANVAS_READY: 'canvas:ready',
|
||
/** 画布扫描进度 */
|
||
CANVAS_SCAN_PROGRESS: 'canvas:scan-progress',
|
||
} as const;
|
||
|
||
/** 渲染进程 → 主进程 */
|
||
export const RENDERER_TO_MAIN = {
|
||
/** 打开子窗口 */
|
||
OPEN_SUB_WINDOW: 'open-sub-window',
|
||
/** 关闭子窗口 */
|
||
CLOSE_SUB_WINDOW: 'close-sub-window',
|
||
/** 设置窗口标题 */
|
||
SET_WINDOW_TITLE: 'set-window-title',
|
||
/** 获取平台信息 */
|
||
GET_PLATFORM_INFO: 'get-platform-info',
|
||
/** 最小化窗口 */
|
||
MINIMIZE_WINDOW: 'minimize-window',
|
||
/** 最大化/还原窗口 */
|
||
TOGGLE_MAXIMIZE: 'toggle-maximize',
|
||
/** 关闭窗口 */
|
||
CLOSE_WINDOW: 'close-window',
|
||
/** 渲染进程日志上报 */
|
||
LOG_MESSAGE: 'log-message',
|
||
/** 画布:打开无限画布窗口 */
|
||
OPEN_CANVAS_WINDOW: 'canvas:open-window',
|
||
} as const;
|
||
|
||
/** 双向通信通道 */
|
||
export const BIDIRECTIONAL = {
|
||
/** 读取应用配置 */
|
||
READ_CONFIG: 'read-config',
|
||
/** 写入应用配置 */
|
||
WRITE_CONFIG: 'write-config',
|
||
/** 文件对话框 */
|
||
FILE_DIALOG: 'file-dialog',
|
||
/** safeStorage 加密(明文 → Base64 密文) */
|
||
SAFESTORAGE_ENCRYPT: 'safe-storage:encrypt',
|
||
/** safeStorage 解密(Base64 密文 → 明文) */
|
||
SAFESTORAGE_DECRYPT: 'safe-storage:decrypt',
|
||
/** 文件写入(Blob Buffer → 磁盘) */
|
||
FILE_WRITE: 'storage:file-write',
|
||
/** 文件读取(磁盘 → Base64) */
|
||
FILE_READ: 'storage:file-read',
|
||
/** 文件删除 */
|
||
FILE_DELETE: 'storage:file-delete',
|
||
/** 创建目录(递归) */
|
||
MAKE_DIR: 'storage:make-dir',
|
||
/** 在文件管理器中显示文件 */
|
||
SHOW_ITEM_IN_FOLDER: 'storage:show-item-in-folder',
|
||
/** 获取应用数据目录路径 */
|
||
GET_DATA_DIR: 'storage:get-data-dir',
|
||
/** 获取文件大小 */
|
||
FILE_SIZE: 'storage:file-size',
|
||
/** 文件/目录是否存在 */
|
||
FILE_EXISTS: 'storage:file-exists',
|
||
/** 画布:扫描目录 */
|
||
CANVAS_SCAN_DIRECTORY: 'canvas:scan-directory',
|
||
/** 画布:扫描项目(接收 projectPath,主进程内部完成 buildScanRoots + walkDirectory) */
|
||
CANVAS_SCAN_PROJECT: 'canvas:scan-project',
|
||
/** 画布:读取 sidecar 元数据 */
|
||
CANVAS_READ_SIDECAR: 'canvas:read-sidecar',
|
||
/** 画布:写入 sidecar 元数据 */
|
||
CANVAS_WRITE_SIDECAR: 'canvas:write-sidecar',
|
||
/** 画布:生成缩略图 */
|
||
CANVAS_GENERATE_THUMBNAIL: 'canvas:generate-thumbnail',
|
||
/** 画布:复制文件(导入) */
|
||
CANVAS_COPY_FILE: 'canvas:copy-file',
|
||
/** 画布:获取原生图片尺寸 */
|
||
CANVAS_GET_IMAGE_SIZE: 'canvas:get-image-size',
|
||
/** 画布:列出目录下的子文件夹(非递归,排除隐藏) */
|
||
CANVAS_LIST_SUBDIRS: 'canvas:list-subdirs',
|
||
/** 画布:扫描阶段文件(单个 episode/shot/stage 组合) */
|
||
CANVAS_SCAN_STAGE_FILES: 'canvas:scan-stage-files',
|
||
/** 画布:扫描资产文件(深度递归扫描 assets/ 目录) */
|
||
CANVAS_SCAN_ASSET_FILES: 'canvas:scan-asset-files',
|
||
/** 画布:创建目录 */
|
||
CANVAS_CREATE_DIRECTORY: 'canvas:create-directory',
|
||
/** 画布:启动原生文件拖拽(拖放媒体文件到外部应用) */
|
||
CANVAS_START_DRAG: 'canvas:start-drag',
|
||
} as const;
|