fix: 修正样式区对齐与线宽输入交互,分组标题改为“组X|文件名”并支持同文件重复加载

样式编辑区:
- 标签列与内容列改为靠左对齐(原为整体居中),拉宽左侧面板时不再向中间偏移。
- 颜色行不再居中,与样式、透明度、线宽三行共用同一左边界与同一宽度上限
  (260 逻辑像素),实测四行均为 89-413px,右侧留 93px 空白。

线宽输入:
- 双击数值框后数值整体居中并高亮(外框与数值呈选中态),首次键入即整体覆盖原值,
  之后显示插入符;回车确认、Esc 取消、点击其它区域确认,交互与常见登录输入框一致。

散点绘制:
- 散点半径改为随线宽线性增长(0.5-10px 映射到 1.6-12px,系数 1.5),
  修复此前半径被上限 4px 过早截断、线宽较大时数据点不再放大的问题。

透明度描边:
- 新增统一色块绘制入口 UiDrawSwatch:按不透明度填充,且仅在不透明度低于 45% 时
  补一圈描边;可见时不绘制描边。
- 预设色块、自定义色块、信号行色块与波形图例色块统一走该入口,
  修复透明度过低时完全不可见的问题。

文件分组:
- 分组标题改为“组X|<文件名>”,序号使用强调色;序号按当前位置连续编号,
  关闭某个分组后其余分组自动重新编号。
- 移除按路径查重的限制,同一文件可多次加载并分别归入不同分组。
- 关闭分组改为“移至末位后弹出 + 收缩容量”,使该文件的时间轴与全部信号缓冲区
  在本次调用内立即析构归还系统。
- 确认加载后不再依赖原始文件:读取阶段即关闭句柄并整份载入内存,
  已实测删除源文件后仍可正常勾选与绘制波形。

验证:make clean && make all(Release+Debug)零错误零警告;
逐项以真实/合成鼠标与像素扫描核对以上行为。
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-09-29 18:40:17 +08:00
1 parent dbe9b904ab
commit cba62c8218
7 files changed
+134 -82

No files matched your search

+6 -5
View File
@@ -19,7 +19,8 @@ namespace jdi
const size_t kMaxPolylinePoints = 20000; /**< 单条折线最大顶点数。 */
const size_t kMaxScatterPoints = 2500; /**< 单条散点最大绘制点数。 */
const float kMinScatterRadius = 1.6f; /**< 散点最小半径(逻辑像素)。 */
const float kMaxScatterRadius = 4.0f; /**< 散点最大半径(逻辑像素)。 */
const float kMaxScatterRadius = 12.0f; /**< 散点最大半径(逻辑像素)。 */
const float kScatterRadiusScale = 1.5f; /**< 散点半径相对线宽的增长系数。 */
const double kMinTimeSpan = 1.0e-12; /**< 允许的最小时间跨度。 */
/**
@@ -1125,8 +1126,9 @@ namespace jdi
if (drawScatter && !points.empty())
{
// 散点半径随线宽线性增长(达到上限前不过早触顶),使“线宽”直观控制数据点大小。
const float radius = static_cast<float>(
ClampDouble(std::max(1.0f, resolved.style->lineWidth) * (kMinScatterRadius + 0.6f),
ClampDouble(static_cast<double>(resolved.style->lineWidth) * kScatterRadiusScale,
kMinScatterRadius, kMaxScatterRadius) *
m_scale);
const std::size_t scatterStride =
@@ -1236,9 +1238,8 @@ namespace jdi
drawnWidth += itemWidth;
const float swatchSize = 8.0f * m_scale;
UiFillRoundRect(g,
gd::RectF(cursorX, top + (height - swatchSize) * 0.5f, swatchSize, swatchSize),
1.5f * m_scale, StyleColor(*resolved.style));
UiDrawSwatch(g, gd::RectF(cursorX, top + (height - swatchSize) * 0.5f, swatchSize, swatchSize),
resolved.style->color, resolved.style->opacity, 1.5f * m_scale, m_scale);
cursorX += swatchSize + 5.0f * m_scale;
UiText(g, label, m_fonts->uiSmall, gd::RectF(cursorX, top, textWidth + 2.0f, height),