QTreeView: fix Private::intersectedRect()
Don't try to update the left and right boundaries when no valid idxRect was found. Also fix the early exit check - we can exit when the idxRect is completely below *or* completely above the current viewport. This amends 2f9c72028d2481f587f378a256654d0a362e3d44. Pick-to: 6.9 6.8 Fixes: QTBUG-132670 Task-number: QTBUG-124173 Change-Id: I51f9e12c66268318e597facfbe4df74367d1089a Reviewed-by: David Faure <david.faure@kdab.com>
This commit is contained in:
parent
9f10fd8374
commit
9d4b5fa017
@ -1428,7 +1428,7 @@ QRect QTreeViewPrivate::intersectedRect(const QRect rect, const QModelIndex &top
|
|||||||
if (idxRect.isNull())
|
if (idxRect.isNull())
|
||||||
continue;
|
continue;
|
||||||
// early exit when complete row is out of viewport
|
// early exit when complete row is out of viewport
|
||||||
if (idxRect.top() > rect.bottom() && idxRect.bottom() < rect.top())
|
if (idxRect.top() > rect.bottom() || idxRect.bottom() < rect.top())
|
||||||
break;
|
break;
|
||||||
if (!idxRect.intersects(rect))
|
if (!idxRect.intersects(rect))
|
||||||
continue;
|
continue;
|
||||||
@ -1436,8 +1436,10 @@ QRect QTreeViewPrivate::intersectedRect(const QRect rect, const QModelIndex &top
|
|||||||
if (rowRect.left() < rect.left() && rowRect.right() > rect.right())
|
if (rowRect.left() < rect.left() && rowRect.right() > rect.right())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
left = std::min(left, rowRect.left());
|
if (rowRect.isValid()) {
|
||||||
right = std::max(right, rowRect.right());
|
left = std::min(left, rowRect.left());
|
||||||
|
right = std::max(right, rowRect.right());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
updateRect = updateRect.united(rowRect);
|
updateRect = updateRect.united(rowRect);
|
||||||
if (updateRect.contains(rect)) // already full rect covered?
|
if (updateRect.contains(rect)) // already full rect covered?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user