aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZackaryWelch <welch.zackary@gmail.com>2018-03-23 12:00:18 -0400
committerZackaryWelch <welch.zackary@gmail.com>2018-03-23 12:00:18 -0400
commit7545bf7468d3711cfe82fe2a780bfec9032ef764 (patch)
treee677e5402c049af6cd31697553420137552e4606
parentUpdate README.md (diff)
downloadlumina-7545bf7468d3711cfe82fe2a780bfec9032ef764.tar.gz
lumina-7545bf7468d3711cfe82fe2a780bfec9032ef764.tar.bz2
lumina-7545bf7468d3711cfe82fe2a780bfec9032ef764.zip
Jumps to page location instead of just page when using find or certain bookmarks
-rw-r--r--src-qt5/desktop-utils/lumina-pdf/PrintWidget.cpp34
-rw-r--r--src-qt5/desktop-utils/lumina-pdf/Renderer-mupdf.cpp2
2 files changed, 24 insertions, 12 deletions
diff --git a/src-qt5/desktop-utils/lumina-pdf/PrintWidget.cpp b/src-qt5/desktop-utils/lumina-pdf/PrintWidget.cpp
index 2ef271de..db2f6058 100644
--- a/src-qt5/desktop-utils/lumina-pdf/PrintWidget.cpp
+++ b/src-qt5/desktop-utils/lumina-pdf/PrintWidget.cpp
@@ -156,8 +156,8 @@ void PrintWidget::highlightText(TextData *text) {
QPen highlightOutline(QColor(255, 255, 100, 125));
scene->addRect(rect, highlightOutline, highlightFill);
text->highlighted(true);
- goToPosition(text->page(), rect.x(), rect.y());
}
+ goToPosition(text->page(), text->loc().x(), text->loc().y());
}
//Private functions
@@ -201,7 +201,7 @@ void PrintWidget::layoutPages() {
}
}
scene->setSceneRect(scene->itemsBoundingRect());
- qDebug() << "Finished Page Layout";
+ //qDebug() << "Finished Page Layout";
}
void PrintWidget::populateScene()
@@ -316,13 +316,25 @@ void PrintWidget::fit(bool doFitting) {
}
void PrintWidget::goToPosition(int pagenum, float x, float y) {
- setCurrentPage(pagenum+1);
- if(x != 0) {
- QScrollBar *hsc = this->horizontalScrollBar();
- hsc->setValue((int)x - 10);
- }
- if(y != 0) {
- QScrollBar *vsc = this->verticalScrollBar();
- vsc->setValue((int)y - 10);
- }
+ setCurrentPage(pagenum);
+
+ QScrollBar *hsc = this->horizontalScrollBar();
+ QScrollBar *vsc = this->verticalScrollBar();
+ QPointF pt = this->transform().map(pages.at(pagenum-1)->pos());
+ int secondPagenum = pagenum < pages.size() ? pagenum : pagenum-2;
+ QPointF pt2 = this->transform().map(pages.at(secondPagenum)->pos());
+ double realHeight = pages.at(pagenum-1)->boundingRect().height();
+ double virtualHeight = qAbs(pt2.y() - pt.y());
+
+ int yConv = int(pt.y() + y*(virtualHeight/realHeight)) - 10;
+ int xConv = int(pt.x() + x*(virtualHeight/realHeight)) - 10;
+
+ //qDebug() << "Y:" << y << "RATIO:" << virtualHeight/realHeight << "YCONV:" << yConv << "PTY" << pt.y() << "MAX" << vsc->maximum();
+ if(yConv > vsc->maximum())
+ vsc->triggerAction(QAbstractSlider::SliderToMaximum);
+ else if(y != 0)
+ vsc->setValue(yConv);
+
+ if(x != 0)
+ hsc->setValue(xConv);
}
diff --git a/src-qt5/desktop-utils/lumina-pdf/Renderer-mupdf.cpp b/src-qt5/desktop-utils/lumina-pdf/Renderer-mupdf.cpp
index 2349fff3..c36c6b08 100644
--- a/src-qt5/desktop-utils/lumina-pdf/Renderer-mupdf.cpp
+++ b/src-qt5/desktop-utils/lumina-pdf/Renderer-mupdf.cpp
@@ -85,7 +85,7 @@ void Renderer::handleLink(QString link) {
if(!link.isEmpty()) {
pagenum = fz_resolve_link(CTX, DOC, uri, &xp, &yp);
- emit goToPosition(pagenum, xp, yp);
+ emit goToPosition(pagenum+1, xp, yp);
}
}
bgstack15