]> sigrok.org Git - pulseview.git/commitdiff
Draw stacked decoder traces below the other PDs (avoids overlap).
authorUwe Hermann <redacted>
Sat, 1 Feb 2014 14:04:45 +0000 (15:04 +0100)
committerUwe Hermann <redacted>
Sat, 1 Feb 2014 14:08:46 +0000 (15:08 +0100)
Every stacked decoder is drawn below the PDs it stacks upon, so that all
of the annotations of all PDs in the stack can be seen, and no overlap
happens.

pv/data/decoderstack.cpp
pv/view/decodetrace.cpp

index d209e1a9b19e1f783f46baa0b8b9bb5a9320dd65..645b92f32474d44aafcde927023bc5c4f36fd60b 100644 (file)
@@ -242,8 +242,9 @@ void DecoderStack::annotation_callback(srd_proto_data *pdata, void *decoder)
        using pv::data::decode::Annotation;
 
        GSList *l, *ll;
-       int row, ann_class;
+       int row, ann_class, idx = 0;
        struct srd_decoder_annotation_row *ann_row;
+       struct srd_decoder *decc;
 
        assert(pdata);
        assert(decoder);
@@ -254,10 +255,15 @@ void DecoderStack::annotation_callback(srd_proto_data *pdata, void *decoder)
 
        Annotation a = Annotation(pdata);
 
-       const shared_ptr<decode::Decoder> &dec = *d->stack().begin();
+       decc = pdata->pdo->di->decoder;
+       BOOST_FOREACH(const shared_ptr<decode::Decoder> &dec, d->stack()) {
+               if (dec->decoder() == decc)
+                       break;
+               idx++;
+       }
+       a.set_pd_index(idx);
 
-       for (l = dec->decoder()->annotation_rows, row = 0; l;
-                       l = l->next, row++)
+       for (l = decc->annotation_rows, row = 0; l; l = l->next, row++)
        {
                ann_row = (struct srd_decoder_annotation_row *)l->data;
 
index 8c230ad42384cc093ba094ac9bd401377997061d..c3ac3dabfabf04d7710f28a600790215e38d7573 100644 (file)
@@ -157,12 +157,15 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right)
        vector<Annotation> annotations(_decoder_stack->annotations());
 
        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 + y_ann_row_offset);
+                       y + y_stack_offset + y_ann_row_offset);
        }
 
        draw_unresolved_period(p, h, left, right,