10#include <QReadWriteLock>
34 bool finalMergeInProgress =
true;
55 d->temporaryTarget = t;
65 d->compositeOpacity = o;
80 d->lock.lockForRead();
85 d->lock.lockForWrite();
86 d->finalMergeInProgress =
true;
92 d->finalMergeInProgress =
false;
97 return d->temporaryTarget;
112 return d->compositeOp;
122 return d->temporaryTarget;
146 executor.
addRunnableJobs(implicitCastList<KisRunnableStrokeJobDataBase*>(jobs));
163 [sharedWriteLock] () {
164 sharedWriteLock->relock();
168 timedID,
true, sharedWriteLock,
176 QScopedPointer<KisTransaction> transaction;
182 [sharedState, sharedWriteLock, dst, parentCommand, transactionText, timedID] () {
183 Q_UNUSED(sharedWriteLock);
189 sharedState->transaction.reset(
190 new KisTransaction(transactionText, dst, parentCommand, timedID));
196 Q_FOREACH (
const QRect &rc, src->region().rects()) {
198 [
this, rc, src, dst, sharedState, sharedWriteLock] () {
199 Q_UNUSED(sharedWriteLock);
214 [
this, sharedState, sharedWriteLock, cleanResources] () {
215 Q_UNUSED(sharedWriteLock);
217 if (cleanResources) {
221 if (sharedState->transaction) {
224 (
void) sharedState->transaction->endAndTake();
232 painter->
bitBlt(rc.topLeft(), src, rc);
237 d->temporaryTarget = 0;
241 d->channelFlags.clear();
252 m_lock->lockTemporaryTargetForWrite();
const qreal OPACITY_OPAQUE_F
const QString COMPOSITE_OVER
void addRunnableJobs(const QVector< KisRunnableStrokeJobDataBase * > &list) override
void setSelection(KisSelectionSP selection)
void setOpacityF(qreal opacity)
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
void setChannelFlags(QBitArray channelFlags)
void setCompositeOpId(const KoCompositeOp *op)
typedef void(QOPENGLF_APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer)
QSharedPointer< T > toQShared(T *ptr)
void addJobConcurrent(QVector< Job * > &jobs, Func func)
void addJobSequential(QVector< Job * > &jobs, Func func)
void addJobBarrier(QVector< Job * > &jobs, Func func)
virtual KisPaintDeviceSP paintDevice() const =0
FinalMergeSuspender(KisIndirectPaintingSupport *indirect)
const KisIndirectPaintingSupport * m_lock
virtual void writeMergeData(KisPainter *painter, KisPaintDeviceSP src, const QRect &rc)
void setTemporaryChannelFlags(const QBitArray &channelFlags)
void lockTemporaryTarget() const
virtual void mergeToLayerThreaded(KisNodeSP layer, KUndo2Command *parentCommand, const KUndo2MagicString &transactionText, int timedID, QVector< KisRunnableStrokeJobData * > *jobs)
KisSelectionSP temporarySelection() const
KisIndirectPaintingSupport()
virtual void setCurrentColor(const KoColor &color)
void setupTemporaryPainter(KisPainter *painter) const
KisPaintDeviceSP temporaryTarget
void lockTemporaryTargetForWrite() const
void setTemporaryTarget(KisPaintDeviceSP t)
void setTemporaryOpacity(qreal o)
void mergeToLayerImpl(KisPaintDeviceSP dst, KUndo2Command *parentCommand, const KUndo2MagicString &transactionText, int timedID, bool cleanResources, WriteLockerSP sharedWriteLock, QVector< KisRunnableStrokeJobData * > *jobs)
QString temporaryCompositeOp() const
void unlockTemporaryTarget() const
bool hasTemporaryTarget() const
FinalMergeSuspenderSP trySuspendFinalMerge()
virtual ~KisIndirectPaintingSupport()
void mergeToLayer(KisNodeSP layer, KUndo2Command *parentCommand, const KUndo2MagicString &transactionText, int timedID)
virtual bool supportsNonIndirectPainting() const
void setTemporarySelection(KisSelectionSP selection)
void setTemporaryCompositeOp(const QString &id)