From e02749fe7ec4e1a869f2d19c9efacbd88eebcf42 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Sun, 1 Jan 2012 20:08:47 +0100 Subject: blitter: Move the definition out of the class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cosmetic change to remove four spaces of indention from some of the deeply nested methods. Change-Id: I67fdd0ab722b7c7c67c4da7a0a0bd86459751700 Reviewed-by: Jørgen Lind --- src/gui/painting/qpaintengine_blitter.cpp | 131 ++++++++++++++++-------------- 1 file changed, 72 insertions(+), 59 deletions(-) (limited to 'src/gui/painting') diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index a798efb63d..e0049075dc 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -194,65 +194,10 @@ public: raster.reset(new QRasterPaintEngine(p->buffer())); } - inline void lock() { - if (!pmData->blittable()->isLocked()) - raster->d_func()->rasterBuffer->prepare(pmData->buffer()); - } - - inline void unlock() { - pmData->blittable()->unlock(); - } - - void fillRect(const QRectF &rect, const QColor &color) { - Q_Q(QBlitterPaintEngine); - pmData->unmarkRasterOverlay(rect); - QRectF targetRect = rect; - if (hasXForm) - targetRect = q->state()->matrix.mapRect(rect); - const QClipData *clipData = q->clipData();; - if (clipData) { - if (clipData->hasRectClip) { - unlock(); - pmData->blittable()->fillRect(targetRect & clipData->clipRect, color); - } else if (clipData->hasRegionClip) { - QVector rects = clipData->clipRegion.rects(); - for (int i = 0; i < rects.size(); ++i) { - QRect intersectRect = rects.at(i).intersected(targetRect.toRect()); - if (!intersectRect.isEmpty()) { - unlock(); - pmData->blittable()->fillRect(intersectRect, color); - } - } - } - } else { - if (targetRect.x() >= 0 && targetRect.y() >= 0 - && targetRect.width() <= raster->paintDevice()->width() - && targetRect.height() <= raster->paintDevice()->height()) { - unlock(); - pmData->blittable()->fillRect(targetRect, color); - } else { - QRectF deviceRect(0, 0, raster->paintDevice()->width(), raster->paintDevice()->height()); - unlock(); - pmData->blittable()->fillRect(deviceRect & targetRect, color); - } - } - } - - void clipAndDrawPixmap(const QRectF &clip, const QRectF &target, const QPixmap &pm, const QRectF &sr) { - QRectF intersectedRect = clip.intersected(target); - if (intersectedRect.isEmpty()) - return; - QRectF source = sr; - if (intersectedRect.size() != target.size()) { - qreal deltaTop = target.top() - intersectedRect.top(); - qreal deltaLeft = target.left() - intersectedRect.left(); - qreal deltaBottom = target.bottom() - intersectedRect.bottom(); - qreal deltaRight = target.right() - intersectedRect.right(); - source.adjust(-deltaLeft, -deltaTop, -deltaRight, -deltaBottom); - } - pmData->unmarkRasterOverlay(intersectedRect); - pmData->blittable()->drawPixmap(intersectedRect, pm, source); - } + void lock(); + void unlock(); + void fillRect(const QRectF &rect, const QColor &color); + void clipAndDrawPixmap(const QRectF &clip, const QRectF &target, const QPixmap &pm, const QRectF &sr); void updateClip() { Q_Q(QBlitterPaintEngine); @@ -272,6 +217,74 @@ public: uint hasXForm; }; + +inline void QBlitterPaintEnginePrivate::lock() +{ + if (!pmData->blittable()->isLocked()) + raster->d_func()->rasterBuffer->prepare(pmData->buffer()); +} + +inline void QBlitterPaintEnginePrivate::unlock() +{ + pmData->blittable()->unlock(); +} + +void QBlitterPaintEnginePrivate::fillRect(const QRectF &rect, const QColor &color) +{ + Q_Q(QBlitterPaintEngine); + pmData->unmarkRasterOverlay(rect); + QRectF targetRect = rect; + if (hasXForm) + targetRect = q->state()->matrix.mapRect(rect); + const QClipData *clipData = q->clipData();; + if (clipData) { + if (clipData->hasRectClip) { + unlock(); + pmData->blittable()->fillRect(targetRect & clipData->clipRect, color); + } else if (clipData->hasRegionClip) { + QVector rects = clipData->clipRegion.rects(); + for (int i = 0; i < rects.size(); ++i) { + QRect intersectRect = rects.at(i).intersected(targetRect.toRect()); + if (!intersectRect.isEmpty()) { + unlock(); + pmData->blittable()->fillRect(intersectRect, color); + } + } + } + } else { + if (targetRect.x() >= 0 && targetRect.y() >= 0 + && targetRect.width() <= raster->paintDevice()->width() + && targetRect.height() <= raster->paintDevice()->height()) { + unlock(); + pmData->blittable()->fillRect(targetRect, color); + } else { + QRectF deviceRect(0, 0, raster->paintDevice()->width(), raster->paintDevice()->height()); + unlock(); + pmData->blittable()->fillRect(deviceRect & targetRect, color); + } + } +} + +void QBlitterPaintEnginePrivate::clipAndDrawPixmap(const QRectF &clip, + const QRectF &target, + const QPixmap &pm, + const QRectF &sr) +{ + QRectF intersectedRect = clip.intersected(target); + if (intersectedRect.isEmpty()) + return; + QRectF source = sr; + if (intersectedRect.size() != target.size()) { + qreal deltaTop = target.top() - intersectedRect.top(); + qreal deltaLeft = target.left() - intersectedRect.left(); + qreal deltaBottom = target.bottom() - intersectedRect.bottom(); + qreal deltaRight = target.right() - intersectedRect.right(); + source.adjust(-deltaLeft, -deltaTop, -deltaRight, -deltaBottom); + } + pmData->unmarkRasterOverlay(intersectedRect); + pmData->blittable()->drawPixmap(intersectedRect, pm, source); +} + QBlitterPaintEngine::QBlitterPaintEngine(QBlittablePlatformPixmap *p) : QPaintEngineEx(*(new QBlitterPaintEnginePrivate(p))) {} -- cgit v1.2.3