X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=9f8306ea8ef9c7f0983e99cb321978fdc7eb2bf9;hp=ddf006ce9139e6c35792ffb128360a0e7ee89705;hb=a855d71e69d4530b4f87d4287b16da60d147fe84;hpb=83c23cc9fa0d4501d9e6b8759251fa6337f5d491 diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index ddf006ce..9f8306ea 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -25,6 +25,7 @@ extern "C" { #include #include +#include #include #include @@ -68,6 +69,7 @@ const QColor DecodeTrace::DecodeColours[4] = { const QColor DecodeTrace::ErrorBgColour = QColor(0xEF, 0x29, 0x29); const QColor DecodeTrace::NoDecodeColour = QColor(0x88, 0x8A, 0x85); +const int DecodeTrace::ArrowSize = 4; const double DecodeTrace::EndCapWidth = 5; const int DecodeTrace::DrawPadding = 100; @@ -161,6 +163,8 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) double samplerate = _decoder_stack->samplerate(); + _cur_row_headings.clear(); + // Show sample rate as 1Hz when it is unknown if (samplerate == 0.0) samplerate = 1.0; @@ -216,6 +220,8 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) samples_per_pixel, pixels_offset, y, base_colour); y += row_height; + + _cur_row_headings.push_back(row.title()); } } @@ -224,6 +230,52 @@ void DecodeTrace::paint_mid(QPainter &p, int left, int right) samples_per_pixel, pixels_offset); } +void DecodeTrace::paint_fore(QPainter &p, int left, int right) +{ + using namespace pv::data::decode; + + (void)right; + + QFontMetrics m(QApplication::font()); + const int text_height = m.boundingRect(QRect(), 0, "Tg").height(); + const int row_height = (text_height * 6) / 4; + + for (size_t i = 0; i < _cur_row_headings.size(); i++) + { + const int y = i * row_height + get_y(); + + p.setPen(QPen(Qt::NoPen)); + p.setBrush(QApplication::palette().brush(QPalette::WindowText)); + + if (i != 0) + { + const QPointF points[] = { + QPointF(left, y - ArrowSize), + QPointF(left + ArrowSize, y), + QPointF(left, y + ArrowSize) + }; + p.drawPolygon(points, countof(points)); + } + + const QRect r(left + ArrowSize * 2, y - row_height / 2, + right - left, row_height); + const QString h(_cur_row_headings[i]); + const int f = Qt::AlignLeft | Qt::AlignVCenter | + Qt::TextDontClip; + + // Draw the outline + p.setPen(QApplication::palette().color(QPalette::Base)); + for (int dx = -1; dx <= 1; dx++) + for (int dy = -1; dy <= 1; dy++) + if (dx != 0 && dy != 0) + p.drawText(r.translated(dx, dy), f, h); + + // Draw the text + p.setPen(QApplication::palette().color(QPalette::WindowText)); + p.drawText(r, f, h); + } +} + void DecodeTrace::populate_popup_form(QWidget *parent, QFormLayout *form) { using pv::data::decode::Decoder;