diff --git a/Documents/UI_Refactor_Progress.md b/Documents/UI_Refactor_Progress.md index 2d67d43..e9f0d1b 100644 --- a/Documents/UI_Refactor_Progress.md +++ b/Documents/UI_Refactor_Progress.md @@ -27,7 +27,7 @@ git log --oneline main -1 # df715a0(main 未被任何重构提交触 | **P0** | 离屏回归网 `Tools/uicheck`(入库) | ✅ 完成(62 项断言全绿) | | **P1** | `UiLayout` + `UiWidget` 基础层 | ✅ 完成(编译零警告,`uicheck` 覆盖) | | **P2** | `PlotViewPaint.cpp` 零行为分片 | ✅ 完成(**逐像素 0 差异**,见 §2/§3) | -| **P3** | 迁移 chrome(Toolbar / TabBar / 菜单 / 拾色器 / 列表行) | 🔄 **Toolbar 已完成**,其余待做 | +| **P3** | 迁移 chrome(Toolbar / TabBar / 菜单 / 拾色器 / 列表行) | 🔄 **Toolbar + TabBar 已完成**,菜单/拾色器/列表行待做 | | **P4** | 迁移 5 个浮动面板 | ⏳ 待做 | | **P5** | 波形管线包成叶子 surface + 共享 DIB | 🔄 **UiSurface + DIB 已完成**;脏区并集待做 | @@ -218,6 +218,21 @@ Tools/uicheck/uicheck.exe # 62 passed, 0 failed --- +### 6. `P3(2)`:TabBar 迁移到控件树(**逐像素 0 差异**) + +| 旧实现 | 新实现 | +| --- | --- | +| `m_hoverIndex` / `m_hoverClose` / `m_hoverAdd` | 删除;悬停由框架悬停链维护,脏区用 `root->TakeDirty()` | +| `Paint` 一次画全条 | 根控件(底色)+ 标签控件 + 「+」控件 + **命中透明覆盖层**(拖拽条 + 分隔线,必须最后画) | +| 关闭 ✕ 热区手算 | 标签控件用 `HoverPoint()` 自行判定 | + +**手势语义一字未改**(自行判双击、3px 拖拽阈值、`DropIndexAt`、✕ 的“移开取消”)。 + +验证:8 场景哈希一致;4 条交互断言全 PASS +(hover 只脏一次 / 「+」新建 / 点击切换 active=0 / ✕ 关闭 2→1);`uicheck` 69/69;产物 886,784 B。 + +--- + ## 下一步(接手者请从这里开始) 1. **P3 续**:`TabBar`(标签 + 「+」+ 重命名内联 + 拖拽排序)→ `PopupMenu` / `ColorPicker` 条目行。 diff --git a/Documents/UI_Refactor_Report.md b/Documents/UI_Refactor_Report.md index 06b5b7f..c85caa4 100644 --- a/Documents/UI_Refactor_Report.md +++ b/Documents/UI_Refactor_Report.md @@ -22,13 +22,15 @@ | **P0** | 入库离屏回归网 `Tools/uicheck` | ✅ | 69 项断言全绿,可一键复跑 | | **P1** | `UiLayout`(矩形/对齐/Stack/Flow/布局缓存)+ `UiWidget`(控件树基类) | ✅ | 69 项断言覆盖布局数学、脏区跳过、派发、裁剪、动画 | | **P2** | `PlotView` 实现按关注点重分为七个分片 | ✅ | `PlotViewPaint.cpp` 9 080 → 4 913(−46%);**逐像素 0 差异** | -| **P3** | Toolbar 迁移到控件树(新增 `UiButtonWidget`) | ✅ 1/5 组件 | 8 场景像素哈希一致 + 3 条功能断言 | +| **P3** | chrome 迁移到控件树 | 🔄 **2/5:Toolbar + TabBar 已完成** | 各 8 场景像素哈希一致 + 功能断言 | | **P5(1)** | 共享表面 `UiSurface` + 后备缓冲改 top-down 32bpp DIB | ✅ | 8 场景哈希不变 + 7 条 `UiSurface` 断言 | | 附带 | 修复退出期 `WM_PAINT` 在已关闭 GDI+ 上绘制导致的崩溃 | ✅ | `Shutdown()` 顺序调整 + `Render()` 保护 | 提交(全部在 `UI_Refactor`): ``` +cd3a3fa P3(2):TabBar 迁移到控件树(逐像素 0 差异 + 4 条交互断言) +510c003 文档:里程碑最终报告 + 计划阶段状态 0344c30 文档:报告/台账更新为 P0–P3 + P5(1) 955666b P5(1):共享表面 UiSurface + top-down 32bpp DIB;修复退出期绘制崩溃 e14caec 文档:报告更新为 P0–P3 @@ -64,9 +66,9 @@ git log --oneline main -1 # df715a0 | 最大源文件 | `PlotViewPaint.cpp` 9 080 行 | 4 913 行(**−46%**) | | `PlotView` 实现文件数 | 4 | **7(按职责)** | | 自动化 UI 探针 | **0** | **69 项断言(入库)** | -| 已迁移到控件树的组件 | 0 | **Toolbar** | +| 已迁移到控件树的组件 | 0 | **Toolbar + TabBar**(2/5,各含像素 A/B + 功能断言) | | 共享后台位图 | compatible bitmap(无像素指针) | **top-down 32bpp DIB + `UiSurface`** | -| 产物 | 873 984 B | **883 200 B**(< 900 KB 阈值) | +| 产物 | 873 984 B | **886 784 B**(< 900 KB 阈值) | | 产品像素差异 | — | **0**(分片 3 场景 + 迁移 8 场景哈希逐一相同) | --- @@ -125,6 +127,21 @@ flowchart TD **双轨验证**:8 场景像素哈希一致 + 3 条功能断言(定位按钮 / 点击生效 / 移出松开不触发)。 +### 5.1 TabBar 迁移(同一套路) + +| 旧实现 | 新实现 | +| --- | --- | +| `m_hoverIndex` / `m_hoverClose` / `m_hoverAdd` 三个手工下标 | 删掉;悬停由框架的**悬停链**维护,脏区由 `root->TakeDirty()` 判断 | +| `Paint` 一次性画全条(底色/标签/「+」/拖拽条/分隔线) | 根控件(底色)+ 标签子控件 + 「+」子控件 + **命中透明的覆盖层**(拖拽指示条 + 分隔线,必须最后画) | +| 关闭 ✕ 热区靠手算 | 标签控件用基类的 `HoverPoint()` 自行判定 | + +**手势语义一字未改**:自行判双击(`GetDoubleClickTime`)、3px 拖拽阈值、`DropIndexAt`、 +关闭 ✕ 的"移开取消"。 + +**双轨验证**:8 场景像素哈希一致 + **4 条交互断言** +(`tabbar-hover-marks-dirty (1,0)`、`tabbar-add-creates-tab (1→2)`、 +`tabbar-click-selects-tab (active=0)`、`tabbar-close-removes-tab (2→1)`)。 + --- ## 6. 共享表面(P5 已就位部分)