]> sigrok.org Git - pulseview.git/commitdiff
View: Decouple horizontal scrolling from the scoll bar
authorAlexandru Gagniuc <redacted>
Sat, 26 Jan 2013 06:35:17 +0000 (00:35 -0600)
committerAlexandru Gagniuc <redacted>
Sat, 26 Jan 2013 06:35:17 +0000 (00:35 -0600)
Scrolling horizontally, regardless if through the tilt wheel, dragging the
signals, or moving the scroll bar, updates the viewport and the scroll bar. This
triggered a valueChanged() signal from the scroll bar, causing the viewport to
be updated again (redundantly). The operation of the viewport became dependent
on the scroll bar. On high zoom levels, where the scroll bar's resolution is
limited, the coupling manifested as jitter. The view was rendered with the
proper resolution of, caused the mouse drag event, then immediately updated and
rendered with the limited resolution of the scroll bar.

Decouple the viewport from the valueChanged() signal, and use the sliderMoved()
signal instead. The scroll bar becomes a simple input element, and only causes
a viewport update when acted upon by the user. Using the scroll bar is still
limited in resolution, but other scrolling methods are no longer affected by the
limitations of the scroll bar.

This fixes bug 7.

Signed-off-by: Alexandru Gagniuc <redacted>
pv/view/view.cpp
pv/view/view.h

index 34676334dc67867ba9b17fa064498232693e74e0..b52d689f22c12d988ef3d2f56499bc0b3e9f4629 100644 (file)
@@ -75,8 +75,8 @@ View::View(SigSession &session, QWidget *parent) :
                Cursor(*this, 1.0))),
        _hover_point(-1, -1)
 {
-       connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
-               this, SLOT(h_scroll_value_changed(int)));
+       connect(horizontalScrollBar(), SIGNAL(sliderMoved(int)),
+               this, SLOT(h_scroll_moved(int)));
        connect(verticalScrollBar(), SIGNAL(valueChanged(int)),
                this, SLOT(v_scroll_value_changed(int)));
 
@@ -288,7 +288,7 @@ void View::resizeEvent(QResizeEvent*)
        update_scroll();
 }
 
-void View::h_scroll_value_changed(int value)
+void View::h_scroll_moved(int value)
 {
        const int range = horizontalScrollBar()->maximum();
        if (range < MaxScrollValue)
index 5a10ee9ecea7be2b9dacd69c6bb964d0a215de23..dd0ad6ca9a2c0c9e2b3b66fb4867e9f55c028d30 100644 (file)
@@ -128,7 +128,7 @@ private:
 
 private slots:
 
-       void h_scroll_value_changed(int value);
+       void h_scroll_moved(int value);
        void v_scroll_value_changed(int value);
 
        void signals_changed();