]> sigrok.org Git - pulseview.git/blobdiff - pv/view/decodetrace.cpp
Fix bug #235. Add shortcut keys for View/Zoom In (Ctrl++) and View/Zoom Out (Ctrl+-)
[pulseview.git] / pv / view / decodetrace.cpp
index 37beed98779d73fb8043567cb48d5beeff18e25c..ce62ab6ff99098694b51db38e50554f5adb3be99 100644 (file)
@@ -137,6 +137,11 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right)
                _decoder_stack->get_start_time()) / scale;
        const double samples_per_pixel = samplerate * scale;
 
+       const uint64_t start_sample = (uint64_t)max((left + pixels_offset) *
+               samples_per_pixel, 0.0);
+       const uint64_t end_sample = (uint64_t)max((right + pixels_offset) *
+               samples_per_pixel, 0.0);
+
        QFontMetrics m(QApplication::font());
        const int h = (m.boundingRect(QRect(), 0, "Tg").height() * 5) / 4;
 
@@ -154,10 +159,22 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right)
        const int y = get_y();
 
        assert(_decoder_stack);
-       vector<Annotation> annotations(_decoder_stack->annotations());
+       vector<Annotation> annotations;
+       _decoder_stack->get_annotation_subset(annotations,
+               start_sample, end_sample);
+
        BOOST_FOREACH(const Annotation &a, annotations)
+       {
+               // Every stacked PD is 60 pixels further down.
+               int y_stack_offset = a.pd_index() * 60;
+
+               // Every annotation row is 20 pixels further down.
+               int y_ann_row_offset = a.row() * 20;
+
                draw_annotation(a, p, get_text_colour(), h, left, right,
-                       samples_per_pixel, pixels_offset, y);
+                       samples_per_pixel, pixels_offset,
+                       y + y_stack_offset + y_ann_row_offset);
+       }
 
        draw_unresolved_period(p, h, left, right,
                samples_per_pixel, pixels_offset);