X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=e0f3a0f262734509dadd3d412a920fb2dfe789fc;hp=2e16ff96ce76f54995742c92a8a0ddcb86fe7f63;hb=dcfe0a01f72021aab961245d0ebcc9f8d4504b40;hpb=3370799041d0ee09bf1c7c4f006933778579c037 diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index 2e16ff96..e0f3a0f2 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -133,6 +133,7 @@ DecodeTrace::DecodeTrace(pv::Session &session, session_(session), decoder_stack_(decoder_stack), row_height_(0), + max_visible_rows_(0), delete_mapper_(this), show_hide_mapper_(this) { @@ -161,9 +162,8 @@ const std::shared_ptr& DecodeTrace::decoder() const pair DecodeTrace::v_extents() const { const int row_height = (ViewItemPaintParams::text_height() * 6) / 4; - const int rows = visible_rows_.size(); - return make_pair(-row_height, row_height * rows); + return make_pair(-row_height, row_height * max_visible_rows_); } void DecodeTrace::paint_back(QPainter &p, const ViewItemPaintParams &pp) @@ -222,6 +222,9 @@ void DecodeTrace::paint_mid(QPainter &p, const ViewItemPaintParams &pp) // Draw the hatching draw_unresolved_period(p, annotation_height, pp.left(), pp.right()); + + // Update the maximum row count if needed + max_visible_rows_ = std::max(max_visible_rows_, (int)visible_rows_.size()); } void DecodeTrace::paint_fore(QPainter &p, const ViewItemPaintParams &pp) @@ -412,36 +415,22 @@ void DecodeTrace::draw_annotation_block( const double top = y + .5 - h / 2; const double bottom = y + .5 + h / 2; - const double cap_width = min((end - start) / 4, EndCapWidth); - - QPointF pts[] = { - QPointF(start, y + .5f), - QPointF(start + cap_width, top), - QPointF(end - cap_width, top), - QPointF(end, y + .5f), - QPointF(end - cap_width, bottom), - QPointF(start + cap_width, bottom) - }; const size_t colour = (base_colour + annotations.front().format()) % countof(Colours); // Check if all annotations are of the same type (i.e. we can use one color) // or if we should use a neutral color (i.e. gray) - bool single_format = true; - int format = annotations.front().format(); - - for (const Annotation &a : annotations) - if (a.format() != format) { - single_format = false; - break; - } + const int format = annotations.front().format(); + const bool single_format = std::all_of( + annotations.begin(), annotations.end(), + [&](const Annotation &a) { return a.format() == format; }); p.setPen((single_format ? OutlineColours[colour] : Qt::gray)); p.setBrush(QBrush((single_format ? Colours[colour] : Qt::gray), Qt::Dense4Pattern)); - - p.drawConvexPolygon(pts, countof(pts)); + p.drawRoundedRect( + QRectF(start, top, end - start, bottom - top), h/4, h/4); } void DecodeTrace::draw_instant(const pv::data::decode::Annotation &a, QPainter &p,