fix: The measure information is error when window resize on ANALOG mode

This commit is contained in:
dreamsourcelabTAI 2023-09-25 14:52:43 +08:00
parent 09479138f0
commit e6d81f1195
8 changed files with 19 additions and 11 deletions

View File

@ -45,7 +45,7 @@ AnalogSnapshot::AnalogSnapshot() :
{
memset(_envelope_levels, 0, sizeof(_envelope_levels));
_unit_pitch = 0;
_data = NULL;
_data = NULL;
}
AnalogSnapshot::~AnalogSnapshot()

View File

@ -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

View File

@ -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));

View File

@ -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){

View File

@ -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;
}

View File

@ -24,7 +24,6 @@
#define DSVIEW_PV_ANALOGSIGNAL_H
#include "signal.h"
namespace pv {

View File

@ -28,9 +28,7 @@
#include <QPen>
#include <QRect>
#include <QString>
#include <stdint.h>
#include "selectableitem.h"
#include "dsldial.h"

View File

@ -774,7 +774,7 @@ void View::signals_changed(const Trace* eventTrace)
else if (t->signal_type() == SR_CHANNEL_ANALOG)
{
auto sig = dynamic_cast<view::AnalogSignal*>(t);
sig->set_scale(sig->get_view_rect().height());
sig->set_scale(sig->get_totalHeight());
}
}
_time_viewport->clear_measure();