]> sigrok.org Git - pulseview.git/blobdiff - pv/view/analogsignal.cpp
AnalogSignal::paint_trace(): Factor out a const variable.
[pulseview.git] / pv / view / analogsignal.cpp
index d9ac2f60afcf853d1b225a18c139854ec94ed824..c393bc7cdc00adc9a5b0062530e53cfba1a98a02 100644 (file)
@@ -80,7 +80,7 @@ AnalogSignal::AnalogSignal(
        pos_vdivs_(1),
        neg_vdivs_(1),
        resolution_(0),
-       autoranging_(1)
+       autoranging_(true)
 {
        pv::data::Analog* analog_data =
                dynamic_cast<pv::data::Analog*>(data().get());
@@ -277,7 +277,9 @@ void AnalogSignal::paint_trace(QPainter &p,
 {
        p.setPen(base_->colour());
 
-       QPointF *points = new QPointF[end - start];
+       const int64_t points_count = end - start;
+
+       QPointF *points = new QPointF[points_count];
        QPointF *point = points;
 
        pv::data::SegmentAnalogDataIterator* it =
@@ -292,7 +294,7 @@ void AnalogSignal::paint_trace(QPainter &p,
        }
        segment->end_sample_iteration(it);
 
-       p.drawPolyline(points, point - points);
+       p.drawPolyline(points, points_count);
 
        delete[] points;
 }
@@ -389,6 +391,12 @@ void AnalogSignal::perform_autoranging(bool force_update)
                neg_vdivs_ = 0;
        }
 
+       // Split up the divs if there are negative values but no negative divs
+       if ((min < 0) && (neg_vdivs_ == 0)) {
+               neg_vdivs_ = pos_vdivs_ / 2;
+               pos_vdivs_ -= neg_vdivs_;
+       }
+
        double min_value_per_div;
        if ((pos_vdivs_ > 0) && (neg_vdivs_ >  0))
                min_value_per_div = std::max(max / pos_vdivs_, -min / neg_vdivs_);