diff options
author | Indiana Kernick <kerndog73@gmail.com> | 2019-12-14 05:31:48 +0000 |
---|---|---|
committer | Kerndog73 <kerndog73@gmail.com> | 2020-01-25 17:40:34 +1030 |
commit | ba1e880fbb2aacb550980bc2de35246bdcc38481 (patch) | |
tree | 84d2e6caa52ee7cc4c60f21062a3eacd8b888b5b /src | |
parent | bb42b7d8b2fe8508074bc4574679893c6cf4fbd5 (diff) |
QScrollArea: fix off-by-one error in ensureWidgetVisible
If focusRect was 5 pixels past the right side of the viewport, then the
scroll area would need to be scrolled by 5 pixels. The error arises
because of this:
focusRect.right() - d->viewport->width() == 4
focusRect.right() is still inside the rectangle but width is not.
So one has to be added. Likewise for focusRect.bottom() and height.
Change-Id: Ice47a7758d136b2e4bdcbe25a33a015b37f500c1
Fixes: QTBUG-80093
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/widgets/qscrollarea.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/widgets/widgets/qscrollarea.cpp b/src/widgets/widgets/qscrollarea.cpp index 68aa545082..c36ec98f9a 100644 --- a/src/widgets/widgets/qscrollarea.cpp +++ b/src/widgets/widgets/qscrollarea.cpp @@ -490,14 +490,14 @@ void QScrollArea::ensureWidgetVisible(QWidget *childWidget, int xmargin, int yma if (focusRect.width() > visibleRect.width()) d->hbar->setValue(focusRect.center().x() - d->viewport->width() / 2); else if (focusRect.right() > visibleRect.right()) - d->hbar->setValue(focusRect.right() - d->viewport->width()); + d->hbar->setValue(focusRect.right() - d->viewport->width() + 1); else if (focusRect.left() < visibleRect.left()) d->hbar->setValue(focusRect.left()); if (focusRect.height() > visibleRect.height()) d->vbar->setValue(focusRect.center().y() - d->viewport->height() / 2); else if (focusRect.bottom() > visibleRect.bottom()) - d->vbar->setValue(focusRect.bottom() - d->viewport->height()); + d->vbar->setValue(focusRect.bottom() - d->viewport->height() + 1); else if (focusRect.top() < visibleRect.top()) d->vbar->setValue(focusRect.top()); } |