aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarno Malmari <ext-jarno.malmari@nokia.com>2010-12-01 15:41:23 +0200
committerPekka Vuorela <pekka.ta.vuorela@nokia.com>2010-12-08 18:10:12 +0200
commit9f6a800e5fa45d58a505dcf34d4f2fa684e1f778 (patch)
treee7517835582b7344932c1ef9859588fbc8e71aa6
parent27570779a428f25c2d310e3fba245863a169d928 (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.h4
-rw-r--r--src/corelib/core/mpannableviewportscroller.cpp3
-rw-r--r--src/corelib/core/mpannableviewportscroller.h3
-rw-r--r--src/corelib/core/mscenewindowscroller.cpp5
-rw-r--r--src/corelib/core/mscenewindowscroller.h3
-rw-r--r--src/corelib/core/mscrollchain.cpp2
-rw-r--r--tests/ut_mscrollchain/ut_mscrollchain.cpp3
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 &currentOffset) = 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 &currentOffset);
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 &currentOffset)
{
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 &currentOffset);
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());