diff options
author | Michal Guminiak <michal.guminiak@teleca.com> | 2010-11-12 12:46:06 +0100 |
---|---|---|
committer | Dominik Kapusta <dominik.kapusta@teleca.com> | 2011-01-03 12:45:37 +0100 |
commit | 8e29665726512d45f740363e17cf40907cdfb183 (patch) | |
tree | b4c9ac2f5760b210b25b2fc6f0c5a9ac625f0c1d | |
parent | e1c1163b80934dbff2e50a11240af1f0feca3dcc (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.cpp | 17 | ||||
-rw-r--r-- | src/corelib/widgets/mpannableviewport.h | 1 | ||||
-rw-r--r-- | src/corelib/widgets/mpannableviewport_p.h | 1 | ||||
-rw-r--r-- | src/corelib/widgets/mpannableviewportlayout.cpp | 12 | ||||
-rw-r--r-- | src/corelib/widgets/mpannableviewportlayout.h | 2 | ||||
-rw-r--r-- | tests/ut_mpannableviewport/ut_mpannableviewport.cpp | 1 |
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)); |