8#ifndef __KIS_PAINT_DEVICE_DATA_H
9#define __KIS_PAINT_DEVICE_DATA_H
24 const int xOffset = 0;
25 const int yOffset = 0;
30 const int xOffset = 0;
31 const int yOffset = 0;
156 if (!parentCommand) {
163 KoColorConversionTransformation::ConversionFlags conversionFlags,
167 using InternalSequentialConstIterator =
169 using InternalSequentialIterator =
178 const int dstPixelSize = dstColorSpace->
pixelSize();
179 QScopedArrayPointer<quint8> dstDefaultPixel(
new quint8[dstPixelSize]);
180 memset(dstDefaultPixel.data(), 0, dstPixelSize);
190 int nConseqPixels = srcIt.nConseqPixels();
195 while(srcIt.nextPixels(nConseqPixels) &&
196 dstIt.nextPixels(nConseqPixels)) {
198 nConseqPixels = srcIt.nConseqPixels();
200 const quint8 *srcData = srcIt.rawDataConst();
201 quint8 *dstData = dstIt.rawData();
206 renderingIntent, conversionFlags);
221 if (!parentCommand) {
239 void redo()
override {
240 m_data->m_dataManager = m_newDm;
241 m_data->cache()->invalidate();
244 void undo()
override {
245 m_data->m_dataManager = m_oldDm;
246 m_data->cache()->invalidate();
256 [
this, copyContent] () {
261 return new SwitchDataManager(
this, this->
dataManager(), newDm);
347 void redo()
override {
348 std::swap(m_data, m_q->m_interstrokeData);
351 void undo()
override {
352 std::swap(m_data, m_q->m_interstrokeData);
360 return new SwapInterstrokeDataCommand(
this,
value);
float value(const T *src, size_t ch)
void clear(qint32 x, qint32 y, qint32 w, qint32 h, quint8 def)
void setDefaultPixel(const quint8 *defPixel)
quint32 pixelSize() const
const quint8 * defaultPixel() const
ChangeColorSpaceCommand(KisPaintDeviceData *data, KisDataManagerSP oldDm, KisDataManagerSP newDm, const KoColorSpace *oldCs, const KoColorSpace *newCs, KUndo2Command *parent)
const KoColorSpace * m_oldCs
const KoColorSpace * m_newCs
KisPaintDeviceData * m_data
ChangeProfileCommand(KisPaintDeviceData *data, const KoColorSpace *oldCs, const KoColorSpace *newCs, KUndo2Command *parent)
KisInterstrokeDataSP m_interstrokeData
ALWAYS_INLINE KisInterstrokeDataSP interstrokeData() const
ALWAYS_INLINE qint32 levelOfDetail() const
ALWAYS_INLINE qint32 y() const
ALWAYS_INLINE KisDataManagerSP dataManager() const
KisDataManagerSP m_dataManager
void assignColorSpace(const KoColorSpace *dstColorSpace, KUndo2Command *parentCommand)
void convertDataColorSpace(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags, KUndo2Command *parentCommand, KoUpdater *updater=nullptr)
ALWAYS_INLINE KisIteratorCompleteListener * cacheInvalidator()
ALWAYS_INLINE qint32 x() const
ALWAYS_INLINE KisPaintDeviceCache * cache()
void prepareClone(const KisPaintDeviceData *srcData, bool copyContent=false)
KisPaintDeviceData(KisPaintDevice *paintDevice)
KisPaintDeviceData(KisPaintDevice *paintDevice, const KisPaintDeviceData *rhs, bool cloneContent)
ALWAYS_INLINE void setX(qint32 value)
ALWAYS_INLINE void setY(qint32 value)
void init(const KoColorSpace *cs, KisDataManagerSP dataManager)
CacheInvalidator m_cacheInvalidator
KisPaintDeviceCache m_cache
ALWAYS_INLINE const KoColorSpace * colorSpace() const
const KoColorSpace * m_colorSpace
void reincarnateWithDetachedHistory(bool copyContent, KUndo2Command *parentCommand)
ALWAYS_INLINE KUndo2Command * createChangeInterstrokeDataCommand(KisInterstrokeDataSP value)
ALWAYS_INLINE void setLevelOfDetail(qint32 value)
QRect boundingRect() const
virtual quint32 pixelSize() const =0
virtual bool convertPixelsTo(const quint8 *src, quint8 *dst, const KoColorSpace *dstColorSpace, quint32 numPixels, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
virtual const KoColorProfile * profile() const =0
#define KIS_ASSERT_RECOVER_RETURN(cond)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
KisDataManager * m_dataManager
KisIteratorCompleteListener * m_completionListener
KisHLineConstIteratorSP createConstIterator(const QRect &rect)
KisHLineIteratorSP createIterator(const QRect &rect)
DirectDataAccessPolicy(KisDataManager *dataManager, KisIteratorCompleteListener *completionListener)
The LambdaCommand struct is a shorthand for creation of AggregateCommand commands using C++ lambda fe...
The KisIteratorCompleteListener struct is a special interface for notifying the paint device that an ...
CacheInvalidator(KisPaintDeviceData *_q)
void notifyWritableIteratorCompleted() override