Krita Source Code Documentation
Loading...
Searching...
No Matches
KisPaintDevice::Private::KisPaintDeviceWrappedStrategy Class Reference

#include <kis_paint_device_strategies.h>

+ Inheritance diagram for KisPaintDevice::Private::KisPaintDeviceWrappedStrategy:

Public Member Functions

void clear (const QRect &rect) override
 
KisHLineConstIteratorSP createHLineConstIteratorNG (KisDataManager *dataManager, qint32 x, qint32 y, qint32 w, qint32 offsetX, qint32 offsetY) const override
 
KisHLineIteratorSP createHLineIteratorNG (KisDataManager *dataManager, qint32 x, qint32 y, qint32 w, qint32 offsetX, qint32 offsetY) override
 
KisRandomAccessorSP createRandomAccessorNG () override
 
KisRandomConstAccessorSP createRandomConstAccessorNG () const override
 
KisVLineConstIteratorSP createVLineConstIteratorNG (qint32 x, qint32 y, qint32 h) const override
 
KisVLineIteratorSP createVLineIteratorNG (qint32 x, qint32 y, qint32 h) override
 
void crop (const QRect &rect) override
 
QRect extent () const override
 
void fastBitBltImpl (KisDataManagerSP srcDataManager, const QRect &rect) override
 
void fastBitBltOldData (KisPaintDeviceSP src, const QRect &rect) override
 
void fastBitBltRoughImpl (KisDataManagerSP srcDataManager, const QRect &rect) override
 
void fastBitBltRoughOldData (KisPaintDeviceSP src, const QRect &rect) override
 
void fill (const QRect &rect, const quint8 *fillPixel) override
 
 KisPaintDeviceWrappedStrategy (const QRect &wrapRect, KisPaintDevice *device, KisPaintDevice::Private *d)
 
void move (const QPoint &pt) override
 
void readBytes (quint8 *data, const QRect &rect) const override
 
KisRegion region () const override
 
void setWrapRect (const QRect &rc)
 
const QRect wrapRect () const
 
void writeBytes (const quint8 *data, const QRect &rect) override
 
- Public Member Functions inherited from KisPaintDevice::Private::KisPaintDeviceStrategy
virtual void fastBitBlt (KisPaintDeviceSP src, const QRect &rect)
 
virtual void fastBitBltRough (KisDataManagerSP srcDataManager, const QRect &rect)
 
virtual void fastBitBltRough (KisPaintDeviceSP src, const QRect &rect)
 
 KisPaintDeviceStrategy (KisPaintDevice *device, KisPaintDevice::Private *d)
 
virtual QVector< quint8 * > readPlanarBytes (qint32 x, qint32 y, qint32 w, qint32 h) const
 
virtual void writePlanarBytes (QVector< quint8 * > planes, qint32 x, qint32 y, qint32 w, qint32 h)
 
virtual ~KisPaintDeviceStrategy ()
 

Private Attributes

QRect m_wrapRect
 

Additional Inherited Members

- Protected Member Functions inherited from KisPaintDevice::Private::KisPaintDeviceStrategy
virtual void readBytesImpl (quint8 *data, const QRect &rect, int dataRowStride) const
 
virtual void writeBytesImpl (const quint8 *data, const QRect &rect, int dataRowStride)
 
- Protected Attributes inherited from KisPaintDevice::Private::KisPaintDeviceStrategy
KisPaintDevice::Private *const m_d
 
KisPaintDevicem_device
 

Detailed Description

Definition at line 188 of file kis_paint_device_strategies.h.

Constructor & Destructor Documentation

◆ KisPaintDeviceWrappedStrategy()

KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::KisPaintDeviceWrappedStrategy ( const QRect & wrapRect,
KisPaintDevice * device,
KisPaintDevice::Private * d )
inline

Member Function Documentation

◆ clear()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::clear ( const QRect & rect)
inlineoverridevirtual

◆ createHLineConstIteratorNG()

KisHLineConstIteratorSP KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::createHLineConstIteratorNG ( KisDataManager * dataManager,
qint32 x,
qint32 y,
qint32 w,
qint32 offsetX,
qint32 offsetY ) const
inlineoverridevirtual

Reimplemented from KisPaintDevice::Private::KisPaintDeviceStrategy.

Definition at line 304 of file kis_paint_device_strategies.h.

304 {
305 KisWrappedRect splitRect(QRect(x, y, w, m_wrapRect.height()), m_wrapRect, m_device->defaultBounds()->wrapAroundModeAxis());
306 if (!splitRect.isSplit()) {
308 }
309 return new KisWrappedHLineIterator(dataManager, splitRect, offsetX, offsetY, false, m_d->cacheInvalidator());
310 }
virtual KisHLineConstIteratorSP createHLineConstIteratorNG(KisDataManager *dataManager, qint32 x, qint32 y, qint32 w, qint32 offsetX, qint32 offsetY) const
KisWrappedLineIteratorBase< WrappedHLineIteratorStrategy, KisHLineIteratorNG > KisWrappedHLineIterator
KisDataManagerSP dataManager() const
KisIteratorCompleteListener * cacheInvalidator()

References KisPaintDevice::Private::cacheInvalidator(), KisPaintDevice::Private::KisPaintDeviceStrategy::createHLineConstIteratorNG(), KisPaintDevice::Private::dataManager(), KisPaintDevice::defaultBounds(), KisWrappedRect::isSplit(), KisPaintDevice::Private::KisPaintDeviceStrategy::m_d, KisPaintDevice::Private::KisPaintDeviceStrategy::m_device, m_wrapRect, KisDefaultBoundsBase::wrapAroundModeAxis(), KisPaintDevice::Private::x(), and KisPaintDevice::Private::y().

◆ createHLineIteratorNG()

KisHLineIteratorSP KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::createHLineIteratorNG ( KisDataManager * dataManager,
qint32 x,
qint32 y,
qint32 w,
qint32 offsetX,
qint32 offsetY )
inlineoverridevirtual

◆ createRandomAccessorNG()

◆ createRandomConstAccessorNG()

◆ createVLineConstIteratorNG()

KisVLineConstIteratorSP KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::createVLineConstIteratorNG ( qint32 x,
qint32 y,
qint32 h ) const
inlineoverridevirtual

◆ createVLineIteratorNG()

◆ crop()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::crop ( const QRect & rect)
inlineoverridevirtual

◆ extent()

◆ fastBitBltImpl()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::fastBitBltImpl ( KisDataManagerSP srcDataManager,
const QRect & rect )
inlineoverridevirtual

◆ fastBitBltOldData()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::fastBitBltOldData ( KisPaintDeviceSP src,
const QRect & rect )
inlineoverridevirtual

◆ fastBitBltRoughImpl()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::fastBitBltRoughImpl ( KisDataManagerSP srcDataManager,
const QRect & rect )
inlineoverridevirtual

Reimplemented from KisPaintDevice::Private::KisPaintDeviceStrategy.

Definition at line 357 of file kis_paint_device_strategies.h.

358 {
359 // no rough version in wrapped mode
360 fastBitBltImpl(srcDataManager, rect);
361 }
void fastBitBltImpl(KisDataManagerSP srcDataManager, const QRect &rect) override

References fastBitBltImpl().

◆ fastBitBltRoughOldData()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::fastBitBltRoughOldData ( KisPaintDeviceSP src,
const QRect & rect )
inlineoverridevirtual

Reimplemented from KisPaintDevice::Private::KisPaintDeviceStrategy.

Definition at line 363 of file kis_paint_device_strategies.h.

363 {
364 // no rough version in wrapped mode
366 }
void fastBitBltOldData(KisPaintDeviceSP src, const QRect &rect) override

References fastBitBltOldData().

◆ fill()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::fill ( const QRect & rect,
const quint8 * fillPixel )
inlineoverridevirtual

◆ move()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::move ( const QPoint & pt)
inlineoverridevirtual

Reimplemented from KisPaintDevice::Private::KisPaintDeviceStrategy.

Definition at line 207 of file kis_paint_device_strategies.h.

207 {
208 QPoint offset (pt.x() - m_device->x(), pt.y() - m_device->y());
209
210 QRect exactBoundsBeforeMove = m_device->exactBounds();
212
213 QRegion borderRegion(exactBoundsBeforeMove.translated(offset.x(), offset.y()));
214 borderRegion -= m_wrapRect;
215
216 const int pixelSize = m_device->pixelSize();
217
218 auto rectIter = borderRegion.begin();
219 while (rectIter != borderRegion.end()) {
220 QRect rc = *rectIter;
223
224 int rows = 1;
225 int columns = 1;
226
227 for (int y = rc.y(); y <= rc.bottom(); y += rows) {
228 int rows = qMin(srcIt->numContiguousRows(y), dstIt->numContiguousRows(y));
229 rows = qMin(rows, rc.bottom() - y + 1);
230
231 for (int x = rc.x(); x <= rc.right(); x += columns) {
232 int columns = qMin(srcIt->numContiguousColumns(x), dstIt->numContiguousColumns(x));
233 columns = qMin(columns, rc.right() - x + 1);
234
235 srcIt->moveTo(x, y);
236 dstIt->moveTo(x, y);
237
238 int srcRowStride = srcIt->rowStride(x, y);
239 int dstRowStride = dstIt->rowStride(x, y);
240 const quint8 *srcPtr = srcIt->rawDataConst();
241 quint8 *dstPtr = dstIt->rawData();
242
243 for (int i = 0; i < rows; i++) {
244 memcpy(dstPtr, srcPtr, pixelSize * columns);
245 srcPtr += srcRowStride;
246 dstPtr += dstRowStride;
247 }
248 }
249 }
250 rectIter++;
251 }
252 }
virtual quint8 * rawData()=0
virtual const quint8 * rawDataConst() const =0
virtual KisRandomConstAccessorSP createRandomConstAccessorNG() const
quint32 pixelSize() const
QRect exactBounds() const
QPoint offset() const
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

References createRandomAccessorNG(), KisPaintDevice::Private::KisPaintDeviceStrategy::createRandomConstAccessorNG(), KisPaintDevice::exactBounds(), KisPaintDevice::Private::KisPaintDeviceStrategy::m_device, m_wrapRect, KisPaintDevice::Private::KisPaintDeviceStrategy::move(), KisRandomConstAccessorNG::moveTo(), KisRandomConstAccessorNG::numContiguousColumns(), KisRandomConstAccessorNG::numContiguousRows(), KisPaintDevice::offset(), KisPaintDevice::pixelSize(), KisBaseAccessor::rawData(), KisBaseConstAccessor::rawDataConst(), KisRandomConstAccessorNG::rowStride(), KisPaintDevice::Private::x(), KisPaintDevice::x(), KisPaintDevice::Private::y(), and KisPaintDevice::y().

◆ readBytes()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::readBytes ( quint8 * data,
const QRect & rect ) const
inlineoverridevirtual

Reimplemented from KisPaintDevice::Private::KisPaintDeviceStrategy.

Definition at line 368 of file kis_paint_device_strategies.h.

368 {
370
371 if (!splitRect.isSplit()) {
373 } else {
374 const int pixelSize = m_device->pixelSize();
375
376 int leftWidth = splitRect[KisWrappedRect::TOPLEFT].width();
377 int rightWidth = splitRect[KisWrappedRect::TOPRIGHT].width();
378
379 int totalHeight = rect.height();
380 int totalWidth = rect.width();
381 int dataRowStride = totalWidth * pixelSize;
382
383 int bufOffset = 0;
384 int row = 0;
385 while (row < totalHeight) {
386 int leftIndex = KisWrappedRect::TOPLEFT + bufOffset;
387 int rightIndex = KisWrappedRect::TOPRIGHT + bufOffset;
388
389 QPoint leftRectOrigin = splitRect[leftIndex].topLeft();
390 QPoint rightRectOrigin = splitRect[rightIndex].topLeft();
391
392 int height = qMin(splitRect[leftIndex].height(), totalHeight - row);
393
394 int col = 0;
395 while (col < totalWidth) {
396 int width;
397 quint8 *dataPtr;
398
399 width = qMin(leftWidth, totalWidth - col);
400 dataPtr = data + pixelSize * (col + row * totalWidth);
401 readBytesImpl(dataPtr, QRect(leftRectOrigin, QSize(width, height)), dataRowStride);
402 col += width;
403
404 if (col >= totalWidth) break;
405
406 width = qMin(rightWidth, totalWidth - col);
407 dataPtr = data + pixelSize * (col + row * totalWidth);
408 readBytesImpl(dataPtr, QRect(rightRectOrigin, QSize(width, height)), dataRowStride);
409 col += width;
410 }
411
412 row += height;
413 bufOffset = (bufOffset + 2) % 4;
414 }
415 }
416 }
virtual void readBytesImpl(quint8 *data, const QRect &rect, int dataRowStride) const
virtual void readBytes(quint8 *data, const QRect &rect) const

References KisPaintDevice::defaultBounds(), KisWrappedRect::isSplit(), KisPaintDevice::Private::KisPaintDeviceStrategy::m_device, m_wrapRect, KisPaintDevice::pixelSize(), KisPaintDevice::Private::KisPaintDeviceStrategy::readBytes(), KisPaintDevice::Private::KisPaintDeviceStrategy::readBytesImpl(), KisWrappedRect::TOPLEFT, KisWrappedRect::topLeft(), KisWrappedRect::TOPRIGHT, and KisDefaultBoundsBase::wrapAroundModeAxis().

◆ region()

KisRegion KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::region ( ) const
inlineoverridevirtual

Reimplemented from KisPaintDevice::Private::KisPaintDeviceStrategy.

Definition at line 259 of file kis_paint_device_strategies.h.

259 {
261 if (wrapAxis != WRAPAROUND_BOTH) {
263 QVector<QRect> rects;
264 Q_FOREACH (const QRect &rc, region.rects()) {
265 const QRect clippedRect = KisWrappedRect::clipToWrapRect(rc, m_wrapRect, wrapAxis);
266 if (!clippedRect.isEmpty()) {
267 rects.append(clippedRect);
268 }
269 }
270 region = KisRegion(rects);
271 return region;
272 }
273 else {
275 }
276 }
WrapAroundAxis
@ WRAPAROUND_BOTH
QVector< QRect > rects() const

References KisWrappedRect::clipToWrapRect(), KisPaintDevice::defaultBounds(), KisPaintDevice::Private::KisPaintDeviceStrategy::m_device, m_wrapRect, KisRegion::rects(), KisPaintDevice::Private::KisPaintDeviceStrategy::region(), region(), WRAPAROUND_BOTH, and KisDefaultBoundsBase::wrapAroundModeAxis().

◆ setWrapRect()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::setWrapRect ( const QRect & rc)
inline

Definition at line 203 of file kis_paint_device_strategies.h.

203 {
204 m_wrapRect = rc;
205 }

References m_wrapRect.

◆ wrapRect()

const QRect KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::wrapRect ( ) const
inline

Definition at line 199 of file kis_paint_device_strategies.h.

199 {
200 return m_wrapRect;
201 }

References m_wrapRect.

◆ writeBytes()

void KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::writeBytes ( const quint8 * data,
const QRect & rect )
inlineoverridevirtual

Reimplemented from KisPaintDevice::Private::KisPaintDeviceStrategy.

Definition at line 418 of file kis_paint_device_strategies.h.

418 {
420
421 if (!splitRect.isSplit()) {
423 } else {
424 const int pixelSize = m_device->pixelSize();
425
426 int totalWidth = rect.width();
427 int dataRowStride = totalWidth * pixelSize;
428
429 QRect rc;
430 QPoint origin;
431 const quint8 *dataPtr;
432
433 origin.rx() = 0;
434 origin.ry() = 0;
435 rc = splitRect.topLeft();
436 dataPtr = data + pixelSize * (origin.x() + totalWidth * origin.y());
437 writeBytesImpl(dataPtr, rc, dataRowStride);
438
439 origin.rx() = splitRect.topLeft().width();
440 origin.ry() = 0;
441 rc = splitRect.topRight();
442 dataPtr = data + pixelSize * (origin.x() + totalWidth * origin.y());
443 writeBytesImpl(dataPtr, rc, dataRowStride);
444
445 origin.rx() = 0;
446 origin.ry() = splitRect.topLeft().height();
447 rc = splitRect.bottomLeft();
448 dataPtr = data + pixelSize * (origin.x() + totalWidth * origin.y());
449 writeBytesImpl(dataPtr, rc, dataRowStride);
450
451 origin.rx() = splitRect.topLeft().width();
452 origin.ry() = splitRect.topLeft().height();
453 rc = splitRect.bottomRight();
454 dataPtr = data + pixelSize * (origin.x() + totalWidth * origin.y());
455 writeBytesImpl(dataPtr, rc, dataRowStride);
456 }
457 }
virtual void writeBytes(const quint8 *data, const QRect &rect)
virtual void writeBytesImpl(const quint8 *data, const QRect &rect, int dataRowStride)

References KisWrappedRect::bottomLeft(), KisWrappedRect::bottomRight(), KisPaintDevice::defaultBounds(), KisWrappedRect::isSplit(), KisPaintDevice::Private::KisPaintDeviceStrategy::m_device, m_wrapRect, KisPaintDevice::pixelSize(), KisWrappedRect::topLeft(), KisWrappedRect::topRight(), KisDefaultBoundsBase::wrapAroundModeAxis(), KisPaintDevice::Private::KisPaintDeviceStrategy::writeBytes(), and KisPaintDevice::Private::KisPaintDeviceStrategy::writeBytesImpl().

Member Data Documentation

◆ m_wrapRect

QRect KisPaintDevice::Private::KisPaintDeviceWrappedStrategy::m_wrapRect
private

Definition at line 460 of file kis_paint_device_strategies.h.


The documentation for this class was generated from the following file: