fix: 修复网格滚动溢出并重构绘图区缩放与时间光标交互
网格滚动: - 修复纵向滚动时波形与文字溢出到工具栏/时间轴的问题:网格内容裁剪改为与绘图区求交, 并对网格内的图例、幅值标签与读数框增加显式可见性判定 (GDI 文本不遵循 GDI+ 裁剪区,仅裁剪矢量绘制不足以阻止溢出)。 - 网格之间改为完整矩形描边并加大间距,边界清晰;时间轴固定预留高度,不再被网格挤压。 - 时间轴刻度标签夹在绘图区横向范围内,避免与左侧时间列名重叠。 缩放交互: - 取消滚轮缩放:滚轮改为纵向滚动网格,Shift+滚轮水平平移。 - 新增「时间轴缩放」「Y 轴缩放」工具栏切换按钮:选中后在绘图区拖拽选区放大对应轴向, 拖动过程显示选区与跨度提示(时间用强调色、Y 轴用警示色);再次点击退出该模式。 - 「适应视图」回到初始状态:恢复自适应范围并退出缩放模式。 - 移除右键框选缩放,避免与模式化缩放重复。 时间光标: - 改为工具栏「光标」按钮切换;启用时置于当前视图中心,再次点击关闭(Esc 亦可关闭)。 - 光标由鼠标靠近后拖拽移动,不再跟随鼠标;纵向贯穿全部网格并延伸到时间轴底部, 顶部带三角把手提示可拖拽。 - 具体时间读数移至绘图区顶部,仅在鼠标覆盖光标时显示,不再遮挡时间轴刻度尺。 - 双击光标进入精确时间输入,交互与线宽输入一致:整段高亮、首次键入即整体覆盖、 回车提交、Esc 取消、点击框外提交。 - 光标形态按模式区分:默认与悬停线外为箭头(不再出现十字指针), 时间轴缩放/光标为水平双向箭头,Y 轴缩放为垂直双向箭头。
This commit is contained in:
1 parent
cba62c8218
commit
17eb03a1b3
6 files changed
+852
-359
No files matched your search
+20
-10
@@ -21,6 +21,16 @@ namespace jdi
|
||||
LINE_SCATTER = 2 /**< 同时绘制插值直线与采样点散点。 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 绘图区拖拽缩放模式(由工具栏按钮切换)。
|
||||
*/
|
||||
enum class PlotZoomMode : int
|
||||
{
|
||||
NONE = 0, /**< 常规模式:拖拽平移时间轴,光标为箭头。 */
|
||||
TIME = 1, /**< 时间轴缩放:在绘图区拖拽竖向选区,放大时间范围。 */
|
||||
VALUE = 2 /**< Y 轴缩放:在某个网格内拖拽横向选区,放大该网格幅值范围。 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 将绘制方式转换为中文显示名称。
|
||||
* @param [IN] mode 绘制方式。
|
||||
@@ -446,18 +456,18 @@ namespace jdi
|
||||
bool& ViewInitialized() { return m_viewInitialized; }
|
||||
/// @brief 网格纵向滚动偏移量(可读写)。
|
||||
float& LaneScroll() { return m_laneScroll; }
|
||||
/// @brief 时间光标是否可见(可读写)。
|
||||
bool& CursorVisible() { return m_cursorVisible; }
|
||||
/// @brief 时间光标是否可见(只读)。
|
||||
bool CursorVisible() const { return m_cursorVisible; }
|
||||
/// @brief 时间光标是否已固定(可读写)。
|
||||
bool& CursorPinned() { return m_cursorPinned; }
|
||||
/// @brief 时间光标是否已固定(只读)。
|
||||
bool CursorPinned() const { return m_cursorPinned; }
|
||||
/// @brief 时间光标是否启用(可读写)。
|
||||
bool& CursorEnabled() { return m_cursorEnabled; }
|
||||
/// @brief 时间光标是否启用(只读)。
|
||||
bool CursorEnabled() const { return m_cursorEnabled; }
|
||||
/// @brief 时间光标位置(可读写)。
|
||||
double& CursorTime() { return m_cursorTime; }
|
||||
/// @brief 时间光标位置(只读)。
|
||||
double CursorTime() const { return m_cursorTime; }
|
||||
/// @brief 绘图区拖拽缩放模式(可读写)。
|
||||
PlotZoomMode& ZoomMode() { return m_zoomMode; }
|
||||
/// @brief 绘图区拖拽缩放模式(只读)。
|
||||
PlotZoomMode ZoomMode() const { return m_zoomMode; }
|
||||
|
||||
private:
|
||||
/**
|
||||
@@ -478,9 +488,9 @@ namespace jdi
|
||||
double m_viewMax = 1.0; /**< 视图右边界时间。 */
|
||||
bool m_viewInitialized = false; /**< 视图范围是否已初始化。 */
|
||||
float m_laneScroll = 0.0f; /**< 网格纵向滚动偏移量。 */
|
||||
bool m_cursorVisible = false; /**< 时间光标是否可见。 */
|
||||
bool m_cursorPinned = false; /**< 时间光标是否已固定。 */
|
||||
bool m_cursorEnabled = false; /**< 时间光标是否启用(由工具栏按钮切换)。 */
|
||||
double m_cursorTime = 0.0; /**< 时间光标位置。 */
|
||||
PlotZoomMode m_zoomMode = PlotZoomMode::NONE; /**< 绘图区拖拽缩放模式。 */
|
||||
};
|
||||
|
||||
} // namespace jdi
|
||||
|
||||
Reference in new issue
Block a user