Repository navigation
feat(canvas): 新建菜单——从端口拖线(落卡上连线、落空白处按首帧 / 尾帧 / 参考 / 下一镜建节点并连好)+ 双击空白 / Tab / 右键「新建…」 - #291
Merged
Merged
Conversation
- 节点卡出端口可拖:实时虚线(accent、1.75、虚线 4/3、末端 3.5 实心点,与连线同一条贝塞尔,画在卡片之上); 拖线期间候选卡片按连线模式高亮、舞台不平移、Esc 取消;平移工具开着时端口不可拖。落在另一张卡上走 LinkActionController.linkTo;落在空白处在松手点开新建菜单(带源节点上下文);落回源卡片什么都不做。 卡片外观不动,只在圆点外加一圈透明命中区;拖线途中端口一直亮着。 - 新建菜单(widgets/create_node_menu.dart):搜索框一打开就持焦、按文字过滤、空匹配一行;↑↓ / ↵ / Esc, 悬停移高亮;点外面或焦点整个离开就关,关了焦点落空时还给画布。带上下文:图像源出当首帧 / 当尾帧 / 当参考,配置节点出「下一镜(叙事)」(叙事链只连配置节点,产物 / 文本源不出);不带上下文:图像配置 / 视频配置 / 文本 / 镜头 / 泳道,键位提示取 CanvasToolKeys。 - 执行(canvas_tool_actions.addNodeFromMenu):先 addNode(落进泳道再补 lane_id)再 addEdge,任一步失败 回滚删节点 + 错误卡;成功挂定位请求单选新节点。落点与拖卡片落点共用 resolveLaneDrop(从 canvas_view 抽到 util/drop_placement.dart)。 - 空白处右键菜单:新建… / 导入脚本… / 全选 / 适应视图(粘贴、导入媒体无后端不放,BOARD 记🅿️ )。 双击自己数指针按下,不进手势竞技场,单击不变慢。 - Tab = 新建…:只在画布快捷键层自己持主焦点时接管(_CanvasFocusedAction),别处的 Tab 放行给焦点遍历; 进设置快捷键清单。Esc 多两层:先拖线、再菜单。 - ARB 加菜单文案(未跑 gen-l10n);docs/CLAUDE.md 结构快照;测试:菜单项判据、落点换算、菜单本体键盘 / 搜索、画布接线(拖线 / 回滚 / Esc / 平移 / 三个入口 / Tab 让位)、快捷键清单。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 「下一镜」的叙事边一律连在配置节点上:从产物卡拖出来时以它的来源配置节点为锚(稿上的示例源 正是「镜头 01 · 成片」);视频产物源因此至少还有这一项,不再是空菜单。文本卡、孤儿产物不出。 - CanvasFocusRequest 加 center 开关:新建菜单建出来的节点就落在用户刚点的地方,只单选、不挪相机。 - CanvasNodesController.addNode 加 laneId(仓储 create 早就支持),删掉「先建再 moveNode 补泳道」的 第二次写入;补一条落进泳道的用例。 - gen-l10n。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…单里被截断 中文「当首帧 · 新建视频配置」放得下,英文三项改成「First frame · New video」等,菜单宽度仍按稿。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
做了什么
画布交互的第一批,对应设计稿「拖线到空白处 → 建节点」:省掉「先建节点、再连线」这一步。这是画布重设计的 PR-8a。
从输出端口拖线
linkTo。智能默认角色、重复连线判定、结果提示都和连线模式一样。addNode新增了laneId参数,仓储的create本来就支持。center开关。不带连线上下文的入口:下面三处打开同一个菜单,菜单项是图像配置(I)、视频配置(G)、文本(T)、镜头、泳道(F)。
菜单本身
刻意没做的(已记进 BOARD):右键菜单里的剪切 / 复制 / 粘贴、导入媒体。目前没有剪贴板,也没有媒体导入的后端。
截图
截图由 widget test 渲染,界面是英文。产物卡上显示的是文件路径而不是图片,这是测试环境里卡片的异步读图没跑完,与本 PR 无关。
验证
flutter analyze lib test:无问题。flutter test --exclude-tags golden:3199 通过,0 失败。已知的小问题
画布重设计 PR-8a。
🤖 Generated with Claude Code