Show progress during kinetic scrolling, too.
authorAkos Polster <polster@marzipan.pipacs.com>
Sun, 8 Aug 2010 01:57:10 +0000 (03:57 +0200)
committerAkos Polster <polster@marzipan.pipacs.com>
Sun, 8 Aug 2010 01:57:10 +0000 (03:57 +0200)
bookview.cpp
bookview.h

index 39870b5..a5bbfe0 100644 (file)
@@ -5,6 +5,10 @@
 #include <QDir>
 #include <QTimer>
 
+#ifdef Q_WS_MAEMO_5
+#   include <QAbstractKineticScroller>
+#endif
+
 #include "book.h"
 #include "bookview.h"
 #include "library.h"
@@ -21,7 +25,7 @@
 BookView::BookView(QWidget *parent):
     QWebView(parent), contentIndex(-1), mBook(0),
     restorePositionAfterLoad(false), positionAfterLoad(0), loaded(false),
-    contentsHeight(0), decorated(false)
+    contentsHeight(0), decorated(false), scrollerMonitor(-1)
 {
     Trace t("BookView::BookView");
     settings()->setAttribute(QWebSettings::AutoLoadImages, true);
@@ -75,6 +79,13 @@ BookView::BookView(QWidget *parent):
     setBook(0);
 
     extractIcons();
+
+#ifdef Q_WS_MAEMO_5
+    scroller = property("kineticScroller").value<QAbstractKineticScroller *>();
+    if (scroller) {
+        t.trace("Got scroller");
+    }
+#endif
 }
 
 BookView::~BookView()
@@ -249,7 +260,11 @@ void BookView::paintEvent(QPaintEvent *e)
 void BookView::mousePressEvent(QMouseEvent *e)
 {
     QWebView::mousePressEvent(e);
-#ifndef Q_WS_MAEMO_5
+#ifdef Q_WS_MAEMO_5
+    if (scroller) {
+        scrollerMonitor = startTimer(250);
+    }
+#else
     QWebFrame *frame = page()->mainFrame();
     if (frame->scrollBarGeometry(Qt::Vertical).contains(e->pos())) {
         e->accept();
@@ -259,12 +274,6 @@ void BookView::mousePressEvent(QMouseEvent *e)
     e->ignore();
 }
 
-void BookView::mouseReleaseEvent(QMouseEvent *e)
-{
-    QWebView::mouseReleaseEvent(e);
-    showProgress();
-}
-
 void BookView::wheelEvent(QWheelEvent *e)
 {
     QWebView::wheelEvent(e);
@@ -433,3 +442,18 @@ void BookView::showProgress()
         emit progress(mBook->getProgress(contentIndex, pos));
     }
 }
+
+void BookView::timerEvent(QTimerEvent *e)
+{
+    if (e->timerId() == scrollerMonitor) {
+#ifdef Q_WS_MAEMO_5
+        if (scroller &&
+            ((scroller->state() == QAbstractKineticScroller::AutoScrolling) ||
+             (scroller->state() == QAbstractKineticScroller::Pushing))) {
+            showProgress();
+        } else {
+            killTimer(scrollerMonitor);
+        }
+    }
+#endif // Q_WS_MAEMO_5
+}
index 944ba00..635363a 100644 (file)
@@ -11,6 +11,7 @@
 
 class QModelIndex;
 class Progress;
+class QAbstractKineticScroller;
 
 /** Visual representation of a book. */
 class BookView: public QWebView
@@ -52,11 +53,11 @@ public slots:
 protected:
     void paintEvent(QPaintEvent *e);
     void mousePressEvent(QMouseEvent *e);
-    void mouseReleaseEvent(QMouseEvent *e);
     void wheelEvent(QWheelEvent *);
     bool eventFilter(QObject *o, QEvent *e);
     void leaveEvent(QEvent *e);
     void enterEvent(QEvent *e);
+    void timerEvent(QTimerEvent *e);
 
 private:
     /** Save navigation icons from resource to the file system. */
@@ -92,6 +93,11 @@ private:
     bool mousePressed;
     int contentsHeight; /**< Last know height of the frame. */
     bool decorated;     /**< True after adding the arrows to the frame contents. */
+
+    int scrollerMonitor;
+#ifdef Q_WS_MAEMO_5
+    QAbstractKineticScroller *scroller;
+#endif
 };
 
 #endif // BOOKVIEW_H