修复合并网格后的新增信号、适应视图联动、调色面板排版与左右越界三角

1. 合并网格后新增信号不再挤进合并网格
   - 分组复选框与「全部显示」按钮此前只更新可见性,没有像单信号勾选那样把划分策略
     切到自定义,于是合并网格把新增信号一并吞掉。
   - 现在两者在确有信号由不可见变可见时同样切换到自定义划分,
     新增信号各自独占一个网格并追加在列表最下方,原合并网格保持不变。

2. 适应视图不再取消「选区放大」模式与「选区 Y 轴自适应」
   - 此前适应视图会把缩放模式复位为无,并把全部网格的 autoRange 置真;
     而自动适应区间只由 autoRange 决定,置真等于把已经算好的时间段幅值丢掉,
     表现为"点一下适应视图,Y 轴自适应就失效了"。
   - 现在保留缩放模式;开启了「选区 Y 轴自适应」的网格改为按新的时间视图重新匹配,
     其余网格才恢复整段自适应。

3. 「按网格时间轴展开」联动其它网格
   - 时间视图是全局的,展开后其余开启了「选区 Y 轴自适应」的网格同样重新匹配 Y 轴,
     不再只有被展开的那一个网格量程合适。

4. 自定义颜色面板排版重做
   - R/G/B 的标签、滑块与数值改为同属右侧一列并共用同一行,标签紧贴各自的滑块;
     预览色块与色号移到左列下方并与色域方块同宽,色号编辑框不再超出面板边界;
     面板高度按内容重新计算,底部不再留空。
   - 色域方块上的选点去掉外圈深色描边,改为"中心为所选颜色 + 白色描边"。
   - 色相指示器由黑色横条改为白色描边的圆角长方条,底色取该位置的颜色;
     色相条本身改用分段线性渐变绘制。

5. 修复光标数据点向左/向右越界时的三角
   - 三角沿朝向伸出的深度大于贴边时距边界的距离,导致有一大半画在网格绘制区之外,
     裁剪后只剩残缺一角、描边也因此不完整。
   - 现在左右越界时把锚点向内推一个三角深度,三角完整落在绘制区内;
     同时四方向越界都让三角与显示的数值纵向居中对齐。
This commit is contained in:
DeepSeek V4.1 Flash committed 2026-10-10 14:38:54 +08:00
1 parent 40b12d6e8b
commit 2d029fb09b
3 files changed
+152 -68

No files matched your search

+23
View File
@@ -1252,12 +1252,35 @@ namespace jdi
return;
}
std::vector<bool>& fileVisible = m_visible[static_cast<std::size_t>(fileIndex)];
// 合并模式下“新增”的信号同样应各自独占网格(与 SetVisible 一致):
// 先切到自定义划分,RebuildLanes 会把尚未分配网格的可见信号追加到最下方。
// 只有确实存在“原本不可见”的信号时才切模式,避免重复点击默默改掉划分策略。
const bool anyHidden =
std::find(fileVisible.begin(), fileVisible.end(), false) != fileVisible.end();
if (visible && anyHidden && m_laneMode == LaneMode::MERGED)
{
m_laneMode = LaneMode::CUSTOM;
}
std::fill(fileVisible.begin(), fileVisible.end(), visible);
SyncLanes();
}
void TabConfig::SetAllVisible(bool visible)
{
bool anyHidden = false;
for (const std::vector<bool>& fileVisible : m_visible)
{
if (std::find(fileVisible.begin(), fileVisible.end(), false) != fileVisible.end())
{
anyHidden = true;
break;
}
}
// 同上:合并模式下新增的信号各自独占网格,且排列在最下方。
if (visible && anyHidden && m_laneMode == LaneMode::MERGED)
{
m_laneMode = LaneMode::CUSTOM;
}
for (std::vector<bool>& fileVisible : m_visible)
{
std::fill(fileVisible.begin(), fileVisible.end(), visible);