Fix forward navigation control on Linux.
[dorian] / bookview.cpp
index f4606b7..b751393 100644 (file)
@@ -202,6 +202,7 @@ void BookView::goToBookmark(const Book::Bookmark &bookmark)
             positionAfterLoad = bookmark.pos;
             loadContent(bookmark.part);
         } else {
+            emit partLoadEnd(contentIndex);
             goToPosition(bookmark.pos);
         }
     }
@@ -234,7 +235,6 @@ void BookView::goToFragment(const QString &fragment)
         QVariant ret = page()->mainFrame()->evaluateJavaScript(
                 QString("window.location='") + fragment + "'");
         qDebug() << ret;
-        // FIXME: setLastBookmark();
     }
 }
 
@@ -355,18 +355,18 @@ void BookView::paintEvent(QPaintEvent *e)
         int bookmarkPos = (int)((qreal)height * (qreal)b.pos);
         painter.drawPixmap(2, bookmarkPos - scrollPos.y(), bookmarkPixmap);
     }
-    if (mBook) {
-        QPen pen(Qt::gray);
-        pen.setStyle(Qt::DotLine);
-        pen.setWidth(3);
-        painter.setPen(pen);
-        if (contentIndex > 0) {
-            painter.drawLine(0, -scrollPos.y(), width(), -scrollPos.y());
-        }
-        if (contentIndex < (mBook->parts.size() - 1)) {
-            int h = contentsHeight - scrollPos.y() - 1;
-            painter.drawLine(0, h, width(), h);
-        }
+
+    // Paint page separator(s)
+    QPen pen(Qt::gray);
+    pen.setStyle(Qt::DotLine);
+    pen.setWidth(3);
+    painter.setPen(pen);
+    if (contentIndex > 0) {
+        painter.drawLine(0, -scrollPos.y(), width(), -scrollPos.y());
+    }
+    if (contentIndex < (mBook->parts.size() - 1)) {
+        int h = contentsHeight - scrollPos.y() - 1;
+        painter.drawLine(0, h, width(), h);
     }
 }
 
@@ -520,8 +520,8 @@ void BookView::hideEvent(QHideEvent *e)
 void BookView::goPreviousPage()
 {
     QWebFrame *frame = page()->mainFrame();
-    int pos = frame->scrollPosition().y();
-    frame->scroll(0, -(height() - 19));
+    const int pos = frame->scrollPosition().y();
+    frame->scroll(0, -1);
     if (pos == frame->scrollPosition().y()) {
         if (contentIndex > 0) {
             Book::Bookmark bookmark(contentIndex - 1, 1.0);
@@ -530,6 +530,15 @@ void BookView::goPreviousPage()
         }
     } else {
         showProgress();
+        QPropertyAnimation *slide =
+                new QPropertyAnimation(frame, "scrollPosition");
+        const QPoint *offset = new QPoint(0, height() - 18);
+        slide->setDuration(400);
+        slide->setStartValue(frame->scrollPosition());
+        slide->setEndValue(frame->scrollPosition() - *offset);
+        slide->setEasingCurve(QEasingCurve::OutQuad);
+        slide->start(QAbstractAnimation::DeleteWhenStopped);
+        delete offset;
     }
 }
 
@@ -537,12 +546,21 @@ void BookView::goNextPage()
 {
     TRACE;
     QWebFrame *frame = page()->mainFrame();
-    int pos = frame->scrollPosition().y();
-    frame->scroll(0, height() - 19);
+    const int pos = frame->scrollPosition().y();
+    frame->scroll(0, 1);
     if (pos == frame->scrollPosition().y()) {
         goNext();
     } else {
         showProgress();
+        QPropertyAnimation *slide =
+                new QPropertyAnimation(frame, "scrollPosition");
+        const QPoint *offset = new QPoint(0, (height() - 18));
+        slide->setDuration(400);
+        slide->setStartValue(frame->scrollPosition());
+        slide->setEndValue(frame->scrollPosition() + *offset);
+        slide->setEasingCurve(QEasingCurve::OutQuad);
+        slide->start(QAbstractAnimation::DeleteWhenStopped);
+        delete offset;
     }
 }