aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Guminiak <michal.guminiak@teleca.com>2010-11-12 12:46:06 +0100
committerDominik Kapusta <dominik.kapusta@teleca.com>2011-01-03 12:45:37 +0100
commit8e29665726512d45f740363e17cf40907cdfb183 (patch)
treeb4c9ac2f5760b210b25b2fc6f0c5a9ac625f0c1d
parente1c1163b80934dbff2e50a11240af1f0feca3dcc (diff)
Fixes: NB#194018 - MPannableViewport::setMinimumSize resets panned widget position.
RevBy: Dominik Details: setting position of the panned widget was working around pannable viewport layout. When the layout wanted to update geometry of the panned widget it was resetting paned widget position. This patch removes the workaround in the pannable viewport and moves handling of the position change to the pannable viewport layout.
-rw-r--r--src/corelib/widgets/mpannableviewport.cpp17
-rw-r--r--src/corelib/widgets/mpannableviewport.h1
-rw-r--r--src/corelib/widgets/mpannableviewport_p.h1
-rw-r--r--src/corelib/widgets/mpannableviewportlayout.cpp12
-rw-r--r--src/corelib/widgets/mpannableviewportlayout.h2
-rw-r--r--tests/ut_mpannableviewport/ut_mpannableviewport.cpp1
6 files changed, 16 insertions, 18 deletions
diff --git a/src/corelib/widgets/mpannableviewport.cpp b/src/corelib/widgets/mpannableviewport.cpp
index f3713c4a..b4ba91d3 100644
--- a/src/corelib/widgets/mpannableviewport.cpp
+++ b/src/corelib/widgets/mpannableviewport.cpp
@@ -219,17 +219,6 @@ void MPannableViewportPrivate::_q_positionIndicatorEnabledChanged()
}
}
-void MPannableViewportPrivate::_q_pannedWidgetGeometryChanged()
-{
- Q_Q(MPannableViewport);
-
- QPointF physicsPosition = q->position();
- QPointF roundedP = QPointF(floor(physicsPosition.x()), floor(physicsPosition.y()));
-
- if (roundedP != -pannedWidget->pos())
- q->updatePosition(physicsPosition);
-}
-
void MPannableViewportPrivate::_q_pannedWidgetHeightOutOfViewport()
{
Q_Q(MPannableViewport);;
@@ -386,7 +375,6 @@ void MPannableViewport::setWidget(QGraphicsWidget *widget)
Q_D(MPannableViewport);
if (d->pannedWidget) {
- disconnect(d->pannedWidget, SIGNAL(geometryChanged()), this, SLOT(_q_pannedWidgetGeometryChanged()));
disconnect(d->pannedWidget, SIGNAL(heightChanged()), this, SLOT(_q_pannedWidgetHeightOutOfViewport()));
disconnect(d->pannedWidget, SIGNAL(widthChanged()), this, SLOT(_q_pannedWidgetWidthOutOfViewport()));
}
@@ -395,11 +383,10 @@ void MPannableViewport::setWidget(QGraphicsWidget *widget)
d->viewportLayout->setWidget(widget);
if (widget) {
- connect(widget, SIGNAL(geometryChanged()), this, SLOT(_q_pannedWidgetGeometryChanged()));
connect(widget, SIGNAL(heightChanged()), this, SLOT(_q_pannedWidgetHeightOutOfViewport()));
connect(widget, SIGNAL(widthChanged()), this, SLOT(_q_pannedWidgetWidthOutOfViewport()));
- widget->setPos(-position());
+ d->viewportLayout->invalidate();
widget->setZValue(ZValuePannedWidget);
}
@@ -451,7 +438,7 @@ void MPannableViewport::updatePosition(const QPointF &p)
// panning.
if (d->pannedWidget && d->pannedWidget->pos() != -roundedP) {
- d->pannedWidget->setPos(-roundedP);
+ d->viewportLayout->setPanningPosition(-roundedP);
emit positionChanged(roundedP);
}
}
diff --git a/src/corelib/widgets/mpannableviewport.h b/src/corelib/widgets/mpannableviewport.h
index c2cb987f..e91ad375 100644
--- a/src/corelib/widgets/mpannableviewport.h
+++ b/src/corelib/widgets/mpannableviewport.h
@@ -178,7 +178,6 @@ private:
Q_DECLARE_PRIVATE(MPannableViewport)
Q_PRIVATE_SLOT(d_func(), void _q_resolvePannedWidgetIsOnDisplay())
Q_PRIVATE_SLOT(d_func(), void _q_positionIndicatorEnabledChanged())
- Q_PRIVATE_SLOT(d_func(), void _q_pannedWidgetGeometryChanged())
Q_PRIVATE_SLOT(d_func(), void _q_pannedWidgetWidthOutOfViewport())
Q_PRIVATE_SLOT(d_func(), void _q_pannedWidgetHeightOutOfViewport())
Q_PRIVATE_SLOT(d_func(), void _q_ensureFocusedPannedWidgetIsVisible())
diff --git a/src/corelib/widgets/mpannableviewport_p.h b/src/corelib/widgets/mpannableviewport_p.h
index 1b338878..7b698365 100644
--- a/src/corelib/widgets/mpannableviewport_p.h
+++ b/src/corelib/widgets/mpannableviewport_p.h
@@ -65,7 +65,6 @@ public:
void _q_resolvePannedWidgetIsOnDisplay();
void _q_positionIndicatorEnabledChanged();
- void _q_pannedWidgetGeometryChanged();
void _q_pannedWidgetWidthOutOfViewport();
void _q_pannedWidgetHeightOutOfViewport();
void _q_ensureFocusedPannedWidgetIsVisible();
diff --git a/src/corelib/widgets/mpannableviewportlayout.cpp b/src/corelib/widgets/mpannableviewportlayout.cpp
index 66aa5c1c..9c2c88e7 100644
--- a/src/corelib/widgets/mpannableviewportlayout.cpp
+++ b/src/corelib/widgets/mpannableviewportlayout.cpp
@@ -24,7 +24,8 @@
MPannableViewportLayout::MPannableViewportLayout(QGraphicsLayoutItem *parent)
: QGraphicsLinearLayout(parent),
pannedWidget(0),
- directions(0)
+ directions(0),
+ panningPos(QPointF())
{
}
@@ -51,9 +52,18 @@ void MPannableViewportLayout::setWidget(QGraphicsWidget *widget)
}
}
+void MPannableViewportLayout::setPanningPosition(const QPointF &newPos)
+{
+ if (newPos != panningPos) {
+ panningPos = newPos;
+ invalidate();
+ }
+}
+
void MPannableViewportLayout::setGeometry(const QRectF &rect)
{
QRectF unboundedRect = rect;
+ unboundedRect.moveTo(panningPos);
if (pannedWidget) {
switch (directions) {
diff --git a/src/corelib/widgets/mpannableviewportlayout.h b/src/corelib/widgets/mpannableviewportlayout.h
index f19dda94..a868b3ba 100644
--- a/src/corelib/widgets/mpannableviewportlayout.h
+++ b/src/corelib/widgets/mpannableviewportlayout.h
@@ -32,6 +32,7 @@ public:
Qt::Orientations panningDirections() const;
void setWidget(QGraphicsWidget *widget);
+ void setPanningPosition(const QPointF& newPos);
//! \reimp
void setGeometry(const QRectF &rect);
@@ -40,6 +41,7 @@ public:
private:
QGraphicsWidget *pannedWidget;
Qt::Orientations directions;
+ QPointF panningPos;
};
//! \internal_end
diff --git a/tests/ut_mpannableviewport/ut_mpannableviewport.cpp b/tests/ut_mpannableviewport/ut_mpannableviewport.cpp
index 7d9746b1..6247524a 100644
--- a/tests/ut_mpannableviewport/ut_mpannableviewport.cpp
+++ b/tests/ut_mpannableviewport/ut_mpannableviewport.cpp
@@ -156,6 +156,7 @@ void Ut_MPannableViewport::updatePosition()
QSignalSpy spy(subject, SIGNAL(positionChanged(QPointF)));
subject->physics()->setPosition(QPointF(0,75));
+ subject->layout()->activate();
QCOMPARE(static_cast<MPannableViewportPrivate *>(subject->d_ptr)->pannedWidget->pos(), -QPointF(0, 75));