]> sigrok.org Git - pulseview.git/blobdiff - pv/view/viewport.cpp
Viewport: Mouse wheel scrolls vertically when the control key is pressed
[pulseview.git] / pv / view / viewport.cpp
index 2150182f543dd4a52eb974f3352198e8b2b24b66..6b85e1b79d324c4788afc40b5903b02e0497d826 100644 (file)
@@ -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;
@@ -195,18 +194,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());
        }
 }