X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Fdecode%2Fannotation.cpp;h=0cf5bad0dd3f074d429102a644caea80fc8230bd;hb=1ae79b11b6b409aae986e379f9280115395c8cf5;hp=4d9a048357bbe1ea7054edeb0dd64388d5217833;hpb=3195aeb6a867b6ab54b4a410182467f63f9b79f2;p=pulseview.git diff --git a/pv/view/decode/annotation.cpp b/pv/view/decode/annotation.cpp index 4d9a048..0cf5bad 100644 --- a/pv/view/decode/annotation.cpp +++ b/pv/view/decode/annotation.cpp @@ -22,6 +22,12 @@ extern "C" { #include } +#include + +#include + +#include + #include "annotation.h" using namespace boost; @@ -31,6 +37,8 @@ namespace pv { namespace view { namespace decode { +const double Annotation::EndCapWidth = 5; + Annotation::Annotation(const srd_proto_data *const pdata) : _start_sample(pdata->start_sample), _end_sample(pdata->end_sample) @@ -42,6 +50,47 @@ Annotation::Annotation(const srd_proto_data *const pdata) : } } +void Annotation::paint(QPainter &p, QColor fill, QColor outline, + QColor text_color, int text_height, int left, int right, + double samples_per_pixel, double pixels_offset, int y) +{ + const int h = (text_height * 3) / 2; + + const double start = _start_sample / samples_per_pixel - + pixels_offset; + const double end = _end_sample / samples_per_pixel - + pixels_offset; + + if (start > right || end < left) + return; + + const double cap_width = min((end - start) / 2, EndCapWidth); + + QPointF pts[] = { + QPointF(start, y + .5f), + QPointF(start + cap_width, y + .5f - h / 2), + QPointF(end - cap_width, y + .5f - h / 2), + QPointF(end, y + .5f), + QPointF(end - cap_width, y + .5f + h / 2), + QPointF(start + cap_width, y + .5f + h / 2) + }; + + p.setPen(outline); + p.setBrush(fill); + p.drawConvexPolygon(pts, countof(pts)); + + if (!_annotations.empty()) + { + QRectF rect(start + cap_width, y - h / 2, + end - start - cap_width * 2, h); + p.setPen(text_color); + p.drawText(rect, Qt::AlignCenter, + p.fontMetrics().elidedText( + _annotations.front(), Qt::ElideRight, + rect.width())); + } +} + } // namespace decode } // namespace view } // namespace pv