交互修正:悬停提示跟随鼠标、信号拖拽手掌/抓握光标、增量只显示在右侧光标
- 信号悬停提示改为真正跟随鼠标(PaintSignalInteraction 用 m_mouseX/m_mouseY 定位, 删除 m_hoverAnchorX/m_hoverAnchorY)。 根因:OnMouseMove 只在状态变化时返回 changed,仅鼠标位置变化时返回 false, 宿主不重绘 → 提示停在上一帧位置。现补上 `if (m_hoverSignal.IsValid() && mouseMoved) changed = true;`(mouseMoved 由前后坐标比较得出), 鼠标在可拖拽区域内持续移动时提示条会跟随。 - 可拖拽信号的光标响应参考 Photoshop 平移元素: 悬停时用手掌光标(IDC_HAND),按住左键拖拽途中用抓握光标(IDC_SIZEALL)。 - 双光标增量差值:改为**只**由"右侧光标"(时间较大的那条)显示, 按差值显式给出正负号(+ / -,不再固定用 ±);把右光标拖到左侧后, 增量会自动改由新的右侧光标显示。(判定改用时间比较,不再用 m_activeCursor。) - 光标时间读数标签与 Δt 差值标签:悬停(未按下)时不再改变鼠标光标, 真正拖拽时统一使用左右箭头(IDC_SIZEWE)。 两个标签都叠在光标线正上方,因此在 QueryCursor 中必须先于光标线判定返回 nullptr, 否则会命中光标线给出 SIZEWE。 - Δt 差值文案由 "Δt " 改为 "Δt:"(全角冒号)。 - 一并移除遗留的 TEMP-PROBE 调试输出(HitTestSignal / PaintSignalInteraction / OnMouseMove 探针)与已不再使用的 m_dragOnLabel。 验证(TestData/VERY_BIG_DATA.CSV,编码器A相密集方波,125%、1725x996): - 提示跟随:悬停 (700,250)→(700,400)→(760,620)→(900,700) 后, 提示条出现在最后一次鼠标位置旁(截图核对),不再停留在首次出现处。 - 光标形态探测:信号悬停 = HAND;拖拽信号 = SIZEALL; 时间读数标签/Δt 标签悬停 = ARROW(不改变);Δt 标签拖拽 = SIZEWE; 时间读数标签拖拽 = SIZEWE;光标线上方悬停 = SIZEWE。 - 增量归属:默认双光标左 4.9417(无增量)/ 右 4.9425 , +0.0008; 把右光标拖到左侧后变为左 0.288688(无增量)/ 右 4.9417 , +4.65301; 把右光标拖到低电平处得到 4.80724 , -0.134458(负号正确)。 - Δt 文案:截图确认显示 "Δt: 15s 457.214ms"。 - 回归([1].CSV 双光标):左 426.316(无增量)/ 右 538.583 , +112.267; Δt:151ms 200us。 - make clean && make all 无警告无错误。
This commit is contained in:
1 parent
ed13aa7d49
commit
a566d98bab
2 files changed
+34
-80
No files matched your search
@@ -913,7 +913,6 @@ namespace jdi
|
||||
int m_spanDragStartX = 0; /**< 差值标签拖拽起点横坐标。 */
|
||||
double m_spanDragTime1 = 0.0; /**< 差值标签拖拽起始时两条光标的时间。 */
|
||||
double m_spanDragTime2 = 0.0;
|
||||
bool m_dragOnLabel = false; /**< 本次光标拖拽是从时间/差值标签上抓起的(用抓握光标)。 */
|
||||
int m_cursorGrabOffset = 0; /**< 从光标时间标签上抓起时的横向偏移(像素)。 */
|
||||
PlotEditTarget m_editTarget = PlotEditTarget::NONE; /**< 当前内联输入目标。 */
|
||||
TextEdit m_edit; /**< 输入框编辑模型(光标/选区/剪贴板)。 */
|
||||
@@ -927,8 +926,6 @@ namespace jdi
|
||||
int m_hoverLane = -1; /**< 当前悬停网格下标。 */
|
||||
int m_mouseX = 0; /**< 最近一次鼠标横坐标(用于悬停提示定位)。 */
|
||||
int m_mouseY = 0; /**< 最近一次鼠标纵坐标(用于悬停提示定位)。 */
|
||||
int m_hoverAnchorX = 0; /**< 信号悬停提示的锚点横坐标(首次进入可拖拽区域时确定,不随鼠标移动)。 */
|
||||
int m_hoverAnchorY = 0; /**< 信号悬停提示的锚点纵坐标。 */
|
||||
bool m_spanHover = false; /**< 鼠标是否悬停在双光标差值标签上。 */
|
||||
std::wstring m_hintText; /**< 临时提示文本(空表示不显示)。 */
|
||||
std::uint64_t m_hintShownAt = 0; /**< 提示出现的时刻(毫秒,GetTickCount64)。 */
|
||||
|
||||
Reference in new issue
Block a user