refactor(panels): 拆分 PaintEdgeCursor 的三段内容绘制到独立分片
背景:Code Review 报告 §12.7 建议 2。`PaintEdgeCursor` 原本约 1900 行,其中 "按面板排版类别绘制内容"占 1000 行以上,三段(表格 / 列表 / 自由标记)几乎互不相干, 却共享同一个函数的全部局部变量 —— 任何一段的改动都要在 1900 行里定位, 且很容易误用另一段的变量。 改动 * 新增 `Components/PlotView/Src/PlotViewPanelPaint.cpp`(1016 行,机械搬移、零逻辑改动): * `PaintPanelCountTableRows` —— 边沿计数表格:固定表头 + 可滚动数据行。 * `PaintPanelListRows` —— 列表式:条目栏 + 展开后的参数行(均值/中心轴/弱峰/重采样/截取)。 * `PaintPanelMarkerGroups` —— 自由标记:分组栏 + 表头 + 条目 + 吸顶。 每个函数**只接收它真正需要的东西**(`layout` + `tabLane` + 少数几个参数), 不再"整个函数都看得见"。 * `PaintEdgeCursor` 从 1900 → 约 900 行;三处块替换为一行调用, 骨架(边框 / 标题栏 / 折起三角 / GX 徽标 / ✕)与底部按钮**仍留在一处**(对所有面板同源)。 * 滚条绘制抽为 `pvdetail::PaintPanelScrollBar(g, layout, theme)`(三个分支共用)。 顺带修掉报告里承诺但未落地的一处 * `PaintEdgeCursor` 的标题仍是 7 层三元式,与 `EdgePanelWidth` 里**另一条**链并存 (那条漏了 MARK/CLIP)。现统一为 `PanelTitle(kind)` 唯一来源。 验证(像素基线全部不变,证明是纯搬移) * `panels -mode compare` → 7 个面板像素哈希 + 几何**逐项不变**。 * `OffscreenChecks -all` → 6/6 PASS,`checks=108 failed=0`。 * `UnitTests` → `checks=260 failed=0`。 * `panelscroll`(MF4,566 信号)→ 6/7 面板可滚,行为不变。 * release 全量零 error / 零 warning;产物 786,944 → **786,432 B**(−512)。
This commit is contained in:
1 parent
35b67b216e
commit
38fbd4b465
4 files changed
+1096
-995
No files matched your search
@@ -1946,7 +1946,6 @@ namespace jdi
|
|||||||
* @param [IN] lanes 网格绘制信息集合。
|
* @param [IN] lanes 网格绘制信息集合。
|
||||||
*/
|
*/
|
||||||
void PaintEdgeCursor(gd::Graphics& g, const std::vector<LaneVisual>& lanes);
|
void PaintEdgeCursor(gd::Graphics& g, const std::vector<LaneVisual>& lanes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 确保面板图层缓存位图可用(尺寸不符时重建)。
|
* @brief 确保面板图层缓存位图可用(尺寸不符时重建)。
|
||||||
* @return 可用返回 true。
|
* @return 可用返回 true。
|
||||||
@@ -2213,6 +2212,49 @@ namespace jdi
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 「边沿计数」表格面板的**行内容**(固定表头 + 可滚动数据行)。
|
||||||
|
*
|
||||||
|
* 面板骨架(边框 / 标题栏 / ✕ / 滚动条外观)由 `PaintEdgeCursor` 负责,
|
||||||
|
* 这里只画表格内部。定义在 `PlotViewPanelPaint.cpp`。
|
||||||
|
*
|
||||||
|
* @param [IN,OUT] g 绘图上下文。
|
||||||
|
* @param [IN] layout 面板布局(表头、列边界、行矩形全部来自它)。
|
||||||
|
* @param [IN] tabLane 该网格配置(横向光标阈值)。
|
||||||
|
*/
|
||||||
|
void PaintPanelCountTableRows(gd::Graphics& g, const EdgePanelLayout& layout,
|
||||||
|
const Lane& tabLane);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 列表式面板(均值滤波 / 中心轴 / 弱峰调整 / 重采样 / 选区截取)的**行内容**。
|
||||||
|
*
|
||||||
|
* 条目栏(三角 + 名称 + 复选框)+ 展开后的参数行;参数行形态由 `kind` 决定。
|
||||||
|
* 定义在 `PlotViewPanelPaint.cpp`。
|
||||||
|
*
|
||||||
|
* @param [IN,OUT] g 绘图上下文。
|
||||||
|
* @param [IN] layout 面板布局。
|
||||||
|
* @param [IN] tabLane 该网格配置(勾选状态 / 参数 / 悬停与拖拽态)。
|
||||||
|
* @param [IN] kind 面板种类。
|
||||||
|
* @param [IN] laneIndex 网格下标。
|
||||||
|
*/
|
||||||
|
void PaintPanelListRows(gd::Graphics& g, const EdgePanelLayout& layout, const Lane& tabLane,
|
||||||
|
EdgePanelKind kind, std::size_t laneIndex);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 「自由标记」面板的**内容区**(分组栏 + 表头 + 条目 + 吸顶)。
|
||||||
|
*
|
||||||
|
* 绘制顺序固定为 条目 → 表头 → 吸顶分组栏(最后画的压住向上滚动的条目)。
|
||||||
|
* 定义在 `PlotViewPanelPaint.cpp`。
|
||||||
|
*
|
||||||
|
* @param [IN,OUT] g 绘图上下文。
|
||||||
|
* @param [IN] layout 面板布局(含 `markerGroups` / `markerRows`)。
|
||||||
|
* @param [IN] tabLane 该网格配置(透明度 / 选中行 / 悬停态)。
|
||||||
|
* @param [IN] tabLanes 全部网格(取各列实测宽度)。
|
||||||
|
* @param [IN] laneIndex 网格下标。
|
||||||
|
*/
|
||||||
|
void PaintPanelMarkerGroups(gd::Graphics& g, const EdgePanelLayout& layout, const Lane& tabLane,
|
||||||
|
std::vector<Lane>& tabLanes, std::size_t laneIndex);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 计算某个实验性功能面板的布局。
|
* @brief 计算某个实验性功能面板的布局。
|
||||||
* @param [IN] laneIndex 网格下标。
|
* @param [IN] laneIndex 网格下标。
|
||||||
|
|||||||
@@ -1314,6 +1314,28 @@ namespace jdi
|
|||||||
return metrics;
|
return metrics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 绘制浮动面板**内容区滚动条**(轨道 + 滑块)。
|
||||||
|
*
|
||||||
|
* 三个排版分支(表格 / 列表 / 自由标记)共用同一段外观:任何微调(颜色、圆角、
|
||||||
|
* 最小滑块高度)只需改这里一处。`scrollTrack` 为空矩形时直接返回。
|
||||||
|
*
|
||||||
|
* @param [IN] g 目标绘制上下文。
|
||||||
|
* @param [IN] layout 面板布局(取 `scrollTrack` / `scrollThumb`)。
|
||||||
|
* @param [IN] theme 当前主题。
|
||||||
|
*/
|
||||||
|
inline void PaintPanelScrollBar(gd::Graphics& g, const PlotView::EdgePanelLayout& layout,
|
||||||
|
const Theme& theme)
|
||||||
|
{
|
||||||
|
if (layout.scrollTrack.Width <= 0.0f)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
UiFillRoundRect(g, layout.scrollTrack, layout.scrollTrack.Width * 0.5f,
|
||||||
|
WithAlpha(theme.border, 0x88));
|
||||||
|
UiFillRoundRect(g, layout.scrollThumb, layout.scrollThumb.Width * 0.5f, theme.borderStrong);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 计算一条派生曲线在给定采样窗口内的取值(同步路径与后台线程共用)。
|
* @brief 计算一条派生曲线在给定采样窗口内的取值(同步路径与后台线程共用)。
|
||||||
*
|
*
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user