UI控件及大组件结构化重构,新增“显示布局边界”调试功能(待完善) #1

Merged
LuChiChick merged 21 commits from UI_Refactor into main 2026-10-29 01:31:00 +00:00
2 changed files with 3 additions and 3 deletions
Showing only changes of commit 0bb38a887e - Show all commits

No files matched your search

+1 -1
View File
@@ -252,7 +252,7 @@ protected:
| **P2** | 零行为变更分片:`PlotViewPaint.cpp` 拆成 `Paint`(只画)/ `Raster`(缓存与预算)/ `CacheKey`(指纹)/ `Geometry`(面板与命中);`EdgePanelLayoutFor`、`ProbeFreeMarker` 迁回交互侧 | ✅ **已完成**(**逐像素 0 差异**) |
| **P3** | 迁移 chrome:Toolbar → TabBar → PopupMenu → ColorPicker → SignalPanel 行(**一次一个组件、每完成一个跑全量探针**) | 🔄 **Toolbar 已完成**;其余待做 |
| **P4** | 迁移 5 个浮动面板(`EdgePanelLayoutFor` 651 行 → 真控件;消掉平行数组) | ⏳ 待做 |
| **P5** | 波形管线包成叶子 surface(**只包不改**)+ 共享 DIB 落地 | 🔄 **共享 DIB + `UiSurface` 已完成**;脏区并集待做 |
| **P5** | 波形管线包成叶子 surface(**只包不改**)+ 共享 DIB 落地 | 🔄 **共享 DIB + `UiSurface` 已完成**;「56 处失效收敛为脏区并集」经评估**不采用**(`InvalidatePlotRect()` 已是按消息的批处理点,逐处替换只增间接层,详见 Report §7) |
**P2 之前禁止改任何行为**。P2 是唯一的"免费"阶段,别顺手改语义。
+2 -2
View File
@@ -158,9 +158,9 @@ flowchart TD
| 项 | 为什么单列 | 继续的具体协议 |
| --- | --- | --- |
| TabBar / PopupMenu / ColorPicker 迁移 | 三者都带**多段手势**(tab 自行判双击、拖拽阈值 3px、关闭 ✕ 的"移开取消";菜单子菜单悬停;拾色器拖拽钳制)。它们的失败是**静默的**(不崩,只是行为微妙变化) | 一次一个组件;先把手势语义原样保留为"语义层",只把绘制/命中搬进控件;每步跑 8+ 场景像素 A/B + 功能断言 |
| TabBar / PopupMenu / ColorPicker 迁移 | **TabBar 已完成**;PopupMenu / ColorPicker 仍带多段手势(子菜单悬停、拾色器拖拽钳制) | 一次一个组件;先把手势语义原样保留为"语义层",只把绘制/命中搬进控件;每步跑 8+ 场景像素 A/B + 功能断言(TabBar 已验证可行) |
| 5 个浮动面板(`EdgePanelLayoutFor` 651 行) | 面板里有吸顶/滚动/滚动条/滑块复位/行悬停压暗/开关联动,是 6 轮补丁叠出的隐式约定 | 一次一个面板;先加"布局只算一次"的缓存(带显式失效),再换控件 |
| 56 处 `InvalidateRect` 收敛为脏区并集 | 需要与控件脏区树联动,且回送必须保留无条件 `else`(历史 BUG) | 先加 `Host::Invalidate(rect)` 并只迁移高频路径,逐步替换 |
| 56 处 `InvalidateRect` 收敛为脏区并集 | **评估后不采用(计划项已关闭)** | 代码事实:`ApplicationInternal.hpp` 里的 `InvalidatePlotRect()` 已经是「按消息一次回送」的批处理点,现状不存在"同一消息多次回送";逐处替换只会多一层间接调用,并把"回送必须有无条件 `else`"这条历史教训藏得更深。真正需要脏区并集的是**控件树接入之后**(节点各自失效 → 根聚合),那属于下一里程碑的前置 |
> 说明:这三项均**不是"没做"**,而是按 `UI_Refactor_Plan.md` 的分阶段纪律,
> **每个组件/面板单独一轮提交**,且每轮都必须满足同一验收线: