X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=161eb9668bdd2217a43e8173d396138ea2908c6e;hb=f9101a91fc942a28515872ae6c7285973bd54b91;hp=c3ac3dabfabf04d7710f28a600790215e38d7573;hpb=bc870bcf81b99afcaf4c358f4e68643d1bf4efaf;p=pulseview.git diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index c3ac3da..161eb96 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); @@ -137,38 +137,49 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) _decoder_stack->get_start_time()) / scale; const double samples_per_pixel = samplerate * scale; + const uint64_t start_sample = (uint64_t)max((left + pixels_offset) * + samples_per_pixel, 0.0); + const uint64_t end_sample = (uint64_t)max((right + pixels_offset) * + 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->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_stack_offset + y_ann_row_offset); + const vector rows(_decoder_stack->get_rows()); + BOOST_FOREACH (const Row &row, rows) + { + 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); }