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.
using pv::data::decode::Annotation;
GSList *l, *ll;
using pv::data::decode::Annotation;
GSList *l, *ll;
+ int row, ann_class, idx = 0;
struct srd_decoder_annotation_row *ann_row;
struct srd_decoder_annotation_row *ann_row;
+ struct srd_decoder *decc;
assert(pdata);
assert(decoder);
assert(pdata);
assert(decoder);
Annotation a = Annotation(pdata);
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;
{
ann_row = (struct srd_decoder_annotation_row *)l->data;
vector<Annotation> annotations(_decoder_stack->annotations());
BOOST_FOREACH(const Annotation &a, annotations) {
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,
// 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_stack_offset + y_ann_row_offset);
}
draw_unresolved_period(p, h, left, right,
}
draw_unresolved_period(p, h, left, right,