From 512bfc565937c0c1b07ec0e6486831526a6e1eee Mon Sep 17 00:00:00 2001 From: Jens Steinhauser Date: Sat, 24 May 2014 17:36:17 +0200 Subject: [PATCH] Header: Do not clip away the selection. --- pv/view/header.cpp | 11 ++++++++--- pv/view/header.h | 6 ++++++ pv/view/view.cpp | 8 +++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/pv/view/header.cpp b/pv/view/header.cpp index 87effd3d..2e497761 100644 --- a/pv/view/header.cpp +++ b/pv/view/header.cpp @@ -44,6 +44,7 @@ namespace pv { namespace view { const int Header::Padding = 12; +const int Header::BaselineOffset = 5; Header::Header(View &parent) : MarginWidget(parent), @@ -76,7 +77,7 @@ QSize Header::sizeHint() const } } - return QSize(max_width + Padding, 0); + return QSize(max_width + Padding + BaselineOffset, 0); } shared_ptr Header::get_mouse_over_trace(const QPoint &pt) @@ -107,7 +108,10 @@ void Header::clear_selection() void Header::paintEvent(QPaintEvent*) { - const int w = width(); + // The trace labels are not drawn with the arrows exactly on the + // left edge of the widget, because then the selection shadow + // would be clipped away. + const int w = width() - BaselineOffset; const vector< shared_ptr > traces(_view.get_traces()); QPainter painter(this); @@ -188,9 +192,10 @@ void Header::mouseReleaseEvent(QMouseEvent *event) const shared_ptr mouse_over_trace = get_mouse_over_trace(event->pos()); if (mouse_over_trace) { + const int w = width() - BaselineOffset; Popup *const p = mouse_over_trace->create_popup(&_view); - p->set_position(mapToGlobal(QPoint(width(), + p->set_position(mapToGlobal(QPoint(w, mouse_over_trace->get_y())), Popup::Right); p->show(); diff --git a/pv/view/header.h b/pv/view/header.h index 641f203b..eed1d1e1 100644 --- a/pv/view/header.h +++ b/pv/view/header.h @@ -45,6 +45,12 @@ public: QSize sizeHint() const; + /** + * The horizontal offset, relative to the left edge of the widget, + * where the arrows of the trace labels end. + */ + static const int BaselineOffset; + private: std::shared_ptr get_mouse_over_trace( const QPoint &pt); diff --git a/pv/view/view.cpp b/pv/view/view.cpp index 6c7df488..392114c8 100644 --- a/pv/view/view.cpp +++ b/pv/view/view.cpp @@ -128,8 +128,9 @@ View::View(SigSession &session, QWidget *parent) : // which were created before this object came into being signals_changed(); - // make sure the cursorheader is over the ruler + // make sure the transparent widgets are on the top _cursorheader->raise(); + _header->raise(); } SigSession& View::session() @@ -412,7 +413,8 @@ void View::update_scroll() void View::update_layout() { - setViewportMargins(_header->sizeHint().width(), + setViewportMargins( + _header->sizeHint().width() - pv::view::Header::BaselineOffset, _ruler->sizeHint().height(), 0, 0); _ruler->setGeometry(_viewport->x(), 0, _viewport->width(), _viewport->y()); @@ -421,7 +423,7 @@ void View::update_layout() _ruler->sizeHint().height() - _cursorheader->sizeHint().height() / 2, _viewport->width(), _cursorheader->sizeHint().height()); _header->setGeometry(0, _viewport->y(), - _viewport->x(), _viewport->height()); + _header->sizeHint().width(), _viewport->height()); update_scroll(); } -- 2.30.2