15void KisPainter::Private::applyDevice(
const QRect &applyRect,
22 const QRect rc = applyRect & dabRect;
24 const int srcPixelSize = srcColorSpace->
pixelSize();
25 const int dabRowStride = srcPixelSize * dabRect.width();
29 qint32 rowsRemaining = rc.height();
31 while (rowsRemaining > 0) {
35 qint32 rows = qMin(rowsRemaining, numContiguousDstRows);
37 qint32 columnsRemaining = rc.width();
39 while (columnsRemaining > 0) {
42 qint32 columns = qMin(numContiguousDstColumns, columnsRemaining);
44 qint32 dstRowStride = dstIt->
rowStride(dstX, dstY);
51 localParamInfo.
rows = rows;
52 localParamInfo.
cols = columns;
55 const int dabX = dstX - dabRect.x();
56 const int dabY = dstY - dabRect.y();
62 colorSpace->bitBlt(srcColorSpace, localParamInfo, compositeOp(srcColorSpace), renderingIntent, conversionFlags);
65 columnsRemaining -= columns;
69 rowsRemaining -= rows;
74void KisPainter::Private::applyDeviceWithSelection(
const QRect &applyRect,
82 const QRect rc = applyRect & dabRect;
84 const int srcPixelSize = srcColorSpace->
pixelSize();
85 const int dabRowStride = srcPixelSize * dabRect.width();
89 qint32 rowsRemaining = rc.height();
91 while (rowsRemaining > 0) {
96 qint32 rows = qMin(rowsRemaining, qMin(numContiguousDstRows, numContiguousMaskRows));
98 qint32 columnsRemaining = rc.width();
100 while (columnsRemaining > 0) {
104 qint32 columns = qMin(columnsRemaining, qMin(numContiguousDstColumns, numContiguousMaskColumns));
106 qint32 dstRowStride = dstIt->
rowStride(dstX, dstY);
107 qint32 maskRowStride = maskIt->
rowStride(dstX, dstY);
108 dstIt->
moveTo(dstX, dstY);
109 maskIt->
moveTo(dstX, dstY);
115 localParamInfo.
rows = rows;
116 localParamInfo.
cols = columns;
119 const int dabX = dstX - dabRect.x();
120 const int dabY = dstY - dabRect.y();
126 colorSpace->bitBlt(srcColorSpace, localParamInfo, compositeOp(srcColorSpace), renderingIntent, conversionFlags);
129 columnsRemaining -= columns;
133 rowsRemaining -= rows;
142 QRect rc = applyRect;
145 rc &=
d->selection->selectedRect();
148 QRect totalDevicesRect;
156 if (!srcColorSpace) {
163 rc &= totalDevicesRect;
165 if (devices.isEmpty() || rc.isEmpty())
return;
173 d->applyDeviceWithSelection(rc, dab, dstIt, maskIt, srcColorSpace, localParamInfo);
177 d->applyDevice(rc, dab, dstIt, srcColorSpace, localParamInfo);
187 const QRect copyRect = dev->
bounds() & rc;
188 if (copyRect.isEmpty())
continue;
190 bltFixed(copyRect.topLeft(), dev, copyRect);
virtual quint8 * rawData()=0
virtual const quint8 * rawDataConst() const =0
const quint8 * constData() const
const KoColorSpace * colorSpace() const
void bltFixed(qint32 dstX, qint32 dstY, const KisFixedPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
virtual qint32 rowStride(qint32 x, qint32 y) const =0
virtual qint32 numContiguousRows(qint32 y) const =0
virtual void moveTo(qint32 x, qint32 y)=0
virtual qint32 numContiguousColumns(qint32 x) const =0
virtual quint32 pixelSize() const =0
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
KisFixedPaintDeviceSP device
const quint8 * srcRowStart
void setOpacityAndAverage(float _opacity, float _averageOpacity)
const quint8 * maskRowStart