UI 重构 P2 续:把布局与命中几何从绘制分片拆出(PlotViewPanels.cpp,逐像素 0 差异)
EdgePanelLayoutFor(651 行 / 19 个调用点)、EdgePanelWidth、LaneBadgeRect、 FreeMarkerValue/Delta/Contents/LabelRects、ProbeFreeMarker 都是「几何」而非「绘制」, 却塞在 9 千行的绘制文件里 —— 改布局要动整个绘制文件,回归面被放大。 本提交机械搬移这 5 个不连续块到新分片 PlotViewPanels.cpp(1,359 行),不改一行逻辑。 PlotViewPaint.cpp 6,645 -> 4,913 行;相对 UI_Refactor 起点 9,080 行共 -46%。 当前七个分片:Paint 4,913 / Interaction 3,430 / Features 3,266 / Raster 1,876 / Panels 1,359 / Core 889 / CacheKey 474。顶层注释改为「七个分片(按关注点)」。 验证: - make release TARGET_FILE_NAME=TargetCheck 零警告;Target.exe 877,568 B(< 900KB 阈值)。 - 逐像素 A/B:三场景哈希与迁移前完全一致 A 2166933039626F66、B C444ECFEB18FD73D、C 7984446D8E7A4418。 - Tools/uicheck 62 passed / 0 failed。
This commit is contained in:
1 parent
5cb84e4f97
commit
e610cea481
3 files changed
+1452
-1389
No files matched your search
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -107,9 +107,45 @@ Tools/uicheck/uicheck.exe # 62 passed, 0 failed
|
||||
|
||||
---
|
||||
|
||||
### 3. `P2 续`:把"布局与命中几何"从绘制分片里拆出(`PlotViewPanels.cpp`)
|
||||
|
||||
**为什么**:`EdgePanelLayoutFor`(651 行,19 个调用点)、`EdgePanelWidth`、`LaneBadgeRect`、
|
||||
`FreeMarkerValue/Delta/Contents/LabelRects`、`ProbeFreeMarker` 都是**几何**,却被塞在绘制分片里 ——
|
||||
改一次布局要动 9 千行的绘制文件,回归面被放大。
|
||||
|
||||
**做法**:同样机械搬移(5 个不连续块),`PlotViewPaint.cpp` 从 6 645 → **4 913** 行。
|
||||
|
||||
**最终七个分片**(按关注点)
|
||||
|
||||
| 文件 | 行数 | 职责 |
|
||||
| --- | --- | --- |
|
||||
| `PlotViewPaint.cpp` | 4 913 | 绘制(`Paint*` / `Render*` / 输入框绘制) |
|
||||
| `PlotViewInteraction.cpp` | 3 430 | 命中、鼠标/键盘、光标形状、面板层序 |
|
||||
| `PlotViewFeatures.cpp` | 3 266 | 光标读数、提示、缩放、自适应、派生曲线、边沿统计 |
|
||||
| `PlotViewRaster.cpp` | 1 876 | 光晕层 / 场景缓存 / 装饰层 / 宽基底图层与预算 |
|
||||
| `PlotViewPanels.cpp` | 1 359 | 面板布局、图例徽标几何、自由标记取值与探测 |
|
||||
| `PlotView.cpp` | 889 | 视图核心(构造、布局、坐标映射、网格结构) |
|
||||
| `PlotViewCacheKey.cpp` | 474 | 内容指纹与缓存键 |
|
||||
|
||||
**累计效果**:`PlotViewPaint.cpp` **9 080 → 4 913(−46%)**,最大文件从 9.1k 降到 4.9k。
|
||||
|
||||
**验证**
|
||||
|
||||
1. `make release TARGET_FILE_NAME=TargetCheck` 零警告;`Target.exe` **877 568 B**(< 900 KB)。
|
||||
2. **逐像素 A/B**:同三场景哈希与迁移前**完全一致**
|
||||
(`A 2166933039626F66 / B C444ECFEB18FD73D / C 7984446D8E7A4418`)。
|
||||
3. `Tools/uicheck` 62/62。
|
||||
4. 顶层注释更新为"七个分片(按关注点)",并标明 `Paint/PaintLane` 只允许定义在 `PlotViewPaint.cpp`。
|
||||
|
||||
---
|
||||
|
||||
## 下一步(接手者请从这里开始)
|
||||
|
||||
1. **P2 续**:把"布局与命中几何"也搬出去(`EdgePanelLayoutFor` 651 行 + `ProbeFreeMarker` 286 行 +
|
||||
`FreeMarkerLabelRects` 118 行 → 新 `PlotViewPanels.cpp`),判据同上(逐像素 0 差异)。
|
||||
2. **P3:Toolbar 优先**(最小、最容易验证的组件),迁移后跑 `uicheck` + 新旧像素对比。
|
||||
3. 每个阶段单独提交,提交信息写清"改了什么 / 为什么 / 怎么验证"。
|
||||
1. **P3:Toolbar 优先**(最小、最容易验证的组件):
|
||||
继承 `UiWidget` → `OnMeasure` 由按钮文本实测得出 → `OnPaint` 用 `ctx.clip` 画按钮 →
|
||||
`OnEvent` 返回 `{consumed, redraw, dirty}`;迁移后用 `uicheck` + 新旧像素对比。
|
||||
2. **P4:浮动面板**:`EdgePanelLayoutFor` 的 651 行 → 真控件(Stack + Abs + Measure-driven),
|
||||
并消掉面板里 10 多个平行数组(`rowRefs/rowChecks/rowPoints/rowOrder/rowLevelTracks/...`)。
|
||||
3. **P5:共享 DIB + `SurfaceView`**(`CreateCompatibleBitmap` → top-down 32bpp `CreateDIBSection`,
|
||||
带 `version` 作废机制),随后把 56 处 `InvalidateRect` 收敛成脏区并集。
|
||||
4. 每个阶段单独提交,提交信息写清"改了什么 / 为什么 / 怎么验证"。
|
||||
Reference in new issue
Block a user