X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fview%2Ftimemarker.cpp;h=9d6e7fde6b126e547af4184b27f1542ed6faaf2e;hb=4fabd61a2676246265c12d614cde496bf0a79075;hp=6571bea95c0eac9e6c98c3fca0f27bb9511a5c79;hpb=d8d724cc987b7edb6a5e4e9d0dc8415f3cca06e9;p=pulseview.git diff --git a/pv/view/timemarker.cpp b/pv/view/timemarker.cpp index 6571bea..9d6e7fd 100644 --- a/pv/view/timemarker.cpp +++ b/pv/view/timemarker.cpp @@ -18,6 +18,10 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include + +#include + #include "timemarker.hpp" #include "view.hpp" @@ -25,11 +29,18 @@ #include #include +#include #include +using std::max; +using std::min; + namespace pv { namespace view { +const int TimeMarker::ArrowSize = 4; +const int TimeMarker::Offset = 1; + TimeMarker::TimeMarker(View &view, const QColor &colour, double time) : view_(view), colour_(colour), @@ -71,10 +82,59 @@ void TimeMarker::set_time(double time) void TimeMarker::paint(QPainter &p, const QRect &rect) { const float x = get_x(); - p.setPen(colour_); + p.setPen(colour_.darker()); p.drawLine(QPointF(x, rect.top()), QPointF(x, rect.bottom())); } +void TimeMarker::paint_label(QPainter &p, const QRect &rect) +{ + const qreal x = (time_ - view_.offset()) / view_.scale(); + const QRectF r(get_label_rect(rect)); + + const QPointF points[] = { + r.topLeft(), + r.bottomLeft(), + QPointF(max(r.left(), x - ArrowSize), r.bottom()), + QPointF(x, rect.bottom()), + QPointF(min(r.right(), x + ArrowSize), r.bottom()), + r.bottomRight(), + r.topRight() + }; + + const QPointF highlight_points[] = { + QPointF(r.left() + 1, r.top() + 1), + QPointF(r.left() + 1, r.bottom() - 1), + QPointF(max(r.left() + 1, x - ArrowSize), r.bottom() - 1), + QPointF(min(max(r.left() + 1, x), r.right() - 1), + rect.bottom() - 1), + QPointF(min(r.right() - 1, x + ArrowSize), r.bottom() - 1), + QPointF(r.right() - 1, r.bottom() - 1), + QPointF(r.right() - 1, r.top() + 1), + }; + + if (selected()) { + p.setPen(highlight_pen()); + p.setBrush(Qt::transparent); + p.drawPolygon(points, countof(points)); + } + + p.setPen(Qt::transparent); + p.setBrush(colour_); + p.drawPolygon(points, countof(points)); + + p.setPen(colour_.lighter()); + p.setBrush(Qt::transparent); + p.drawPolygon(highlight_points, countof(highlight_points)); + + p.setPen(colour_.darker()); + p.setBrush(Qt::transparent); + p.drawPolygon(points, countof(points)); + + p.setPen(select_text_colour(colour_)); + p.drawText(r, Qt::AlignCenter | Qt::AlignVCenter, + pv::util::format_time(time_, view_.tick_prefix(), 2)); +} + pv::widgets::Popup* TimeMarker::create_popup(QWidget *parent) { using pv::widgets::Popup;