aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarno Malmari <ext-jarno.malmari@nokia.com>2010-12-15 18:54:40 +0200
committerAdrian Yanes <ext-adrian.yanes@nokia.com>2010-12-21 10:23:51 +0100
commitee883860797c0d91aa2e1a8a4f9ff44e55275319 (patch)
tree91af5b4e2fed3c316528480c374a7236202b83cd
parent28723aa34c7573394b1558be9becddf30931d5a1 (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.cpp11
-rw-r--r--src/corelib/widgets/mpannableviewport.cpp4
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 &currentOffset)
{
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));