From e6d81f11958d28d39be3a5bfcac5d9b851284a00 Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Mon, 25 Sep 2023 14:52:43 +0800 Subject: [PATCH] fix: The measure information is error when window resize on ANALOG mode --- DSView/pv/data/analogsnapshot.cpp | 2 +- DSView/pv/data/analogsnapshot.h | 2 +- DSView/pv/data/dsosnapshot.cpp | 2 ++ DSView/pv/sigsession.cpp | 8 ++++++-- DSView/pv/view/analogsignal.cpp | 11 ++++++++--- DSView/pv/view/analogsignal.h | 1 - DSView/pv/view/trace.h | 2 -- DSView/pv/view/view.cpp | 2 +- 8 files changed, 19 insertions(+), 11 deletions(-) diff --git a/DSView/pv/data/analogsnapshot.cpp b/DSView/pv/data/analogsnapshot.cpp index 0e5e8296..6dd77dc6 100644 --- a/DSView/pv/data/analogsnapshot.cpp +++ b/DSView/pv/data/analogsnapshot.cpp @@ -45,7 +45,7 @@ AnalogSnapshot::AnalogSnapshot() : { memset(_envelope_levels, 0, sizeof(_envelope_levels)); _unit_pitch = 0; - _data = NULL; + _data = NULL; } AnalogSnapshot::~AnalogSnapshot() diff --git a/DSView/pv/data/analogsnapshot.h b/DSView/pv/data/analogsnapshot.h index 3356f89a..9f6166d8 100644 --- a/DSView/pv/data/analogsnapshot.h +++ b/DSView/pv/data/analogsnapshot.h @@ -119,7 +119,7 @@ private: private: void *_data; struct Envelope _envelope_levels[DS_MAX_ANALOG_PROBES_NUM][ScaleStepCount]; - friend class AnalogSnapshotTest::Basic; + friend class AnalogSnapshotTest::Basic; }; } // namespace data diff --git a/DSView/pv/data/dsosnapshot.cpp b/DSView/pv/data/dsosnapshot.cpp index 3186d4fa..c2aec04c 100644 --- a/DSView/pv/data/dsosnapshot.cpp +++ b/DSView/pv/data/dsosnapshot.cpp @@ -51,6 +51,8 @@ DsoSnapshot::DsoSnapshot() : _threshold = 0; _measure_voltage_factor1 = 0; _measure_voltage_factor2 = 0; + _data_scale1 = 0; + _data_scale2 = 0; _is_file = false; memset(_envelope_levels, 0, sizeof(_envelope_levels)); diff --git a/DSView/pv/sigsession.cpp b/DSView/pv/sigsession.cpp index 93ac8ea6..4d3543b4 100644 --- a/DSView/pv/sigsession.cpp +++ b/DSView/pv/sigsession.cpp @@ -399,7 +399,9 @@ namespace pv _capture_data->get_analog()->set_samplerate(samplerate); _capture_data->get_dso()->set_samplerate(samplerate); - if (_device_agent.get_work_mode() == DSO) + int mode = _device_agent.get_work_mode(); + + if (mode == DSO || mode == ANALOG) { for(auto s : _signals){ if (s->get_type() == SR_CHANNEL_DSO){ @@ -2449,7 +2451,9 @@ namespace pv void SigSession::update_dso_data_scale() { - if (_device_agent.get_work_mode() == DSO) + int mode = _device_agent.get_work_mode(); + + if (mode == DSO || mode == ANALOG) { for(auto s : _signals){ if (s->get_type() == SR_CHANNEL_DSO){ diff --git a/DSView/pv/view/analogsignal.cpp b/DSView/pv/view/analogsignal.cpp index 39f7faa6..c151736f 100644 --- a/DSView/pv/view/analogsignal.cpp +++ b/DSView/pv/view/analogsignal.cpp @@ -407,7 +407,10 @@ void AnalogSignal::paint_mid(QPainter &p, int left, int right, QColor fore, QCol const float zeroY = ratio2pos(get_zero_ratio()); const int width = right - left + 1; + // dsv_info("zeroY:%f", zeroY); + const double scale = _view->scale(); + assert(scale > 0); const int64_t offset = _view->offset(); @@ -531,6 +534,7 @@ void AnalogSignal::paint_envelope(QPainter &p, if (!_rects) _rects = new QRectF[width+10]; + QRectF *rect = _rects; int px = -1, pre_px; float y_min = zeroY, y_max = zeroY, pre_y_min = zeroY, pre_y_max = zeroY; @@ -589,7 +593,7 @@ void AnalogSignal::paint_hover_measure(QPainter &p, QColor fore, QColor back) const int hw_offset = get_hw_offset(); const int height = get_totalHeight(); const float top = get_y() - height * 0.5; - const float bottom = get_y() + height * 0.5; + const float bottom = get_y() + height * 0.5; // Hover measure if (_hover_en && _hover_point != QPointF(-1, -1)) { @@ -655,9 +659,10 @@ QString AnalogSignal::get_voltage(double v, int p, bool scaled) const QString mapUnit = get_mapUnit(); if (scaled) - v = v / get_totalHeight() * mapRange; + v = v / (double)get_totalHeight() * mapRange; else - v = v * _scale / get_totalHeight() * mapRange; + v = v * _scale / (double)get_totalHeight() * mapRange; + return abs(v) >= 1000 ? QString::number(v/1000.0, 'f', p) + mapUnit : QString::number(v, 'f', p) + "m" + mapUnit; } diff --git a/DSView/pv/view/analogsignal.h b/DSView/pv/view/analogsignal.h index 7ae93f6a..e3074814 100644 --- a/DSView/pv/view/analogsignal.h +++ b/DSView/pv/view/analogsignal.h @@ -24,7 +24,6 @@ #define DSVIEW_PV_ANALOGSIGNAL_H #include "signal.h" - namespace pv { diff --git a/DSView/pv/view/trace.h b/DSView/pv/view/trace.h index 70669f48..d05c8fb9 100644 --- a/DSView/pv/view/trace.h +++ b/DSView/pv/view/trace.h @@ -28,9 +28,7 @@ #include #include #include - #include - #include "selectableitem.h" #include "dsldial.h" diff --git a/DSView/pv/view/view.cpp b/DSView/pv/view/view.cpp index a8d8b324..553cb18c 100644 --- a/DSView/pv/view/view.cpp +++ b/DSView/pv/view/view.cpp @@ -774,7 +774,7 @@ void View::signals_changed(const Trace* eventTrace) else if (t->signal_type() == SR_CHANNEL_ANALOG) { auto sig = dynamic_cast(t); - sig->set_scale(sig->get_view_rect().height()); + sig->set_scale(sig->get_totalHeight()); } } _time_viewport->clear_measure();