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>
This commit is contained in:
parent
bb42b7d8b2
commit
ba1e880fbb
@ -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());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user