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

#include <kis_gap_map.h>

Public Member Functions

 KisTileOptimizedAccessor (KisPaintDeviceSP &paintDevice)
 
ALWAYS_INLINE quint8 * rawData (int x, int y)
 
quint8 * tileRawData (int tileX, int tileY)
 

Private Attributes

KisRandomAccessorSP m_accessor
 
const quint32 m_pixelSize
 
QPoint m_tile
 
quint8 * m_tileRawData
 

Static Private Attributes

static constexpr int TileSize = 64
 

Detailed Description

Definition at line 22 of file kis_gap_map.h.

Constructor & Destructor Documentation

◆ KisTileOptimizedAccessor()

KisTileOptimizedAccessor::KisTileOptimizedAccessor ( KisPaintDeviceSP & paintDevice)
inline

Definition at line 25 of file kis_gap_map.h.

26 : m_pixelSize(paintDevice->pixelSize())
27 , m_accessor(paintDevice->createRandomAccessorNG())
28 , m_tile(-1, -1)
29 , m_tileRawData(nullptr)
30 {
31 // We start in an invalid state ((-1,-1) tile), so that the data pointer is fetched
32 // after the paint device has been set up (e.g. default color and fill).
33 }
quint32 pixelSize() const
KisRandomAccessorSP createRandomAccessorNG()
const quint32 m_pixelSize
Definition kis_gap_map.h:68
KisRandomAccessorSP m_accessor
Definition kis_gap_map.h:70

Member Function Documentation

◆ rawData()

ALWAYS_INLINE quint8 * KisTileOptimizedAccessor::rawData ( int x,
int y )
inline

Definition at line 53 of file kis_gap_map.h.

54 {
55 const int tileX = x / TileSize;
56 const int tileY = y / TileSize;
57 const int localX = x & (TileSize - 1);
58 const int localY = y & (TileSize - 1);
59
60 m_tileRawData = tileRawData(tileX, tileY);
61
62 return m_tileRawData + m_pixelSize * (localX + TileSize * localY);
63 }
quint8 * tileRawData(int tileX, int tileY)
Definition kis_gap_map.h:35
static constexpr int TileSize
Definition kis_gap_map.h:66

References m_pixelSize, m_tileRawData, tileRawData(), and TileSize.

◆ tileRawData()

quint8 * KisTileOptimizedAccessor::tileRawData ( int tileX,
int tileY )
inline

Definition at line 35 of file kis_gap_map.h.

36 {
37 if ((m_tile.x() != tileX) || (m_tile.y() != tileY)) {
38 m_accessor->moveTo(tileX * TileSize, tileY * TileSize);
40
41 m_tile.setX(tileX);
42 m_tile.setY(tileY);
43
44#if KIS_GAP_MAP_DEBUG_LOGGING_AND_ASSERTS
47#endif
48 }
49
50 return m_tileRawData;
51 }
virtual quint8 * rawData()=0
virtual qint32 numContiguousRows(qint32 y) const =0
virtual void moveTo(qint32 x, qint32 y)=0
virtual qint32 numContiguousColumns(qint32 x) const =0
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References KIS_ASSERT, m_accessor, m_tile, m_tileRawData, KisRandomConstAccessorNG::moveTo(), KisRandomConstAccessorNG::numContiguousColumns(), KisRandomConstAccessorNG::numContiguousRows(), KisBaseAccessor::rawData(), and TileSize.

Member Data Documentation

◆ m_accessor

KisRandomAccessorSP KisTileOptimizedAccessor::m_accessor
private

Definition at line 70 of file kis_gap_map.h.

◆ m_pixelSize

const quint32 KisTileOptimizedAccessor::m_pixelSize
private

Definition at line 68 of file kis_gap_map.h.

◆ m_tile

QPoint KisTileOptimizedAccessor::m_tile
private

Definition at line 71 of file kis_gap_map.h.

◆ m_tileRawData

quint8* KisTileOptimizedAccessor::m_tileRawData
private

Definition at line 72 of file kis_gap_map.h.

◆ TileSize

constexpr int KisTileOptimizedAccessor::TileSize = 64
staticconstexprprivate

Definition at line 66 of file kis_gap_map.h.


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