58 static const qint32 LEGACY_VERSION = 1;
59 static const qint32 CURRENT_VERSION = 2;
73 friend class KisTiledIterator;
75 friend class KisTiledRandomAccessor;
77 friend class KisStressJob;
80 void setDefaultPixel(
const quint8 *defPixel);
82 return m_defaultPixel;
95 *tile = getTile(col, row, writable);
98 *oldTile = m_mementoManager->getCommittedTile(col, row, unused);
110 m_extentManager.notifyTileAdded(col, row);
116 return m_hashTable->getReadOnlyTileLazy(col, row, unused);
121 return m_hashTable->getReadOnlyTileLazy(col, row, existingTile);
125 KisTileSP tile = m_mementoManager->getCommittedTile(col, row, existingTile);
126 return tile ? tile : getReadOnlyTileLazy(col, row, existingTile);
131 return getOldTile(col, row, unused);
135 QWriteLocker locker(&m_lock);
145 QWriteLocker locker(&m_lock);
147 KisMementoSP memento = m_mementoManager->currentMemento();
152 m_mementoManager->commit();
158 QWriteLocker locker(&m_lock);
159 m_mementoManager->rollback(m_hashTable, memento);
161 if(memcmp(m_defaultPixel, defaultPixel, m_pixelSize)) {
162 setDefaultPixelImpl(defaultPixel);
169 QWriteLocker locker(&m_lock);
170 m_mementoManager->rollforward(m_hashTable, memento);
172 if(memcmp(m_defaultPixel, defaultPixel, m_pixelSize)) {
173 setDefaultPixelImpl(defaultPixel);
178 return m_mementoManager->hasCurrentMemento();
189 QWriteLocker locker(&m_lock);
190 m_mementoManager->purgeHistory(oldestMemento);
193 static void releaseInternalPools();
200 bool read(QIODevice *stream);
202 void purge(
const QRect& area);
212 void extent(qint32 &x, qint32 &y, qint32 &w, qint32 &h)
const;
213 void setExtent(qint32 x, qint32 y, qint32 w, qint32 h);
214 QRect extent()
const;
215 void setExtent(QRect newRect);
219 void clear(QRect clearRect, quint8 clearValue);
220 void clear(QRect clearRect,
const quint8 *clearPixel);
221 void clear(qint32 x, qint32 y, qint32 w, qint32 h, quint8 clearValue);
222 void clear(qint32 x, qint32 y, qint32 w, qint32 h,
const quint8 *clearPixel);
255 void setPixel(qint32 x, qint32 y,
const quint8 * data);
271 void readBytes(quint8 * bytes,
274 qint32 dataRowStride = -1)
const;
290 void writeBytes(
const quint8 * bytes,
293 qint32 dataRowStride = -1);
320 qint32 numContiguousColumns(qint32 x, qint32 minY, qint32 maxY)
const;
326 qint32 numContiguousRows(qint32 y, qint32 minX, qint32 maxX)
const;
332 qint32 rowStride(qint32 x, qint32 y)
const;
358 void setDefaultPixelImpl(
const quint8 *defPixel);
361 bool processTilesHeader(QIODevice *stream, quint32 &numTiles);
370 return x >= 0 ? x / y : -(((-x - 1) / y) + 1);
373 void recalculateExtent();
375 quint8* duplicatePixel(qint32 num,
const quint8 *pixel);
377 template<
bool useOldSrcData>
379 template<
bool useOldSrcData>
382 void writeBytesBody(
const quint8 *data,
384 qint32 width, qint32 height,
385 qint32 dataRowStride = -1);
386 void readBytesBody(quint8 *data,
388 qint32 width, qint32 height,
389 qint32 dataRowStride = -1)
const;
391 template <
bool allChannelsPresent>
394 qint32 x, qint32 y, qint32 w, qint32 h);
397 qint32 w, qint32 h)
const;