77164e4cc0
Virtually all code in Qt that inspects a QRegion does so by calling rects(), which returns a QVector<QRect>. But rects() has a problem: A QRegion that contains just one rectangle internally is not represented by a QVector, and the mere act of calling rects() makes QRegion create one. So, expose the fact that QRegion is a container of QRects to users by providing iterators and begin()/end(), which can be nothrow, since for the one-rectangle case, instead of vectorize()ing the region, we just return pointers to (and one past) the 'extent' rectangle. As a consequence, the iterator type is just const QRect*, but I think that whatever containers QRegion may use under the hood in the future, it will be certainly one that is layout-compatible with a C array. No mutable iterators are provided, since QRegion maintains a running bounding-rect, so a mutable iterator would have to call into QRegion for every change, which doesn't make sense. [ChangeLog][QtGui][QRegion] Is now iterable as a container of QRects: added {c,}{r,}{begin,end}(). Change-Id: I2fa565fac0c1d26e2c0937604b23763cd4e23604 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> |
||
---|---|---|
.. | ||
.gitignore | ||
qregion.pro | ||
tst_qregion.cpp |