From bc870bcf81b99afcaf4c358f4e68643d1bf4efaf Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Sat, 1 Feb 2014 15:04:45 +0100 Subject: [PATCH] Draw stacked decoder traces below the other PDs (avoids overlap). 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 | 14 ++++++++++---- pv/view/decodetrace.cpp | 5 ++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pv/data/decoderstack.cpp b/pv/data/decoderstack.cpp index d209e1a9..645b92f3 100644 --- a/pv/data/decoderstack.cpp +++ b/pv/data/decoderstack.cpp @@ -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 &dec = *d->stack().begin(); + decc = pdata->pdo->di->decoder; + BOOST_FOREACH(const shared_ptr &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; diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index 8c230ad4..c3ac3dab 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -157,12 +157,15 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) vector 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, -- 2.30.2