fix(clip): 选区截取面板五处缺陷(条目/空白/多信号截取/滚轮)
一、未启用双光标时不再显示信号条目
EdgePanelLayoutFor 与绘制侧都只判 clipPanel、没判双光标是否启用,
于是照常累加内容高度、生成行矩形并绘制条目。
- 高度算式新增 clipReady = clipPanel && CursorMode()==DOUBLE,未就绪时内容只占一行(提示);
- 行几何循环加 clipRowsVisible,未就绪时不生成任何行矩形 => 绘制自然为空;
- footer 同步改为"未就绪 = 0"。
二、条目区与底部按钮之间的大段空白(未启用双光标时也有)
两个叠加根因:
1) 高度算式的 maxContent 有"至少 3 行"下限 => 只有 1 个信号也硬撑 3 行高;
改为 min(上限, max(1 行, budget))。
2) 几何侧 viewHeight 多减了一个 pad(高度算式只含一个 pad + bottomPad);
统一为 height - titleHeight - pad - footerHeight。
高度算式与内容区几何必须严格同源。
三、多个信号「原始信号截取」结果不对
同组信号共享同一条时间轴,ClipSignalRange 每次都裁剪 axis.time
=> 截完第一条后其它信号时间基准被改短 => 采样与时间错位。
- 新增 DataSet::ForkAxisForSignal:轴非独占时复制一份新轴并让信号指向它;
- ClipSignalRange 内再加一道守卫:轴仍被共享时直接返回 false(不改任何数据);
- Application::ClipSignalInPlace 先 fork 再裁剪。
四、有滚动条时滚轮滚不到底
1) OnMouseWheel 的 current 取值链漏了 CLIP => 读到 meanFilterScroll(恒 0)而写入 clipScroll,
补上 CLIP 分支;
2) PanelSlotKey 里 clipScroll 被写成布尔(>0 ? 1 : 0)=> 滚到 1px 后键不再变化,
改为 mixFloat(lane.clipScroll) 真实值。
删 .o 全量重编译:零 error、零 warning,产物 861,184 B。
按用户要求未占用鼠标/键盘/屏幕,未运行 GUI 探针。
This commit is contained in:
1 parent
62220477c0
commit
21a9865365
7 files changed
+199
-12
No files matched your search
@@ -1097,9 +1097,16 @@ namespace jdi
|
||||
{
|
||||
timeShift = style->offsetTime;
|
||||
}
|
||||
const bool ok = m_dataSet.ClipSignalRange(groupIndex, signalIndex, low - timeShift,
|
||||
high - timeShift);
|
||||
if (!ok)
|
||||
// ⚠️⚠️ **必须先让该信号独占时间轴**再裁剪:同组信号常常共享同一条时间轴,
|
||||
// 直接裁剪会把其它信号的时间基准一起改短 ⇒ 它们的采样与时间错位
|
||||
//(用户 2026-11-03 报告:"多个信号同时截取时截取出来的信号并不对")。
|
||||
std::size_t ownAxis = 0;
|
||||
if (!m_dataSet.ForkAxisForSignal(groupIndex, signalIndex, ownAxis))
|
||||
{
|
||||
m_plot.ShowPersistentHint(L"选区截取失败:无法为该信号创建独立时间轴。");
|
||||
return false;
|
||||
}
|
||||
if (!m_dataSet.ClipSignalRange(groupIndex, signalIndex, low - timeShift, high - timeShift))
|
||||
{
|
||||
m_plot.ShowPersistentHint(L"选区截取失败:区间内的有效采样点不足两个。");
|
||||
return false;
|
||||
|
||||
Reference in new issue
Block a user