Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMagneticLazyTiles Class Reference

#include <KisMagneticWorker.h>

Public Member Functions

KisPaintDeviceSP device ()
 
void filter (qreal radius, QRect &rect)
 
 KisMagneticLazyTiles (KisPaintDeviceSP dev)
 
QVector< QRect > tiles ()
 

Private Attributes

KisPaintDeviceSP m_dev
 
QVector< qreal > m_radiusRecord
 
QVector< QRect > m_tiles
 
QSize m_tileSize
 
int m_tilesPerRow
 

Detailed Description

Definition at line 15 of file KisMagneticWorker.h.

Constructor & Destructor Documentation

◆ KisMagneticLazyTiles()

KisMagneticLazyTiles::KisMagneticLazyTiles ( KisPaintDeviceSP dev)

Definition at line 138 of file KisMagneticWorker.cc.

139{
141 QSize s = dev->defaultBounds()->bounds().size();
143 m_tilesPerRow = (int) std::ceil((double) s.width() / (double) m_tileSize.width());
144 int tilesPerColumn = (int) std::ceil((double) s.height() / (double) m_tileSize.height());
146
147 for (int i = 0; i < tilesPerColumn; i++) {
148 for (int j = 0; j < m_tilesPerRow; j++) {
149 int width = std::min(s.width() - j * m_tileSize.width(), m_tileSize.width());
150 int height = std::min(s.height() - i * m_tileSize.height(), m_tileSize.height());
151 QRect temp(j *m_tileSize.width(), i *m_tileSize.height(), width, height);
152 m_tiles.push_back(temp);
153 }
154 }
156}
virtual QRect bounds() const =0
QVector< QRect > m_tiles
KisPaintDeviceSP m_dev
QVector< qreal > m_radiusRecord
void setDefaultBounds(KisDefaultBoundsBaseSP bounds)
KisDefaultBoundsBaseSP defaultBounds() const
static KisPaintDeviceSP convertToAlphaAsGray(KisPaintDeviceSP src)
QSize optimalPatchSize()

References KisDefaultBoundsBase::bounds(), KisPainter::convertToAlphaAsGray(), KisPaintDevice::defaultBounds(), m_dev, m_radiusRecord, m_tiles, m_tileSize, m_tilesPerRow, KritaUtils::optimalPatchSize(), and KisPaintDevice::setDefaultBounds().

Member Function Documentation

◆ device()

KisPaintDeviceSP KisMagneticLazyTiles::device ( )
inline

Definition at line 26 of file KisMagneticWorker.h.

26{ return m_dev; }

References m_dev.

◆ filter()

void KisMagneticLazyTiles::filter ( qreal radius,
QRect & rect )

Definition at line 158 of file KisMagneticWorker.cc.

159{
160 auto divide = [](QPoint p, QSize s){
161 return QPoint(p.x() / s.width(), p.y() / s.height());
162 };
163
164 QPoint firstTile = divide(rect.topLeft(), m_tileSize);
165 QPoint lastTile = divide(rect.bottomRight(), m_tileSize);
166 for (int i = firstTile.y(); i <= lastTile.y(); i++) {
167 for (int j = firstTile.x(); j <= lastTile.x(); j++) {
168 int currentTile = i * m_tilesPerRow + j;
169 if (currentTile < m_tiles.size()
170 && currentTile < m_radiusRecord.size()
171 && radius != m_radiusRecord[currentTile]) {
172 QRect bounds = m_tiles[currentTile];
173 KisGaussianKernel::applyTightLoG(m_dev, bounds, radius, -1.0, QBitArray(), nullptr);
175 m_radiusRecord[currentTile] = radius;
176 }
177 }
178 }
179}
const Params2D p
static void applyTightLoG(KisPaintDeviceSP device, const QRect &rect, qreal radius, qreal coeff, const QBitArray &channelFlags, KoUpdater *progressUpdater)
#define bounds(x, a, b)
void normalizeAlpha8Device(KisPaintDeviceSP dev, const QRect &rect)

References KisGaussianKernel::applyTightLoG(), bounds, m_dev, m_radiusRecord, m_tiles, m_tileSize, m_tilesPerRow, KisLazyFillTools::normalizeAlpha8Device(), and p.

◆ tiles()

QVector< QRect > KisMagneticLazyTiles::tiles ( )
inline

Definition at line 27 of file KisMagneticWorker.h.

27{ return m_tiles; }

References m_tiles.

Member Data Documentation

◆ m_dev

KisPaintDeviceSP KisMagneticLazyTiles::m_dev
private

Definition at line 19 of file KisMagneticWorker.h.

◆ m_radiusRecord

QVector<qreal> KisMagneticLazyTiles::m_radiusRecord
private

Definition at line 18 of file KisMagneticWorker.h.

◆ m_tiles

QVector<QRect> KisMagneticLazyTiles::m_tiles
private

Definition at line 17 of file KisMagneticWorker.h.

◆ m_tileSize

QSize KisMagneticLazyTiles::m_tileSize
private

Definition at line 20 of file KisMagneticWorker.h.

◆ m_tilesPerRow

int KisMagneticLazyTiles::m_tilesPerRow
private

Definition at line 21 of file KisMagneticWorker.h.


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