From 96d3ad83edb89b2d4e0e4a4f0860c13ebbcf737a Mon Sep 17 00:00:00 2001 From: Joel Holdsworth Date: Sat, 20 Apr 2013 12:59:01 +0100 Subject: [PATCH] Moved Cursor markers to the outside --- pv/view/cursor.cpp | 97 +++++++++++++++++++++++++++--------------- pv/view/cursor.h | 5 ++- pv/view/cursorpair.cpp | 4 +- 3 files changed, 69 insertions(+), 37 deletions(-) diff --git a/pv/view/cursor.cpp b/pv/view/cursor.cpp index 1ec3b37a..855bfa01 100644 --- a/pv/view/cursor.cpp +++ b/pv/view/cursor.cpp @@ -45,8 +45,9 @@ const int Cursor::Offset = 1; const int Cursor::ArrowSize = 4; -Cursor::Cursor(const View &view, double time) : - TimeMarker(view, LineColour, time) +Cursor::Cursor(const View &view, double time, Cursor &other) : + TimeMarker(view, LineColour, time), + _other(other) { } @@ -68,38 +69,66 @@ void Cursor::paint_label(QPainter &p, const QRect &rect, compute_text_size(p, prefix); const QRectF r(get_label_rect(rect)); - const float h_centre = (r.left() + r.right()) / 2; - const QPointF points[] = { - r.topRight(), - QPointF(r.right(), r.bottom()), - QPointF(h_centre + ArrowSize, r.bottom()), - QPointF(h_centre, rect.bottom()), - QPointF(h_centre - ArrowSize, r.bottom()), - QPointF(r.left(), r.bottom()), - r.topLeft() - }; - - const QPointF highlight_points[] = { - QPointF(r.right() - 1, r.top() + 1), - QPointF(r.right() - 1, r.bottom() - 1), - QPointF(h_centre + ArrowSize - 1, r.bottom() - 1), - QPointF(h_centre, rect.bottom() - 1), - QPointF(h_centre - ArrowSize + 1, r.bottom() - 1), - QPointF(r.left() + 1, r.bottom() - 1), - QPointF(r.left() + 1, r.top() + 1), - }; - - p.setPen(Qt::transparent); - p.setBrush(FillColour); - p.drawPolygon(points, countof(points)); - - p.setPen(HighlightColour); - p.setBrush(Qt::transparent); - p.drawPolygon(highlight_points, countof(highlight_points)); - - p.setPen(LineColour); - p.setBrush(Qt::transparent); - p.drawPolygon(points, countof(points)); + if (_time > _other.time()) + { + const QPointF points[] = { + r.topLeft(), + r.topRight(), + r.bottomRight(), + QPointF(r.left() + ArrowSize, r.bottom()), + QPointF(r.left(), rect.bottom()), + }; + + const QPointF highlight_points[] = { + QPointF(r.left() + 1, r.top() + 1), + QPointF(r.right() - 1, r.top() + 1), + QPointF(r.right() - 1, r.bottom() - 1), + QPointF(r.left() + ArrowSize - 1, r.bottom() - 1), + QPointF(r.left() + 1, rect.bottom() - 1), + }; + + p.setPen(Qt::transparent); + p.setBrush(FillColour); + p.drawPolygon(points, countof(points)); + + p.setPen(HighlightColour); + p.setBrush(Qt::transparent); + p.drawPolygon(highlight_points, countof(highlight_points)); + + p.setPen(LineColour); + p.setBrush(Qt::transparent); + p.drawPolygon(points, countof(points)); + } + else + { + const QPointF points[] = { + r.topRight(), + r.topLeft(), + r.bottomLeft(), + QPointF(r.right() - ArrowSize, r.bottom()), + QPointF(r.right(), rect.bottom()), + }; + + const QPointF highlight_points[] = { + QPointF(r.right() - 1, r.top() + 1), + QPointF(r.left() + 1, r.top() + 1), + QPointF(r.left() + 1, r.bottom() - 1), + QPointF(r.right() - ArrowSize + 1, r.bottom() - 1), + QPointF(r.right() - 1, rect.bottom() - 1), + }; + + p.setPen(Qt::transparent); + p.setBrush(FillColour); + p.drawPolygon(points, countof(points)); + + p.setPen(HighlightColour); + p.setBrush(Qt::transparent); + p.drawPolygon(highlight_points, countof(highlight_points)); + + p.setPen(LineColour); + p.setBrush(Qt::transparent); + p.drawPolygon(points, countof(points)); + } p.setPen(TextColour); p.drawText(r, Qt::AlignCenter | Qt::AlignVCenter, diff --git a/pv/view/cursor.h b/pv/view/cursor.h index 2e16882d..4c0c35dd 100644 --- a/pv/view/cursor.h +++ b/pv/view/cursor.h @@ -49,8 +49,9 @@ public: * Constructor. * @param view A reference to the view that owns this cursor pair. * @param time The time to set the flag to. + * @param other A reference to the other cursor. */ - Cursor(const View &view, double time); + Cursor(const View &view, double time, Cursor &other); public: /** @@ -73,6 +74,8 @@ private: void compute_text_size(QPainter &p, unsigned int prefix); private: + const Cursor &_other; + QSizeF _text_size; }; diff --git a/pv/view/cursorpair.cpp b/pv/view/cursorpair.cpp index c148b851..feac91d2 100644 --- a/pv/view/cursorpair.cpp +++ b/pv/view/cursorpair.cpp @@ -30,8 +30,8 @@ namespace pv { namespace view { CursorPair::CursorPair(const View &view) : - _first(view, 0.0), - _second(view, 1.0), + _first(view, 0.0, _second), + _second(view, 1.0, _first), _view(view) { } -- 2.30.2