10#include <QReadWriteLock>
44 QReadLocker readLocker(&rhs.
m_d->lock);
46 auto it = rhs.
m_d->planes.constBegin();
47 for (; it != rhs.
m_d->planes.constEnd(); ++it) {
54 m_d->planes.insert(it.key(), proj);
68 const QString &compositeOpId,
70 const QBitArray &channelFlags,
73 QReadLocker readLocker(&
m_d->lock);
75 PlanesMap::const_iterator constIt =
m_d->planes.constFind(
id);
77 if (constIt ==
m_d->planes.constEnd() ||
78 constIt->compositeOpId != compositeOpId ||
79 constIt->opacity != opacity ||
80 constIt->channelFlags != channelFlags ||
81 *constIt->device->colorSpace() != *prototype->
colorSpace()) {
86 QWriteLocker writeLocker(&
m_d->lock);
88 PlanesMap::iterator writeIt =
m_d->planes.find(
id);
89 if (writeIt ==
m_d->planes.end()) {
96 writeIt =
m_d->planes.insert(
id, plane);
97 }
else if (writeIt->compositeOpId != compositeOpId ||
98 *writeIt->device->colorSpace() != *prototype->
colorSpace()) {
100 writeIt->device->prepareClone(prototype);
101 writeIt->compositeOpId = compositeOpId;
102 writeIt->opacity = opacity;
103 writeIt->channelFlags = channelFlags;
106 return writeIt->device;
110 return constIt->device;
115 QWriteLocker writeLocker(&
m_d->lock);
116 m_d->planes.remove(
id);
121 QWriteLocker writeLocker(&
m_d->lock);
127 QReadLocker readLocker(&
m_d->lock);
129 PlanesMap::const_iterator it =
m_d->planes.constBegin();
130 PlanesMap::const_iterator end =
m_d->planes.constEnd();
132 for (; it != end; ++it) {
139 QReadLocker readLocker(&
m_d->lock);
141 PlanesMap::const_iterator it =
m_d->planes.constBegin();
142 PlanesMap::const_iterator end =
m_d->planes.constEnd();
144 for (; it != end; ++it) {
154 QReadLocker readLocker(&
m_d->lock);
156 PlanesMap::const_iterator it =
m_d->planes.constBegin();
157 PlanesMap::const_iterator end =
m_d->planes.constEnd();
160 for (; it != end; ++it) {
169 return m_d->planes.isEmpty();
const quint8 OPACITY_OPAQUE_U8
KisPaintDeviceSP getProjection(const QString &id, const QString &compositeOpId, quint8 opacity, const QBitArray &channelFlags, KisPaintDeviceSP prototype)
void clear(const QRect &rc)
void freeProjection(const QString &id)
void freeAllProjections()
KisPaintDeviceList getLodCapableDevices() const
const QScopedPointer< Private > m_d
static QString defaultProjectionId()
void apply(KisPaintDeviceSP dstDevice, const QRect &rect, KisLayerStyleFilterEnvironment *env)
const KoColorSpace * colorSpace() const
void prepareClone(KisPaintDeviceSP src)
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
void setCompositeOpId(const KoCompositeOp *op)
QMap< QString, ProjectionStruct > PlanesMap
void setupFinalPainter(KisPainter *gc, quint8 opacity, const QBitArray &channelFlags) const