X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Fviewport.cpp;h=d9be32c996ee142b44603d1c9097a9bcde93295a;hb=08d9c3caec0a3ad1c624af685f948e17b91d278a;hp=2150182f543dd4a52eb974f3352198e8b2b24b66;hpb=8e21a82cac5eb399dc7158da4b34c664cb4958cd;p=pulseview.git diff --git a/pv/view/viewport.cpp b/pv/view/viewport.cpp index 2150182f..d9be32c9 100644 --- a/pv/view/viewport.cpp +++ b/pv/view/viewport.cpp @@ -36,7 +36,6 @@ using std::abs; using std::back_inserter; using std::copy; using std::dynamic_pointer_cast; -using std::isnan; using std::max; using std::min; using std::none_of; @@ -83,7 +82,8 @@ void Viewport::drag() void Viewport::drag_by(const QPoint &delta) { - if (isnan(drag_offset_)) + // Use std::isnan() instead of isnan(), the latter can cause issues. + if (std::isnan(drag_offset_)) return; view_.set_scale_offset(view_.scale(), drag_offset_ - @@ -195,18 +195,27 @@ void Viewport::mouseDoubleClickEvent(QMouseEvent *event) view_.zoom(-2.0, event->x()); } -void Viewport::wheelEvent(QWheelEvent *event) +void Viewport::wheelEvent(QWheelEvent *e) { - assert(event); - - if (event->orientation() == Qt::Vertical) { - // Vertical scrolling is interpreted as zooming in/out - view_.zoom(event->delta() / 120, event->x()); - } else if (event->orientation() == Qt::Horizontal) { + assert(e); + + if (e->orientation() == Qt::Vertical) + { + if (e->modifiers() & Qt::ControlModifier) { + // Vertical scrolling with the control key pressed + // is intrepretted as vertical scrolling + view_.set_v_offset(-view_.owner_visual_v_offset() - + (e->delta() * height()) / (8 * 120)); + } else { + // Vertical scrolling is interpreted as zooming in/out + view_.zoom(e->delta() / 120, e->x()); + } + } + else if (e->orientation() == Qt::Horizontal) + { // Horizontal scrolling is interpreted as moving left/right view_.set_scale_offset(view_.scale(), - event->delta() * view_.scale() - + view_.offset()); + e->delta() * view_.scale() + view_.offset()); } }