From: Uwe Hermann Date: Sat, 1 Feb 2014 14:04:45 +0000 (+0100) Subject: Draw stacked decoder traces below the other PDs (avoids overlap). X-Git-Tag: pulseview-0.2.0~96 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=bc870bcf81b99afcaf4c358f4e68643d1bf4efaf;p=pulseview.git 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. --- 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,