feat: hide preview controls on empty click
This commit is contained in:
@@ -121,6 +121,7 @@ Scene 坐标是 `QGraphicsScene` 中的坐标。
|
|||||||
恢复规则:
|
恢复规则:
|
||||||
|
|
||||||
- 控制层被隐藏后,用户再次点击预览区中的印花图片,应恢复控制层,并继续沿用原有拖动逻辑。
|
- 控制层被隐藏后,用户再次点击预览区中的印花图片,应恢复控制层,并继续沿用原有拖动逻辑。
|
||||||
|
- 控制层显示时,用户点击没有命中印花图片、缩放控制点或旋转控制点的预览空白区域,应隐藏控制层。
|
||||||
- 控制层隐藏期间,隐藏的缩放控制点和旋转控制点不需要响应命中测试;恢复后原有缩放、旋转行为保持不变。
|
- 控制层隐藏期间,隐藏的缩放控制点和旋转控制点不需要响应命中测试;恢复后原有缩放、旋转行为保持不变。
|
||||||
- 重新加载印花图片或创建新的印花图层时,控制层默认显示。
|
- 重新加载印花图片或创建新的印花图层时,控制层默认显示。
|
||||||
|
|
||||||
@@ -595,6 +596,7 @@ RGB 颜色距离
|
|||||||
- 参数面板输入后预览同步。
|
- 参数面板输入后预览同步。
|
||||||
- 预览拖动后参数面板同步。
|
- 预览拖动后参数面板同步。
|
||||||
- 点击预览区后按 `Esc`,印花选中框、缩放控制点和旋转控制点隐藏,但印花仍可见。
|
- 点击预览区后按 `Esc`,印花选中框、缩放控制点和旋转控制点隐藏,但印花仍可见。
|
||||||
|
- 点击预览区灰色空白区域或衣服图上未命中印花的位置,印花选中框、缩放控制点和旋转控制点隐藏。
|
||||||
- 控制层隐藏后再次点击印花,控制层恢复,拖动、缩放、旋转仍按原有规则工作。
|
- 控制层隐藏后再次点击印花,控制层恢复,拖动、缩放、旋转仍按原有规则工作。
|
||||||
- 控制层显隐不改变 `TransformState`,也不影响导出结果。
|
- 控制层显隐不改变 `TransformState`,也不影响导出结果。
|
||||||
- 白色衣服配浅色印花时能标记为低对比或不明显。
|
- 白色衣服配浅色印花时能标记为低对比或不明显。
|
||||||
|
|||||||
@@ -508,6 +508,7 @@ class ImageCanvas(QWidget):
|
|||||||
return
|
return
|
||||||
tag = self._hit_test(scene_pos)
|
tag = self._hit_test(scene_pos)
|
||||||
if tag is None:
|
if tag is None:
|
||||||
|
self._hide_controls()
|
||||||
return
|
return
|
||||||
if tag == _T_PRINT and not self._controls_visible:
|
if tag == _T_PRINT and not self._controls_visible:
|
||||||
self._set_controls_visible(True)
|
self._set_controls_visible(True)
|
||||||
|
|||||||
@@ -1675,3 +1675,29 @@
|
|||||||
- [x] 控制层隐藏后再次点击印花,控制层恢复,并可继续拖动、缩放、旋转
|
- [x] 控制层隐藏后再次点击印花,控制层恢复,并可继续拖动、缩放、旋转
|
||||||
- [x] 控制层显隐不改变 X/Y、宽高、角度,也不影响单张导出和批量导出
|
- [x] 控制层显隐不改变 X/Y、宽高、角度,也不影响单张导出和批量导出
|
||||||
- [x] 通过必要语法检查和离屏 GUI 验证:`python -m py_compile src/app/widgets/image_canvas.py tests/test_image_canvas.py`、`python tests/test_image_canvas.py`
|
- [x] 通过必要语法检查和离屏 GUI 验证:`python -m py_compile src/app/widgets/image_canvas.py tests/test_image_canvas.py`、`python tests/test_image_canvas.py`
|
||||||
|
|
||||||
|
### 19.35 添加印花预览:点击空白区域隐藏控制层 — docs/08 §5.1
|
||||||
|
|
||||||
|
前置阅读:
|
||||||
|
|
||||||
|
- `docs/08-image-editor-design.md`(§5.1 预览控制层显隐)
|
||||||
|
- `src/app/widgets/image_canvas.py`(`_hit_test`、`_on_press`、`_hide_controls`)
|
||||||
|
- `tests/test_image_canvas.py`
|
||||||
|
|
||||||
|
背景:
|
||||||
|
|
||||||
|
§19.34 已支持按 `Esc` 隐藏选中框和控制点。用户继续要求:点击图片两边的灰色预览区域时,也能隐藏当前印花的选中框和控制点,便于快速查看接近最终导出的干净预览。
|
||||||
|
|
||||||
|
任务:
|
||||||
|
|
||||||
|
- [x] 文档:补充点击未命中印花 / 控制点的预览空白区域时隐藏控制层
|
||||||
|
- [x] `image_canvas.py`:`_on_press` 命中测试为空时调用 `_hide_controls()`,不启动拖动
|
||||||
|
- [x] `image_canvas.py`:点击空白区域只隐藏控制层,不隐藏 `_print_item`,不修改 `TransformState`
|
||||||
|
- [x] 测试:补充点击空白 scene 坐标隐藏控制层且状态不变
|
||||||
|
|
||||||
|
验收:
|
||||||
|
|
||||||
|
- [x] 控制层显示时,点击预览两侧灰色区域会隐藏选中框、缩放控制点和旋转控制点
|
||||||
|
- [x] 点击空白区域后印花图片仍显示,X/Y、宽高、角度不变
|
||||||
|
- [x] 点击印花图片仍恢复控制层并保持原有拖动行为
|
||||||
|
- [x] 验证:`python -m py_compile src/app/widgets/image_canvas.py tests/test_image_canvas.py`、`python tests/test_image_canvas.py`
|
||||||
|
|||||||
@@ -91,6 +91,20 @@ class TestImageCanvasControls(unittest.TestCase):
|
|||||||
self.assertTrue(self._controls_visible(canvas))
|
self.assertTrue(self._controls_visible(canvas))
|
||||||
self.assertEqual(canvas._drag_tag, "print")
|
self.assertEqual(canvas._drag_tag, "print")
|
||||||
|
|
||||||
|
def test_clicking_empty_canvas_hides_controls_without_changing_transform(self):
|
||||||
|
from PySide6.QtCore import QPointF
|
||||||
|
|
||||||
|
canvas = self._canvas()
|
||||||
|
before = self._state_tuple(canvas)
|
||||||
|
|
||||||
|
canvas._on_press(QPointF(-20.0, -20.0))
|
||||||
|
|
||||||
|
self.assertFalse(canvas._controls_visible)
|
||||||
|
self.assertFalse(self._controls_visible(canvas))
|
||||||
|
self.assertTrue(canvas._print_item.isVisible())
|
||||||
|
self.assertIsNone(canvas._drag_tag)
|
||||||
|
self.assertEqual(self._state_tuple(canvas), before)
|
||||||
|
|
||||||
def test_loading_print_restores_controls_visible_by_default(self):
|
def test_loading_print_restores_controls_visible_by_default(self):
|
||||||
canvas = self._canvas()
|
canvas = self._canvas()
|
||||||
canvas._hide_controls()
|
canvas._hide_controls()
|
||||||
|
|||||||
Reference in New Issue
Block a user