diff options
author | Jarno Malmari <ext-jarno.malmari@nokia.com> | 2010-12-15 18:54:40 +0200 |
---|---|---|
committer | Adrian Yanes <ext-adrian.yanes@nokia.com> | 2010-12-21 10:23:51 +0100 |
commit | ee883860797c0d91aa2e1a8a4f9ff44e55275319 (patch) | |
tree | 91af5b4e2fed3c316528480c374a7236202b83cd | |
parent | 28723aa34c7573394b1558be9becddf30931d5a1 (diff) |
Fixes: NB#210352
RevBy: Michael Hasselmann, MichaĆ Guminiak
Details: The view doesn't move anymore while typing. It does however move a
bit up because the text edit reports quite big cursor size. This is probably
used as a placeholder for completer, yet to appear.
Fixes were done by changing from contentsRect() to just plain size() and
rect() in MPannableViewport. The viewport clips children to rect(), not to
contentsRect(). Also MPannableViewportScroller reports correctly its
intermediate scrolling capabilities.
-rw-r--r-- | src/corelib/core/mpannableviewportscroller.cpp | 11 | ||||
-rw-r--r-- | src/corelib/widgets/mpannableviewport.cpp | 4 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/corelib/core/mpannableviewportscroller.cpp b/src/corelib/core/mpannableviewportscroller.cpp index 3cea7399..d2431444 100644 --- a/src/corelib/core/mpannableviewportscroller.cpp +++ b/src/corelib/core/mpannableviewportscroller.cpp @@ -24,7 +24,7 @@ QPoint MPannableViewportScroller::queryScrollingAmount(const QGraphicsWidget *widget, const QRect &targetRect, const QPoint &originPoint, - const QPoint &) + const QPoint ¤tOffset) { const MPannableViewport *viewport = static_cast<const MPannableViewport *>(widget); @@ -39,14 +39,17 @@ QPoint MPannableViewportScroller::queryScrollingAmount(const QGraphicsWidget *wi // Note: We might even move against the wanted direction but this is required to // ensure the visibility of the area marked by target rectangle. QRect visibleTargetRect(targetRect); - moveRectInsideArea(viewport->contentsRect().toRect(), visibleTargetRect); + moveRectInsideArea(viewport->rect().toRect(), visibleTargetRect); // Calculate how much pannable contents should be translated. const QPoint contentsOffset(visibleTargetRect.topLeft() - originPoint); + // Take into consideration how much we have already promised to scroll. + const QPointF currentPosition = viewport->position() - currentOffset; + // Calculate the new panning position, i.e. position of the pannable viewport // in panned widget coordinates. - QPointF panningPos(viewport->position() - contentsOffset); + QPointF panningPos(currentPosition - contentsOffset); // Get allowed range for position to be used with MPannableWidget::setPosition(). QRectF posRange = viewport->range(); @@ -54,7 +57,7 @@ QPoint MPannableViewportScroller::queryScrollingAmount(const QGraphicsWidget *wi // ...and limit our panning accordingly. panningPos.ry() = qMax(posRange.top(), panningPos.y()); // We can extend bottom limit. - const QPoint translation(0, viewport->position().y() - panningPos.y()); + const QPoint translation(0, currentPosition.y() - panningPos.y()); return translation; } diff --git a/src/corelib/widgets/mpannableviewport.cpp b/src/corelib/widgets/mpannableviewport.cpp index 5b5e3c72..5aaab069 100644 --- a/src/corelib/widgets/mpannableviewport.cpp +++ b/src/corelib/widgets/mpannableviewport.cpp @@ -94,7 +94,7 @@ void MPannableViewportPrivate::setInputMethodArea(const QRect &imArea) // Assume only bottom part of pannable area is covered by SIP. const int overlappingHeight = (q->mapRectFromScene(imArea).toRect() - & q->contentsRect().toRect()).height(); + & q->rect().toRect()).height(); // Increase panning range to so that user can pan areas beneath // software input panel visible. @@ -131,7 +131,7 @@ void MPannableViewportPrivate::scrollTo(const QPointF &endPosition) // This privileged scrolling extends the range if necessary. const qreal bottomRangeExtension = endPosition.y() - + q->contentsRect().height() + + q->size().height() - pannedWidget->size().height(); setAutoScrollingExtension(qMax<qreal>(0.0, bottomRangeExtension)); |