UI 重构 P3(2):TabBar 迁移到控件树(逐像素 0 差异 + 4 条交互断言)

TabBar 的标签 / 「+」/ 覆盖层拆成控件,手势语义原样保留(自行判双击、3px 拖拽阈值、
关闭 ✕ 的「移开取消」、拖拽排序的 drop 位置),公开 API 未变:

- 新增(TabBar.cpp 内实现的内部控件)
  * UiTabItemWidget:单格标签的绘制(底色/描边/激活指示条/文本或重命名输入框/关闭 ✕),
    关闭按钮热区由基类的悬停点自行判定。
  * UiAddWidget:「+」按钮绘制与悬停配色。
  * UiOverlayWidget:命中透明的覆盖层,最后绘制「拖拽插入指示条 + 底部分隔线」
    (必须晚于标签与「+」,否则会被它们压住)。
  * UiTabRootWidget:只铺标签栏底色。
- TabBar 移除 m_hoverIndex / m_hoverClose / m_hoverAdd 三个手工下标,
  改为 dispatch MOUSE_MOVE 后由 root->TakeDirty() 判断是否需要重绘。
- 绘制顺序保持:底色 → 各标签 → 「+」→ 拖拽指示条 → 底部分隔线(与旧实现逐像素一致)。
- UiWidget 新增 HoverPoint(x,y):派生控件据此自行判断「悬停在自身内部哪个热区」。

验证:
- 像素:8 场景哈希与迁移前逐一相同(A 2166933…、H 23F390D…)。
- 交互断言(全部 PASS):
  * tabbar-hover-marks-dirty (1,0)         —— 进入标签只标记一次脏区;
  * tabbar-add-creates-tab (1 -> 2)        —— 「+」新建标签;
  * tabbar-click-selects-tab (active=0)    —— 点击标签切换激活页;
  * tabbar-close-removes-tab (2 -> 1)      —— 点击 ✕ 关闭标签。
- Tools/uicheck 69 passed / 0 failed。
- make release / make debug 零警告;Target.exe 886,784 B(< 900KB)。
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-10-28 12:41:57 +08:00
1 parent c4faa930e2
commit c3b79a6d2c
6 files changed
+429 -127

No files matched your search

+10 -1
View File
@@ -8,9 +8,18 @@
| 分支 | 基线 | 用途 |
| --- | --- | --- |
| `main` | `df715a0` | 可发布,**不受本次重构影响** |
| `dev` | `4e51b41`(删除过时报告 `refactor_report_2026-10-16.md`) | 日常开发基线 |
| `dev` | `4e51b41` | 日常开发基线;本分支上已 **删除过时报告** `Documents/refactor_report_2026-10-16.md`(−508 行) |
| `UI_Refactor` | 从 `dev` 切出 | 本次 UI 重构(全部提交只留在本地) |
**分支操作取证(可直接复跑)**
```powershell
git show 4e51b41 --stat --oneline # dev: Documents/refactor_report_2026-10-16.md | 508 ----------
Test-Path Documents\refactor_report_2026-10-16.md # False(已不在工作区/分支里)
git log --oneline --all -- Documents/refactor_report_2026-10-16.md # 末条即为 4e51b41 的删除提交
git log --oneline main -1 # df715a0(main 未被任何重构提交触碰)
```
## 阶段看板
| 阶段 | 内容 | 状态 |