diff --git a/ui/pageview.h b/ui/pageview.h --- a/ui/pageview.h +++ b/ui/pageview.h @@ -225,6 +225,8 @@ void slotAutoScroll(); // activated by the dragScroll timer void slotDragScroll(); + // activated by the mouseBrowse timer when scrolling with the mouse + void slotMouseBrowse(); // show the welcome message void slotShowWelcome(); // activated by left click timer diff --git a/ui/pageview.cpp b/ui/pageview.cpp --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -202,6 +202,10 @@ QPoint dragScrollVector; QTimer dragScrollTimer; + // timer and vector for latency-free scolling + QPoint mouseBrowseVector; + QTimer mouseBrowseTimer; + // left click depress QTimer leftClickTimer; @@ -416,6 +420,8 @@ connect(horizontalScrollBar(), &QAbstractSlider::valueChanged, this, &PageView::slotRequestVisiblePixmaps); connect(verticalScrollBar(), &QAbstractSlider::valueChanged, this, &PageView::slotRequestVisiblePixmaps); connect( &d->dragScrollTimer, &QTimer::timeout, this, &PageView::slotDragScroll ); + connect( &d->mouseBrowseTimer, &QTimer::timeout, this, &PageView::slotMouseBrowse ); + d->mouseBrowseTimer.setInterval(1000/60); d->leftClickTimer.setSingleShot( true ); connect( &d->leftClickTimer, &QTimer::timeout, this, &PageView::slotShowSizeAllCursor ); @@ -2202,7 +2208,8 @@ d->mouseGrabPos = mousePos; // scroll page by position increment - scrollTo( horizontalScrollBar()->value() + delta.x(), verticalScrollBar()->value() + delta.y() ); + // add position increment to the total delta, to be updated by the timer + d->mouseBrowseVector+=delta; } } else if ( rightButton && !d->mousePressPos.isNull() && d->aMouseSelect ) @@ -2328,6 +2335,7 @@ PageViewItem * pageItem = pickItemOnPoint( eventPos.x(), eventPos.y() ); if ( leftButton ) { + d->mouseBrowseTimer.start(); if ( pageItem ) { d->mouseAnnotation->routeMousePressEvent( pageItem, eventPos ); @@ -2489,6 +2497,9 @@ // stop the drag scrolling d->dragScrollTimer.stop(); + d->mouseBrowseTimer.stop(); + slotMouseBrowse(); + d->leftClickTimer.stop(); const bool leftButton = e->button() == Qt::LeftButton; @@ -4930,6 +4941,15 @@ updateSelection( p ); } +void PageView::slotMouseBrowse() +{ + if(d->mouseBrowseVector == QPoint(0,0)) + return; + + scrollTo( horizontalScrollBar()->value() + d->mouseBrowseVector.x(), verticalScrollBar()->value() + d->mouseBrowseVector.y() ); + d->mouseBrowseVector={0,0}; +} + void PageView::slotShowWelcome() { // show initial welcome text