diff options
author | Jarno Malmari <ext-jarno.malmari@nokia.com> | 2010-12-01 15:41:23 +0200 |
---|---|---|
committer | Pekka Vuorela <pekka.ta.vuorela@nokia.com> | 2010-12-08 18:10:12 +0200 |
commit | 9f6a800e5fa45d58a505dcf34d4f2fa684e1f778 (patch) | |
tree | e7517835582b7344932c1ef9859588fbc8e71aa6 | |
parent | 27570779a428f25c2d310e3fba245863a169d928 (diff) |
Fixes: NB#207822, SceneWindow is relocated too much.
RevBy: Michael Hasselmann, Hannu Koivisto
Details: Give MSceneWindowScroller the currently planned position when querying new one.
-rw-r--r-- | src/corelib/core/mabstractscroller.h | 4 | ||||
-rw-r--r-- | src/corelib/core/mpannableviewportscroller.cpp | 3 | ||||
-rw-r--r-- | src/corelib/core/mpannableviewportscroller.h | 3 | ||||
-rw-r--r-- | src/corelib/core/mscenewindowscroller.cpp | 5 | ||||
-rw-r--r-- | src/corelib/core/mscenewindowscroller.h | 3 | ||||
-rw-r--r-- | src/corelib/core/mscrollchain.cpp | 2 | ||||
-rw-r--r-- | tests/ut_mscrollchain/ut_mscrollchain.cpp | 3 |
7 files changed, 15 insertions, 8 deletions
diff --git a/src/corelib/core/mabstractscroller.h b/src/corelib/core/mabstractscroller.h index 3b183691..12cafa57 100644 --- a/src/corelib/core/mabstractscroller.h +++ b/src/corelib/core/mabstractscroller.h @@ -54,10 +54,12 @@ public: * \param widget The scrollable widget in question. * \param targetRect Target rectangle of the area of interest, in local widget coordinates. * \param originPoint Current position (top left) of the area to be moved to targetRect, in local widget coordinates. + * \param currentOffset The amount that \a widget is already planned to be scrolled but not yet applied. */ virtual QPoint queryScrollingAmount(const QGraphicsWidget *widget, const QRect &targetRect, - const QPoint &originPoint) = 0; + const QPoint &originPoint, + const QPoint ¤tOffset) = 0; //! \brief Scrolls the contents of given \a widget by the amount of \a contentsOffset. virtual void applyScrolling(QGraphicsWidget *widget, const QPoint &contentsOffset) = 0; diff --git a/src/corelib/core/mpannableviewportscroller.cpp b/src/corelib/core/mpannableviewportscroller.cpp index 844c472e..be854ec4 100644 --- a/src/corelib/core/mpannableviewportscroller.cpp +++ b/src/corelib/core/mpannableviewportscroller.cpp @@ -23,7 +23,8 @@ QPoint MPannableViewportScroller::queryScrollingAmount(const QGraphicsWidget *widget, const QRect &targetRect, - const QPoint &originPoint) + const QPoint &originPoint, + const QPoint &) { const MPannableViewport *viewport = static_cast<const MPannableViewport *>(widget); diff --git a/src/corelib/core/mpannableviewportscroller.h b/src/corelib/core/mpannableviewportscroller.h index 6263a49c..aaac86fc 100644 --- a/src/corelib/core/mpannableviewportscroller.h +++ b/src/corelib/core/mpannableviewportscroller.h @@ -29,7 +29,8 @@ class MPannableViewportScroller : public MAbstractScroller public: virtual QPoint queryScrollingAmount(const QGraphicsWidget *widget, const QRect &targetRect, - const QPoint &originPoint); + const QPoint &originPoint, + const QPoint ¤tOffset); virtual void applyScrolling(QGraphicsWidget *widget, const QPoint &contentsOffset); virtual void restoreScrolling(QGraphicsWidget *widget); }; diff --git a/src/corelib/core/mscenewindowscroller.cpp b/src/corelib/core/mscenewindowscroller.cpp index 44bebc9b..783900f2 100644 --- a/src/corelib/core/mscenewindowscroller.cpp +++ b/src/corelib/core/mscenewindowscroller.cpp @@ -25,7 +25,8 @@ QPoint MSceneWindowScroller::queryScrollingAmount(const QGraphicsWidget *widget, const QRect &targetRect, - const QPoint &originPoint) + const QPoint &originPoint, + const QPoint ¤tOffset) { const MSceneWindow *sceneWindow = static_cast<const MSceneWindow *>(widget); @@ -35,7 +36,7 @@ QPoint MSceneWindowScroller::queryScrollingAmount(const QGraphicsWidget *widget, const QRect sceneRect(QRect(QPoint(), sceneWindow->sceneManager()->visibleSceneSize(M::Landscape))); const QRect mappedSceneRect(sceneWindow->mapRectFromScene(sceneRect).toRect()); - const int distanceFromBottom = mappedSceneRect.bottom() - sceneWindow->rect().toRect().bottom(); + const int distanceFromBottom = (mappedSceneRect.bottom() - currentOffset.y()) - sceneWindow->rect().toRect().bottom(); // Negative offset increases distance from bottom. const QPoint offset(targetRect.topLeft() - originPoint); diff --git a/src/corelib/core/mscenewindowscroller.h b/src/corelib/core/mscenewindowscroller.h index 4e263d39..1a433feb 100644 --- a/src/corelib/core/mscenewindowscroller.h +++ b/src/corelib/core/mscenewindowscroller.h @@ -42,7 +42,8 @@ signals: public: virtual QPoint queryScrollingAmount(const QGraphicsWidget *widget, const QRect &targetRect, - const QPoint &originPoint); + const QPoint &originPoint, + const QPoint ¤tOffset); virtual void applyScrolling(QGraphicsWidget *widget, const QPoint &contentsOffset); virtual void restoreScrolling(QGraphicsWidget *widget); }; diff --git a/src/corelib/core/mscrollchain.cpp b/src/corelib/core/mscrollchain.cpp index b49bf98a..a292ec32 100644 --- a/src/corelib/core/mscrollchain.cpp +++ b/src/corelib/core/mscrollchain.cpp @@ -228,7 +228,7 @@ MScrollChain::ScrollChainItem::ScrollChainItem(QSharedPointer<MAbstractScroller> void MScrollChain::ScrollChainItem::calculateScrolling(const QRect &targetRect, const QPoint &originPoint) { - contentsTranslation += scroller->queryScrollingAmount(widget, targetRect, originPoint); + contentsTranslation += scroller->queryScrollingAmount(widget, targetRect, originPoint, contentsTranslation); } void MScrollChain::ScrollChainItem::applyScrolling() diff --git a/tests/ut_mscrollchain/ut_mscrollchain.cpp b/tests/ut_mscrollchain/ut_mscrollchain.cpp index 2c50cbcf..193f9dc0 100644 --- a/tests/ut_mscrollchain/ut_mscrollchain.cpp +++ b/tests/ut_mscrollchain/ut_mscrollchain.cpp @@ -78,7 +78,8 @@ public: virtual QPoint queryScrollingAmount(const QGraphicsWidget *widget, const QRect &targetRect, - const QPoint &originPoint) + const QPoint &originPoint, + const QPoint &) { const QRect boundaries(widget->boundingRect().toRect()); |