QtGui: use new QRegion::begin()/end() instead of rect()

Saves ~1100b in text size on optimized GCC 5.3 Linux AMD64 builds.

Change-Id: I928be44314dde06d5fdd2486a3417870bda64af4
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
bb10
Marc Mutz 2016-02-27 14:34:46 +01:00
parent d8f0a8a8a4
commit 79cbff60dd
9 changed files with 23 additions and 34 deletions

View File

@ -298,10 +298,8 @@ QRectF QBlittablePlatformPixmap::clipAndTransformRect(const QRectF &rect) const
if (clipData->hasRectClip) {
transformationRect &= clipData->clipRect;
} else if (clipData->hasRegionClip) {
const QVector<QRect> rects = clipData->clipRegion.rects();
for (int i = 0; i < rects.size(); i++) {
transformationRect &= rects.at(i);
}
for (const QRect &rect : clipData->clipRegion)
transformationRect &= rect;
}
}
}

View File

@ -382,8 +382,7 @@ inline QRegion fromNativeLocalRegion(const QRegion &pixelRegion, const QWindow *
qreal scaleFactor = QHighDpiScaling::factor(window);
QRegion pointRegion;
const auto rects = pixelRegion.rects();
for (const QRect &rect : rects) {
for (const QRect &rect : pixelRegion) {
pointRegion += QRect(fromNative(rect.topLeft(), scaleFactor),
fromNative(rect.size(), scaleFactor));
}
@ -399,7 +398,7 @@ inline QRegion fromNativeLocalExposedRegion(const QRegion &pixelRegion, const QW
const qreal scaleFactor = QHighDpiScaling::factor(window);
QRegion pointRegion;
foreach (const QRect &rect, pixelRegion.rects()) {
for (const QRect &rect : pixelRegion) {
const QPointF topLeftP = QPointF(rect.topLeft()) / scaleFactor;
const QPointF bottomRightP = QPointF(rect.bottomRight()) / scaleFactor;
pointRegion += QRect(QPoint(qFloor(topLeftP.x()), qFloor(topLeftP.y())),
@ -415,8 +414,7 @@ inline QRegion toNativeLocalRegion(const QRegion &pointRegion, const QWindow *wi
qreal scaleFactor = QHighDpiScaling::factor(window);
QRegion pixelRegon;
const auto rects = pointRegion.rects();
for (const QRect &rect : rects) {
for (const QRect &rect : pointRegion) {
pixelRegon += QRect(toNative(rect.topLeft(), scaleFactor),
toNative(rect.size(), scaleFactor));
}

View File

@ -1012,11 +1012,11 @@ void QOpenGL2PaintEngineExPrivate::fillStencilWithVertexArray(const float *data,
funcs.glStencilMask(0xff); // Enable stencil writes
if (dirtyStencilRegion.intersects(currentScissorBounds)) {
QVector<QRect> clearRegion = dirtyStencilRegion.intersected(currentScissorBounds).rects();
const QRegion clearRegion = dirtyStencilRegion.intersected(currentScissorBounds);
funcs.glClearStencil(0); // Clear to zero
for (int i = 0; i < clearRegion.size(); ++i) {
for (const QRect &rect : clearRegion) {
#ifndef QT_GL_NO_SCISSOR_TEST
setScissor(clearRegion.at(i));
setScissor(rect);
#endif
funcs.glClear(GL_STENCIL_BUFFER_BIT);
}

View File

@ -374,9 +374,8 @@ void QBlitterPaintEnginePrivate::fillRect(const QRectF &rect, const QColor &colo
else
pmData->blittable()->fillRect(targetRect & clipData->clipRect, color);
} else if (clipData->hasRegionClip) {
QVector<QRect> rects = clipData->clipRegion.rects();
for (int i = 0; i < rects.size(); ++i) {
QRect intersectRect = rects.at(i).intersected(targetRect.toRect());
for (const QRect &rect : clipData->clipRegion) {
QRect intersectRect = rect.intersected(targetRect.toRect());
if (!intersectRect.isEmpty()) {
unlock();
if (alpha)
@ -609,10 +608,8 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush)
}
} else if (clipData->hasRegionClip) {
QRect unclippedTargetRect(x, y, blitWidth, blitHeight);
const QVector<QRect> intersectedRects = clipData->clipRegion.intersected(unclippedTargetRect).rects();
const int intersectedSize = intersectedRects.size();
for (int i = 0; i < intersectedSize; ++i) {
const QRect &targetRect = intersectedRects.at(i);
const QRegion targetRegion = clipData->clipRegion.intersected(unclippedTargetRect);
for (const QRect &targetRect : targetRegion) {
if (!targetRect.isValid() || targetRect.isEmpty())
continue;
int tmpSrcX = srcX + (targetRect.x() - x);
@ -686,9 +683,8 @@ void QBlitterPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const Q
if (clipData->hasRectClip) {
d->clipAndDrawPixmap(clipData->clipRect, targetRect, pm, sr, canDrawOpacity);
} else if (clipData->hasRegionClip) {
QVector<QRect>rects = clipData->clipRegion.rects();
for (int i = 0; i<rects.size(); ++i)
d->clipAndDrawPixmap(rects.at(i), targetRect, pm, sr, canDrawOpacity);
for (const QRect &rect : clipData->clipRegion)
d->clipAndDrawPixmap(rect, targetRect, pm, sr, canDrawOpacity);
}
} else {
QRectF deviceRect(0, 0, paintDevice()->width(), paintDevice()->height());

View File

@ -3893,7 +3893,7 @@ void QClipData::setClipRect(const QRect &rect)
void QClipData::setClipRegion(const QRegion &region)
{
if (region.rectCount() == 1) {
setClipRect(region.rects().at(0));
setClipRect(*region.begin());
return;
}

View File

@ -2835,7 +2835,7 @@ void QPainter::setClipRegion(const QRegion &r, Qt::ClipOperation op)
QRect rect = r.boundingRect();
if (qt_show_painter_debug_output)
printf("QPainter::setClipRegion(), size=%d, [%d,%d,%d,%d]\n",
r.rects().size(), rect.x(), rect.y(), rect.width(), rect.height());
r.rectCount(), rect.x(), rect.y(), rect.width(), rect.height());
#endif
if (!d->engine) {
qWarning("QPainter::setClipRegion: Painter not active");

View File

@ -1294,10 +1294,9 @@ void QPainterPath::addRegion(const QRegion &region)
ensureData();
detach();
QVector<QRect> rects = region.rects();
d_func()->elements.reserve(rects.size() * 5);
for (int i=0; i<rects.size(); ++i)
addRect(rects.at(i));
d_func()->elements.reserve(region.rectCount() * 5);
for (const QRect &rect : region)
addRect(rect);
}

View File

@ -1078,9 +1078,8 @@ void QPdfEngine::updateState(const QPaintEngineState &state)
} else if (flags & DirtyClipRegion) {
d->clipEnabled = true;
QPainterPath path;
QVector<QRect> rects = state.clipRegion().rects();
for (int i = 0; i < rects.size(); ++i)
path.addRect(rects.at(i));
for (const QRect &rect : state.clipRegion())
path.addRect(rect);
updateClipPath(path, state.clipOperation());
flags |= DirtyClipPath;
} else if (flags & DirtyClipEnabled) {

View File

@ -250,9 +250,8 @@ static QRegion deviceRegion(const QRegion &region, QWindow *window, const QPoint
return region;
QVector<QRect> rects;
const QVector<QRect> regionRects = region.rects();
rects.reserve(regionRects.count());
for (const QRect &rect : regionRects)
rects.reserve(region.rectCount());
for (const QRect &rect : region)
rects.append(deviceRect(rect.translated(offset), window));
QRegion deviceRegion;