Fix #770 by adding a vertical hover line and a setting for it
[pulseview.git] / pv / views / trace / analogsignal.cpp
index 8a055729e10d6305a2887e33cd87f660e516896f..a106be4694c5f52c884a2f1130bb34a1adbab7bc 100644 (file)
@@ -116,8 +116,6 @@ AnalogSignal::AnalogSignal(
        connect(analog_data, SIGNAL(min_max_changed(float, float)),
                this, SLOT(on_min_max_changed(float, float)));
 
-       GlobalSettings::add_change_handler(this);
-
        GlobalSettings gs;
        conversion_threshold_disp_mode_ =
                gs.value(GlobalSettings::Key_View_ConversionThresholdDispMode).toInt();
@@ -210,6 +208,8 @@ void AnalogSignal::scale_handle_drag_release()
 
 void AnalogSignal::on_setting_changed(const QString &key, const QVariant &value)
 {
+       Signal::on_setting_changed(key, value);
+
        if (key == GlobalSettings::Key_View_ConversionThresholdDispMode)
                on_settingViewConversionThresholdDispMode_changed(value);
 }
@@ -328,6 +328,9 @@ void AnalogSignal::paint_fore(QPainter &p, ViewItemPaintParams &pp)
 
                p.drawText(bounding_rect, Qt::AlignRight | Qt::AlignBottom, infotext);
        }
+
+       if (show_hover_marker_)
+               paint_hover_marker(p);
 }
 
 void AnalogSignal::paint_grid(QPainter &p, int y, int left, int right)
@@ -407,7 +410,7 @@ void AnalogSignal::paint_trace(QPainter &p,
 
        p.setPen(base_->color());
 
-       const int64_t points_count = end - start;
+       const int64_t points_count = end - start + 1;
 
        QPointF *points = new QPointF[points_count];
        QPointF *point = points;
@@ -420,7 +423,7 @@ void AnalogSignal::paint_trace(QPainter &p,
        segment->get_samples(start, start + sample_count, sample_block);
 
        const int w = 2;
-       for (int64_t sample = start; sample != end; sample++, block_sample++) {
+       for (int64_t sample = start; sample <= end; sample++, block_sample++) {
 
                if (block_sample == TracePaintBlockSize) {
                        block_sample = 0;
@@ -428,8 +431,7 @@ void AnalogSignal::paint_trace(QPainter &p,
                        segment->get_samples(sample, sample + sample_count, sample_block);
                }
 
-               const float x = (sample / samples_per_pixel -
-                       pixels_offset) + left;
+               const float x = left + (sample / samples_per_pixel - pixels_offset);
 
                *point++ = QPointF(x, y - sample_block[block_sample] * scale_);