From 0dea119a4ea503e1d15c196cd6932206602d3eee Mon Sep 17 00:00:00 2001 From: ila Date: Sat, 4 Jul 2026 17:21:48 +0800 Subject: [PATCH] docs: specify esc hide preview controls --- docs/08-image-editor-design.md | 30 ++++++++++++++++++++++++++++++ tasks.md | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/docs/08-image-editor-design.md b/docs/08-image-editor-design.md index 32f8e3d..4816e06 100644 --- a/docs/08-image-editor-design.md +++ b/docs/08-image-editor-design.md @@ -102,6 +102,33 @@ Scene 坐标是 `QGraphicsScene` 中的坐标。 - 选中框和控制点仅用于交互,不参与最终导出。 - 操作提示仅显示在 UI 中,不参与最终导出。 +### 5.1 预览控制层显隐 + +预览区的印花选中框、缩放控制点、旋转连接线和旋转控制点属于交互控制层。该控制层只帮助用户识别和操作当前印花,不属于图片内容。 + +按键行为: + +- 当预览区拥有键盘焦点时,按 `Esc` 应隐藏当前印花的交互控制层。 +- `Esc` 只隐藏印花选中框、缩放控制点、旋转连接线和旋转控制点,不隐藏印花图片本身。 +- `Esc` 不执行撤销,不回滚当前拖动、缩放或旋转结果,不修改 `TransformState`。 +- 如果焦点在参数输入框、文件列表或其他控件中,预览区可以不响应该次 `Esc`。 + +焦点规则: + +- `QGraphicsView` 应允许获得键盘焦点。 +- 用户点击预览区时,预览区应获得焦点,以便后续 `Esc` 能被画布接收。 + +恢复规则: + +- 控制层被隐藏后,用户再次点击预览区中的印花图片,应恢复控制层,并继续沿用原有拖动逻辑。 +- 控制层隐藏期间,隐藏的缩放控制点和旋转控制点不需要响应命中测试;恢复后原有缩放、旋转行为保持不变。 +- 重新加载印花图片或创建新的印花图层时,控制层默认显示。 + +一致性规则: + +- 控制层显隐状态不参与模板保存、队列项保存、单张导出或批量导出。 +- 最终导出仍只读取 `TransformState` 和原始图片,不读取控制层显隐状态。 + ## 6. 状态模型 印花变换状态使用统一模型表示: @@ -567,6 +594,9 @@ RGB 颜色距离 - 预览缩放到 50% 或 200% 后,拖动仍能得到正确原图坐标。 - 参数面板输入后预览同步。 - 预览拖动后参数面板同步。 +- 点击预览区后按 `Esc`,印花选中框、缩放控制点和旋转控制点隐藏,但印花仍可见。 +- 控制层隐藏后再次点击印花,控制层恢复,拖动、缩放、旋转仍按原有规则工作。 +- 控制层显隐不改变 `TransformState`,也不影响导出结果。 - 白色衣服配浅色印花时能标记为低对比或不明显。 - 深色衣服配深色印花时能标记为低对比或不明显。 - 透明 PNG 的透明区域不参与印花主色判断。 diff --git a/tasks.md b/tasks.md index bda26c2..25bc155 100644 --- a/tasks.md +++ b/tasks.md @@ -1643,3 +1643,35 @@ - [x] 成功/失败状态一眼可辨 - [x] 不影响原有等待计时、写回进度和复位行为 - [x] 验证:`python -m py_compile src/app/widgets/ai_outfit_panel.py tests/test_ai_outfit_panel.py`、`python tests/test_ai_outfit_panel.py`、离屏启动主窗口通过;全套 `python -m unittest discover -s tests` 仅失败于既有未提交 `packaging/default_config/ai_models.json` 含非空 `api_key`,与本任务无关 + +### 19.34 添加印花预览:Esc 隐藏选中框与控制点 — docs/08 §5.1 + +前置阅读: + +- `docs/08-image-editor-design.md`(§5.1 预览控制层显隐) +- `src/app/widgets/image_canvas.py`(`_CanvasView`、`_sel_rect`、`_corner_handles`、`_rot_line`、`_rot_handle`、`_hit_test`、`_on_press`) +- `tests/` 中现有离屏 GUI 测试写法 + +背景: + +「添加印花」模块中,选择衣服文件夹和印花文件夹后,中间预览区域会把印花叠加在衣服图片上,并显示蓝色选中框、缩放控制点和旋转控制点。用户希望按 `Esc` 时临时隐藏这些控制框和控制点,让预览更接近最终效果;之后再次点击预览区的印花时,仍能恢复并按原有方式拖动、缩放、旋转。 + +任务: + +- [ ] `image_canvas.py`:让 `_CanvasView` 可以获得键盘焦点,并在点击预览区时获取焦点 +- [ ] `image_canvas.py`:新增控制层显隐状态,例如 `_controls_visible` +- [ ] `image_canvas.py`:新增统一方法显示 / 隐藏 `_sel_rect`、`_corner_handles`、`_rot_line`、`_rot_handle` +- [ ] `image_canvas.py`:按 `Esc` 时只隐藏交互控制层,不隐藏 `_print_item` +- [ ] `image_canvas.py`:按 `Esc` 不修改 `TransformState`,不触发导出参数变化 +- [ ] `image_canvas.py`:控制层隐藏后,点击印花图片先恢复控制层,再沿用现有拖动逻辑 +- [ ] `image_canvas.py`:隐藏期间缩放控制点和旋转控制点不需要响应命中测试;恢复后原有缩放、旋转行为保持不变 +- [ ] `image_canvas.py`:重新加载印花图片或创建新的印花图层时,控制层默认显示 +- [ ] 测试或离屏验证:覆盖 `Esc` 隐藏、点击印花恢复、`TransformState` 不变 + +验收: + +- [ ] 点击预览区后按 `Esc`,蓝色选中框、缩放控制点、旋转连接线和旋转控制点隐藏 +- [ ] 按 `Esc` 后印花图片仍然显示,预览不变为空白 +- [ ] 控制层隐藏后再次点击印花,控制层恢复,并可继续拖动、缩放、旋转 +- [ ] 控制层显隐不改变 X/Y、宽高、角度,也不影响单张导出和批量导出 +- [ ] 通过必要语法检查和离屏 GUI 验证