X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fview%2Fviewport.cpp;h=d9be32c996ee142b44603d1c9097a9bcde93295a;hb=08d9c3caec0a3ad1c624af685f948e17b91d278a;hp=2dfdddc1448bddecd8653918c63204ca63dd266c;hpb=18ca62d26394f2ffe6e993ff02cd64958b2cee1b;p=pulseview.git diff --git a/pv/view/viewport.cpp b/pv/view/viewport.cpp index 2dfdddc1..d9be32c9 100644 --- a/pv/view/viewport.cpp +++ b/pv/view/viewport.cpp @@ -82,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_ - @@ -194,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()); } }