mirror of
https://invent.kde.org/graphics/okular
synced 2024-10-01 05:33:33 +00:00
Group page scroll into a single function
Renamed wheelAccumulatedDelta to pageScrollDelta Use QTimer instead of timestamp for scroll idle timeout
This commit is contained in:
parent
4a6d28ddb8
commit
fefcd396a7
|
@ -177,7 +177,6 @@ public:
|
||||||
int lastSourceLocationViewportPageNumber = -1;
|
int lastSourceLocationViewportPageNumber = -1;
|
||||||
double lastSourceLocationViewportNormalizedX = 0.0;
|
double lastSourceLocationViewportNormalizedX = 0.0;
|
||||||
double lastSourceLocationViewportNormalizedY = 0.0;
|
double lastSourceLocationViewportNormalizedY = 0.0;
|
||||||
int wheelAccumulatedDelta = 0;
|
|
||||||
|
|
||||||
// for everything except PgUp/PgDn and scroll to arbitrary locations
|
// for everything except PgUp/PgDn and scroll to arbitrary locations
|
||||||
const int baseShortScrollDuration = 100;
|
const int baseShortScrollDuration = 100;
|
||||||
|
@ -218,6 +217,10 @@ public:
|
||||||
QPoint dragScrollVector;
|
QPoint dragScrollVector;
|
||||||
QTimer dragScrollTimer;
|
QTimer dragScrollTimer;
|
||||||
|
|
||||||
|
// page scroll
|
||||||
|
int pageScrollDelta = 0;
|
||||||
|
QTimer pageScrollTimer;
|
||||||
|
|
||||||
// left click depress
|
// left click depress
|
||||||
QTimer leftClickTimer;
|
QTimer leftClickTimer;
|
||||||
|
|
||||||
|
@ -423,6 +426,8 @@ PageView::PageView(QWidget *parent, Okular::Document *document)
|
||||||
|
|
||||||
connect(&d->dragScrollTimer, &QTimer::timeout, this, &PageView::slotDragScroll);
|
connect(&d->dragScrollTimer, &QTimer::timeout, this, &PageView::slotDragScroll);
|
||||||
|
|
||||||
|
connect(&d->pageScrollTimer, &QTimer::timeout, this, &PageView::slotPageScroll);
|
||||||
|
|
||||||
d->leftClickTimer.setSingleShot(true);
|
d->leftClickTimer.setSingleShot(true);
|
||||||
connect(&d->leftClickTimer, &QTimer::timeout, this, &PageView::slotShowSizeAllCursor);
|
connect(&d->leftClickTimer, &QTimer::timeout, this, &PageView::slotShowSizeAllCursor);
|
||||||
|
|
||||||
|
@ -2184,6 +2189,56 @@ void PageView::continuousZoomEnd()
|
||||||
updateCursor();
|
updateCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PageView::isPageScroll(int delta)
|
||||||
|
{
|
||||||
|
bool pageScroll = false;
|
||||||
|
int vScroll = verticalScrollBar()->value();
|
||||||
|
|
||||||
|
d->pageScrollDelta += delta;
|
||||||
|
if (d->pageScrollTimer.isActive()) {
|
||||||
|
d->pageScrollTimer.stop();
|
||||||
|
}
|
||||||
|
d->pageScrollTimer.setSingleShot(true);
|
||||||
|
d->pageScrollTimer.start(500);
|
||||||
|
|
||||||
|
if (d->pageScrollDelta <= -QWheelEvent::DefaultDeltasPerStep && vScroll == verticalScrollBar()->maximum()) {
|
||||||
|
// go to next page
|
||||||
|
if ((int)d->document->currentPage() < d->items.count() - 1) {
|
||||||
|
// more optimized than document->setNextPage and then move view to top
|
||||||
|
Okular::DocumentViewport newViewport = d->document->viewport();
|
||||||
|
newViewport.pageNumber += viewColumns();
|
||||||
|
if (newViewport.pageNumber >= (int)d->items.count()) {
|
||||||
|
newViewport.pageNumber = d->items.count() - 1;
|
||||||
|
}
|
||||||
|
newViewport.rePos.enabled = true;
|
||||||
|
newViewport.rePos.normalizedY = 0.0;
|
||||||
|
d->document->setViewport(newViewport);
|
||||||
|
d->scroller->scrollTo(QPoint(horizontalScrollBar()->value(), verticalScrollBar()->value()), 0); // sync scroller with scrollbar
|
||||||
|
d->pageScrollDelta = 0;
|
||||||
|
pageScroll = true;
|
||||||
|
}
|
||||||
|
} else if (d->pageScrollDelta >= QWheelEvent::DefaultDeltasPerStep && vScroll == verticalScrollBar()->minimum()) {
|
||||||
|
// go to prev page
|
||||||
|
if (d->document->currentPage() > 0) {
|
||||||
|
// more optimized than document->setPrevPage and then move view to bottom
|
||||||
|
Okular::DocumentViewport newViewport = d->document->viewport();
|
||||||
|
newViewport.pageNumber -= viewColumns();
|
||||||
|
if (newViewport.pageNumber < 0) {
|
||||||
|
newViewport.pageNumber = 0;
|
||||||
|
}
|
||||||
|
newViewport.rePos.enabled = true;
|
||||||
|
newViewport.rePos.normalizedY = 1.0;
|
||||||
|
d->document->setViewport(newViewport);
|
||||||
|
d->scroller->scrollTo(QPoint(horizontalScrollBar()->value(), verticalScrollBar()->value()), 0); // sync scroller with scrollbar
|
||||||
|
d->pageScrollDelta = 0;
|
||||||
|
pageScroll = true;
|
||||||
|
}
|
||||||
|
} else if ((d->pageScrollDelta < 0 && vScroll == verticalScrollBar()->maximum()) || (d->pageScrollDelta > 0 && vScroll == verticalScrollBar()->minimum())) {
|
||||||
|
pageScroll = true;
|
||||||
|
}
|
||||||
|
return pageScroll;
|
||||||
|
}
|
||||||
|
|
||||||
void PageView::mouseMoveEvent(QMouseEvent *e)
|
void PageView::mouseMoveEvent(QMouseEvent *e)
|
||||||
{
|
{
|
||||||
d->previousMouseMovePos = e->globalPosition();
|
d->previousMouseMovePos = e->globalPosition();
|
||||||
|
@ -2314,7 +2369,7 @@ void PageView::mouseMoveEvent(QMouseEvent *e)
|
||||||
|
|
||||||
void PageView::mousePressEvent(QMouseEvent *e)
|
void PageView::mousePressEvent(QMouseEvent *e)
|
||||||
{
|
{
|
||||||
d->wheelAccumulatedDelta = 0;
|
d->pageScrollDelta = 0;
|
||||||
|
|
||||||
// don't perform any mouse action when no document is shown
|
// don't perform any mouse action when no document is shown
|
||||||
if (d->items.isEmpty()) {
|
if (d->items.isEmpty()) {
|
||||||
|
@ -2515,7 +2570,7 @@ void PageView::mousePressEvent(QMouseEvent *e)
|
||||||
|
|
||||||
void PageView::mouseReleaseEvent(QMouseEvent *e)
|
void PageView::mouseReleaseEvent(QMouseEvent *e)
|
||||||
{
|
{
|
||||||
d->wheelAccumulatedDelta = 0;
|
d->pageScrollDelta = 0;
|
||||||
|
|
||||||
// stop the drag scrolling
|
// stop the drag scrolling
|
||||||
d->dragScrollTimer.stop();
|
d->dragScrollTimer.stop();
|
||||||
|
@ -3164,7 +3219,7 @@ void PageView::guessTableDividers()
|
||||||
|
|
||||||
void PageView::mouseDoubleClickEvent(QMouseEvent *e)
|
void PageView::mouseDoubleClickEvent(QMouseEvent *e)
|
||||||
{
|
{
|
||||||
d->wheelAccumulatedDelta = 0;
|
d->pageScrollDelta = 0;
|
||||||
|
|
||||||
if (e->button() == Qt::LeftButton) {
|
if (e->button() == Qt::LeftButton) {
|
||||||
const QPoint eventPos = contentAreaPoint(e->pos());
|
const QPoint eventPos = contentAreaPoint(e->pos());
|
||||||
|
@ -3216,54 +3271,16 @@ void PageView::wheelEvent(QWheelEvent *e)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int delta = e->angleDelta().y(), vScroll = verticalScrollBar()->value();
|
int delta = e->angleDelta().y();
|
||||||
e->accept();
|
e->accept();
|
||||||
if ((e->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) {
|
if ((e->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) {
|
||||||
continuousZoom(delta);
|
continuousZoom(delta);
|
||||||
} else {
|
} else {
|
||||||
bool scroll = true;
|
bool skipScroll = false;
|
||||||
d->wheelAccumulatedDelta += delta;
|
|
||||||
|
|
||||||
if (!getContinuousMode()) {
|
if (!getContinuousMode()) {
|
||||||
d->pageScrollTimestamp = e->timestamp();
|
skipScroll = isPageScroll(delta);
|
||||||
|
|
||||||
if (d->wheelAccumulatedDelta <= -QWheelEvent::DefaultDeltasPerStep && vScroll == verticalScrollBar()->maximum()) {
|
|
||||||
// go to next page
|
|
||||||
if ((int)d->document->currentPage() < d->items.count() - 1) {
|
|
||||||
// more optimized than document->setNextPage and then move view to top
|
|
||||||
Okular::DocumentViewport newViewport = d->document->viewport();
|
|
||||||
newViewport.pageNumber += viewColumns();
|
|
||||||
if (newViewport.pageNumber >= (int)d->items.count()) {
|
|
||||||
newViewport.pageNumber = d->items.count() - 1;
|
|
||||||
}
|
|
||||||
newViewport.rePos.enabled = true;
|
|
||||||
newViewport.rePos.normalizedY = 0.0;
|
|
||||||
d->document->setViewport(newViewport);
|
|
||||||
d->scroller->scrollTo(QPoint(horizontalScrollBar()->value(), verticalScrollBar()->value()), 0); // sync scroller with scrollbar
|
|
||||||
d->wheelAccumulatedDelta = 0;
|
|
||||||
scroll = false;
|
|
||||||
}
|
|
||||||
} else if (d->wheelAccumulatedDelta >= QWheelEvent::DefaultDeltasPerStep && vScroll == verticalScrollBar()->minimum()) {
|
|
||||||
// go to prev page
|
|
||||||
if (d->document->currentPage() > 0) {
|
|
||||||
// more optimized than document->setPrevPage and then move view to bottom
|
|
||||||
Okular::DocumentViewport newViewport = d->document->viewport();
|
|
||||||
newViewport.pageNumber -= viewColumns();
|
|
||||||
if (newViewport.pageNumber < 0) {
|
|
||||||
newViewport.pageNumber = 0;
|
|
||||||
}
|
|
||||||
newViewport.rePos.enabled = true;
|
|
||||||
newViewport.rePos.normalizedY = 1.0;
|
|
||||||
d->document->setViewport(newViewport);
|
|
||||||
d->scroller->scrollTo(QPoint(horizontalScrollBar()->value(), verticalScrollBar()->value()), 0); // sync scroller with scrollbar
|
|
||||||
d->wheelAccumulatedDelta = 0;
|
|
||||||
scroll = false;
|
|
||||||
}
|
|
||||||
} else if ((d->wheelAccumulatedDelta < 0 && vScroll == verticalScrollBar()->maximum()) || (d->wheelAccumulatedDelta > 0 && vScroll == verticalScrollBar()->minimum())) {
|
|
||||||
scroll = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (scroll) {
|
if (!skipScroll) {
|
||||||
// When the shift key is held down, scroll ten times faster
|
// When the shift key is held down, scroll ten times faster
|
||||||
int multiplier = e->modifiers() & Qt::ShiftModifier ? 10 : 1;
|
int multiplier = e->modifiers() & Qt::ShiftModifier ? 10 : 1;
|
||||||
|
|
||||||
|
@ -3278,7 +3295,7 @@ void PageView::wheelEvent(QWheelEvent *e)
|
||||||
} else {
|
} else {
|
||||||
d->scroller->scrollTo(d->scroller->finalPosition() - e->angleDelta() * multiplier, 0);
|
d->scroller->scrollTo(d->scroller->finalPosition() - e->angleDelta() * multiplier, 0);
|
||||||
}
|
}
|
||||||
d->wheelAccumulatedDelta = 0;
|
d->pageScrollDelta = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4931,6 +4948,11 @@ void PageView::slotDragScroll()
|
||||||
updateSelection(p);
|
updateSelection(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PageView::slotPageScroll()
|
||||||
|
{
|
||||||
|
d->pageScrollDelta = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void PageView::slotShowWelcome()
|
void PageView::slotShowWelcome()
|
||||||
{
|
{
|
||||||
// show initial welcome text
|
// show initial welcome text
|
||||||
|
|
|
@ -237,6 +237,9 @@ private:
|
||||||
*/
|
*/
|
||||||
bool getContinuousMode() const;
|
bool getContinuousMode() const;
|
||||||
|
|
||||||
|
// Hangle page scrolling in non-continuous mode
|
||||||
|
bool isPageScroll(int delta);
|
||||||
|
|
||||||
// Zoom around the point given as zoomCenter
|
// Zoom around the point given as zoomCenter
|
||||||
// zoomCenter is given in viewport coordinates
|
// zoomCenter is given in viewport coordinates
|
||||||
// newZoom is the intended new zoom level. A value of 0.0 means: Don't change the current zoom level.
|
// newZoom is the intended new zoom level. A value of 0.0 means: Don't change the current zoom level.
|
||||||
|
@ -259,6 +262,8 @@ private Q_SLOTS:
|
||||||
void slotAutoScroll();
|
void slotAutoScroll();
|
||||||
// activated by the dragScroll timer
|
// activated by the dragScroll timer
|
||||||
void slotDragScroll();
|
void slotDragScroll();
|
||||||
|
// activated by the pageScroll timer
|
||||||
|
void slotPageScroll();
|
||||||
// show the welcome message
|
// show the welcome message
|
||||||
void slotShowWelcome();
|
void slotShowWelcome();
|
||||||
// activated by left click timer
|
// activated by left click timer
|
||||||
|
|
Loading…
Reference in a new issue