X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=161eb9668bdd2217a43e8173d396138ea2908c6e;hp=ce62ab6ff99098694b51db38e50554f5adb3be99;hb=f9101a91fc942a28515872ae6c7285973bd54b91;hpb=9242129958c996f9ff71da7c7b74d7983b5c59f6 diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index ce62ab6f..161eb966 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -122,7 +122,7 @@ void DecodeTrace::paint_back(QPainter &p, int left, int right) void DecodeTrace::paint_mid(QPainter &p, int left, int right) { - using pv::data::decode::Annotation; + using namespace pv::data::decode; const double scale = _view->scale(); assert(scale > 0); @@ -143,40 +143,43 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) samples_per_pixel, 0.0); QFontMetrics m(QApplication::font()); - const int h = (m.boundingRect(QRect(), 0, "Tg").height() * 5) / 4; + const int text_height = m.boundingRect(QRect(), 0, "Tg").height(); + const int annotation_height = (text_height * 5) / 4; + const int row_height = (text_height * 6) / 4; assert(_decoder_stack); const QString err = _decoder_stack->error_message(); if (!err.isEmpty()) { draw_error(p, err, left, right); - draw_unresolved_period(p, h, left, right, samples_per_pixel, - pixels_offset); + draw_unresolved_period(p, annotation_height, left, right, + samples_per_pixel, pixels_offset); return; } + // Iterate through the rows assert(_view); - const int y = get_y(); + int y = get_y(); assert(_decoder_stack); - vector annotations; - _decoder_stack->get_annotation_subset(annotations, - start_sample, end_sample); - BOOST_FOREACH(const Annotation &a, annotations) + const vector rows(_decoder_stack->get_rows()); + BOOST_FOREACH (const Row &row, rows) { - // 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_stack_offset + y_ann_row_offset); + vector annotations; + _decoder_stack->get_annotation_subset(annotations, row, + start_sample, end_sample); + if (!annotations.empty()) { + BOOST_FOREACH(const Annotation &a, annotations) + draw_annotation(a, p, get_text_colour(), + annotation_height, left, right, + samples_per_pixel, pixels_offset, y); + y += row_height; + } } - draw_unresolved_period(p, h, left, right, + // Draw the hatching + draw_unresolved_period(p, annotation_height, left, right, samples_per_pixel, pixels_offset); }