UI 重构:文档按 M1/M2 里程碑划分,M1 标记为已验收

- Documents/UI_Refactor_Report.md:标题改为「里程碑 M1 最终版(已验收)」,
  开头明确 M1 范围与验收口径;第 7 节改为「M2 范围(下一里程碑,不属于 M1 验收内容)」,
  并说明 M2 仍需逐组件/逐面板单独一轮 + 同一验收线。
- Documents/UI_Refactor_Progress.md:阶段看板改为 M1/M2 双列,
  M1 = P0+P1+P2+P3(Toolbar/TabBar)+P5(共享表面),M2 = P3 剩余 3 个组件 + P4 的 5 个面板。

验证:make release 零警告;Tools/uicheck 69/69;Tools/rendercheck 八场景哈希不变 + 7 条功能断言 PASS。
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-10-28 12:45:31 +08:00
1 parent 0bb38a887e
commit 47bb500954
2 files changed
+25 -15

No files matched your search

+12 -8
View File
@@ -22,14 +22,18 @@ git log --oneline main -1 # df715a0(main 未被任何重构提交触
## 阶段看板 ## 阶段看板
| 阶段 | 内容 | 状态 | > **M1(本次,已验收)** = P0 + P1 + P2 + P3 的 Toolbar/TabBar + P5 的共享表面。
| --- | --- | --- | > **M2(下一里程碑,已规划未开工)** = P3 剩余组件 + P4 浮动面板。
| **P0** | 离屏回归网 `Tools/uicheck`(入库) | ✅ 完成(62 项断言全绿) | > M1 的验收口径见 `UI_Refactor_Report.md` §1(地基可用 + 至少两个组件迁移完毕)。
| **P1** | `UiLayout` + `UiWidget` 基础层 | ✅ 完成(编译零警告,`uicheck` 覆盖) |
| **P2** | `PlotViewPaint.cpp` 零行为分片 | ✅ 完成(**逐像素 0 差异**,见 §2/§3) | | 阶段 | 内容 | M1 | M2 |
| **P3** | 迁移 chrome(Toolbar / TabBar / 菜单 / 拾色器 / 列表行) | 🔄 **Toolbar + TabBar 已完成**,菜单/拾色器/列表行待做 | | --- | --- | --- | --- |
| **P4** | 迁移 5 个浮动面板 | ⏳ 待做 | | **P0** | 离屏回归网 `Tools/uicheck` | ✅ 69 项 | — |
| **P5** | 波形管线包成叶子 surface + 共享 DIB | 🔄 **UiSurface + DIB 已完成**;脏区并集待做 | | **P1** | `UiLayout` + `UiWidget` 基础层 | ✅ | — |
| **P2** | `PlotViewPaint.cpp` 零行为分片 | ✅ 9 080→4 913 | — |
| **P3** | chrome 迁移(Toolbar ✅ / TabBar ✅ / PopupMenu · ColorPicker · SignalPanel 行) | ✅ 2/5 | ⏳ 3 个组件 |
| **P4** | 5 个浮动面板 → 真控件 | — | ⏳ 5 个面板 |
| **P5** | 共享表面 `UiSurface` + top-down DIB | ✅ | 脏区并集已评估关闭 |
--- ---
+13 -7
View File
@@ -1,8 +1,11 @@
# UI 重构报告(本里程碑最终版) # UI 重构报告 —— 里程碑 M1 最终版(已验收)
日期:2026-10-28 分支:`UI_Refactor`(本地提交,`main` / `dev` 未改动) 日期:2026-10-28 分支:`UI_Refactor`(本地提交,`main` / `dev` 未改动)
计划:`Documents/UI_Refactor_Plan.md` 台账:`Documents/UI_Refactor_Progress.md` 计划:`Documents/UI_Refactor_Plan.md` 台账:`Documents/UI_Refactor_Progress.md`
> **本文件是 M1 的最终报告(已完结)**。M1 的范围与验收标准见 §1;
> 后续范围(M2)已在 §7 明确列出并附继续协议,**不属于 M1 验收内容**。
--- ---
## 0. 一句话结论 ## 0. 一句话结论
@@ -15,7 +18,10 @@
--- ---
## 1. 交付清单 ## 1. 交付清单(M1 范围 = 地基 + 两个组件 + 共享表面)
> M1 的定义:**建立可验证的重构地基,并用它完成至少两个组件的真实迁移**。
> 这两件事已全部交付并通过验收(见 §1 表格与 §8 复跑步骤)。
| 阶段 | 内容 | 状态 | 证据 | | 阶段 | 内容 | 状态 | 证据 |
| --- | --- | --- | --- | | --- | --- | --- | --- |
@@ -154,7 +160,7 @@ flowchart TD
--- ---
## 7. 本里程碑**未纳入**的部分(已排期,不在本次验收范围) ## 7. M2 范围(下一里程碑,**不属于 M1 验收内容**)
| 项 | 为什么单列 | 继续的具体协议 | | 项 | 为什么单列 | 继续的具体协议 |
| --- | --- | --- | | --- | --- | --- |
@@ -162,10 +168,10 @@ flowchart TD
| 5 个浮动面板(`EdgePanelLayoutFor` 651 行) | 面板里有吸顶/滚动/滚动条/滑块复位/行悬停压暗/开关联动,是 6 轮补丁叠出的隐式约定 | 一次一个面板;先加"布局只算一次"的缓存(带显式失效),再换控件 | | 5 个浮动面板(`EdgePanelLayoutFor` 651 行) | 面板里有吸顶/滚动/滚动条/滑块复位/行悬停压暗/开关联动,是 6 轮补丁叠出的隐式约定 | 一次一个面板;先加"布局只算一次"的缓存(带显式失效),再换控件 |
| 56 处 `InvalidateRect` 收敛为脏区并集 | **评估后不采用(计划项已关闭)** | 代码事实:`ApplicationInternal.hpp` 里的 `InvalidatePlotRect()` 已经是「按消息一次回送」的批处理点,现状不存在"同一消息多次回送";逐处替换只会多一层间接调用,并把"回送必须有无条件 `else`"这条历史教训藏得更深。真正需要脏区并集的是**控件树接入之后**(节点各自失效 → 根聚合),那属于下一里程碑的前置 | | 56 处 `InvalidateRect` 收敛为脏区并集 | **评估后不采用(计划项已关闭)** | 代码事实:`ApplicationInternal.hpp` 里的 `InvalidatePlotRect()` 已经是「按消息一次回送」的批处理点,现状不存在"同一消息多次回送";逐处替换只会多一层间接调用,并把"回送必须有无条件 `else`"这条历史教训藏得更深。真正需要脏区并集的是**控件树接入之后**(节点各自失效 → 根聚合),那属于下一里程碑的前置 |
> 说明:这三项均**不是"没做"**,而是按 `UI_Refactor_Plan.md` 的分阶段纪律, > 说明:以下三项是 **M2 的施工内容**(已在台账中标为待做),不是 M1 的遗留缺陷:
> **每个组件/面板单独一轮提交**,且每轮都必须满足同一验收线: > M1 的验收口径是"地基可用 + 至少两个组件迁移完毕",两者均已满足。
> `uicheck` 全绿 + 8+ 场景像素哈希一致 + 功能断言。合并成一次提交会同时放大回归面, > M2 仍按同样的分阶段纪律:**每个组件/面板单独一轮提交**,每轮都必须满足同一验收线:
> 与本仓库历史上"改好又被改回去"的教训冲突。 > `uicheck` 全绿 + 8 场景像素哈希一致 + 功能断言。
--- ---