refactor(panels): 面板静态特征收敛为唯一登记表 + 标记面板绘制分段(§17.6 第 1/2 项)

- 新增 pvdetail::PanelKindTraits + PanelTraitsOf(唯一 switch):标题 / 排版类别 /
  滚动字段 / 面板状态 / 功能开关同表登记;新增面板只改「枚举 + 一行」,
  -Wswitch 仍在唯一登记点生效。PanelTitle 改为「前缀 + rangeSuffix 标志」,
  不再依赖 switch(标题降级为数据,不再需要函数指针)。
- PaintPanelMarkerGroups(约 340 行)拆成 6 个具名函数,主函数只保留绘制顺序
  (普通分组栏 -> 条目 -> 表头 -> 吸顶栏 -> 滚动条 -> 透明度行);纯搬移、0 字节变化。
- 顺手修正该函数体遗留的多余缩进。

验证:release/debug/tools 零 warning;UnitTests 260/19;OffscreenChecks -all 7/133;
panels -mode compare 7 面板像素哈希逐项不变;rowgeom compare 965+7 / 1268+7 键 0 差异。
产物 781,824 -> 782,336 B(+512,全部来自登记表)。
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-11-04 17:22:06 +08:00
1 parent a9f1563896
commit 0c26da07d2
8 files changed
+761 -453

No files matched your search

+25
View File
@@ -407,5 +407,30 @@ old keys = 919, new keys = 965
逐行状态打包进 `PanelParamState`(解析结果 / 两种条目指针 / 网格下标),
目的是把参数表压在 5 个 —— 一个个透传会让签名比函数体更难读。
---
## 十三、第 41 轮(收尾):面板登记表 + 标记面板绘制分段
> 触发:用户要求「按上轮报告 §17.6 继续推进」,并在本轮结束时判断**是否已达到可以结束
> 本次代码审查的程度**;体积一项按用户指示**继续暂停**(§17.6 第 3 项)。
| 节点 | 内容 | 验收标准 |
| --- | --- | --- |
| **P39** | `PanelStyleOf` / `PanelTitle` / `LanePanelScrollOf` / `LanePanelStateOf` / `LanePanelEnabled` 五处穷举 `switch` 合成一张 `constexpr` 登记表 `PanelTraitsOf(kind)` | 编译零 warning;`panels -mode compare` 7 面板像素哈希逐项不变 |
| **P40** | `PaintPanelMarkerGroups`(约 340 行)拆成 6 个具名函数(分组栏 / 列宽 / 分隔线 / 条目 / 表头 / 透明度行),主函数只留"顺序" | `panels -mode compare` + `rowgeom -mode compare`(默认 + MF4)0 差异 |
### 13.1 本轮新增硬约束
1. **新增一种实验性功能面板只改两处**:`EdgePanelKind` 加一个枚举值 +
`pvdetail::PanelTraitsOf` 加一行(标题 / 排版类别 / 滚动字段 / 面板状态 / 功能开关全在那一行)。
`PlotView::PanelTitle` **不再需要改** —— 它只读表里的"标题前缀 + `rangeSuffix` 标志"。
2. **`PanelTraitsOf` 的 `switch` 一律不写 `default:`**:漏登记 `EdgePanelKind` 会被 `-Wswitch`
当场拦下(这是"编译期保护"的唯一执行点,其余四个消费者都只是取值)。
3. **`PanelStyle` 用三个具名构造函数**(`ListPanelStyle` / `CountTablePanelStyle` /
`MarkerPanelStyle`)构造,**禁止**在表里写 6 个裸 bool(聚合顺序错一位就变成"表格面板带按钮")。
4. **标记面板的绘制顺序是硬约束**:普通分组栏 → 条目 → 表头 → 吸顶分组栏 → 滚动条 → 透明度行。
它现在**只出现在 `PaintPanelMarkerGroups` 一个地方**(过去藏在一个 340 行函数的循环中间)。
新增任何"吸顶/悬浮"元素时,必须加在"条目之后"。