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

#include <kis_multiple_projection.h>

Classes

struct  Private
 

Public Member Functions

void apply (KisPaintDeviceSP dstDevice, const QRect &rect, KisLayerStyleFilterEnvironment *env)
 
void clear (const QRect &rc)
 
void freeAllProjections ()
 
void freeProjection (const QString &id)
 
KisPaintDeviceList getLodCapableDevices () const
 
KisPaintDeviceSP getProjection (const QString &id, const QString &compositeOpId, quint8 opacity, const QBitArray &channelFlags, KisPaintDeviceSP prototype)
 
bool isEmpty () const
 
 KisMultipleProjection ()
 
 KisMultipleProjection (const KisMultipleProjection &rhs)
 
 ~KisMultipleProjection ()
 

Static Public Member Functions

static QString defaultProjectionId ()
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 16 of file kis_multiple_projection.h.

Constructor & Destructor Documentation

◆ KisMultipleProjection() [1/2]

KisMultipleProjection::KisMultipleProjection ( )

Definition at line 36 of file kis_multiple_projection.cpp.

37 : m_d(new Private)
38{
39}
const QScopedPointer< Private > m_d

◆ KisMultipleProjection() [2/2]

KisMultipleProjection::KisMultipleProjection ( const KisMultipleProjection & rhs)

Definition at line 41 of file kis_multiple_projection.cpp.

42 : m_d(new Private)
43{
44 QReadLocker readLocker(&rhs.m_d->lock);
45
46 auto it = rhs.m_d->planes.constBegin();
47 for (; it != rhs.m_d->planes.constEnd(); ++it) {
49 proj.device = new KisPaintDevice(*it->device);
50 proj.compositeOpId = it->compositeOpId;
51 proj.opacity = it->opacity;
52 proj.channelFlags = it->channelFlags;
53
54 m_d->planes.insert(it.key(), proj);
55 }
56}

References ProjectionStruct::channelFlags, ProjectionStruct::compositeOpId, ProjectionStruct::device, m_d, and ProjectionStruct::opacity.

◆ ~KisMultipleProjection()

KisMultipleProjection::~KisMultipleProjection ( )

Definition at line 58 of file kis_multiple_projection.cpp.

59{
60}

Member Function Documentation

◆ apply()

void KisMultipleProjection::apply ( KisPaintDeviceSP dstDevice,
const QRect & rect,
KisLayerStyleFilterEnvironment * env )

Definition at line 137 of file kis_multiple_projection.cpp.

138{
139 QReadLocker readLocker(&m_d->lock);
140
141 PlanesMap::const_iterator it = m_d->planes.constBegin();
142 PlanesMap::const_iterator end = m_d->planes.constEnd();
143
144 for (; it != end; ++it) {
145 KisPainter gc(dstDevice);
146 gc.setCompositeOpId(it->compositeOpId);
147 env->setupFinalPainter(&gc, it->opacity, it->channelFlags);
148 gc.bitBlt(rect.topLeft(), it->device, rect);
149 }
150}
void setupFinalPainter(KisPainter *gc, quint8 opacity, const QBitArray &channelFlags) const

References KisPainter::bitBlt(), KisPainter::channelFlags(), m_d, KisPainter::setCompositeOpId(), and KisLayerStyleFilterEnvironment::setupFinalPainter().

◆ clear()

void KisMultipleProjection::clear ( const QRect & rc)

Definition at line 125 of file kis_multiple_projection.cpp.

126{
127 QReadLocker readLocker(&m_d->lock);
128
129 PlanesMap::const_iterator it = m_d->planes.constBegin();
130 PlanesMap::const_iterator end = m_d->planes.constEnd();
131
132 for (; it != end; ++it) {
133 const_cast<KisPaintDevice*>(it->device.data())->clear(rc);
134 }
135}

References clear(), and m_d.

◆ defaultProjectionId()

QString KisMultipleProjection::defaultProjectionId ( )
static

Definition at line 62 of file kis_multiple_projection.cpp.

63{
64 return "00_default";
65}

◆ freeAllProjections()

void KisMultipleProjection::freeAllProjections ( )

Definition at line 119 of file kis_multiple_projection.cpp.

120{
121 QWriteLocker writeLocker(&m_d->lock);
122 m_d->planes.clear();
123}

References m_d.

◆ freeProjection()

void KisMultipleProjection::freeProjection ( const QString & id)

Definition at line 113 of file kis_multiple_projection.cpp.

114{
115 QWriteLocker writeLocker(&m_d->lock);
116 m_d->planes.remove(id);
117}

References m_d.

◆ getLodCapableDevices()

KisPaintDeviceList KisMultipleProjection::getLodCapableDevices ( ) const

Definition at line 152 of file kis_multiple_projection.cpp.

153{
154 QReadLocker readLocker(&m_d->lock);
155
156 PlanesMap::const_iterator it = m_d->planes.constBegin();
157 PlanesMap::const_iterator end = m_d->planes.constEnd();
158
160 for (; it != end; ++it) {
161 list << it->device;
162 }
163
164 return list;
165}

References m_d.

◆ getProjection()

KisPaintDeviceSP KisMultipleProjection::getProjection ( const QString & id,
const QString & compositeOpId,
quint8 opacity,
const QBitArray & channelFlags,
KisPaintDeviceSP prototype )

Definition at line 67 of file kis_multiple_projection.cpp.

72{
73 QReadLocker readLocker(&m_d->lock);
74
75 PlanesMap::const_iterator constIt = m_d->planes.constFind(id);
76
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()) {
82
83 readLocker.unlock();
84
85 {
86 QWriteLocker writeLocker(&m_d->lock);
87
88 PlanesMap::iterator writeIt = m_d->planes.find(id);
89 if (writeIt == m_d->planes.end()) {
90 ProjectionStruct plane;
91 plane.device = new KisPaintDevice(prototype->colorSpace());
92 plane.device->prepareClone(prototype);
93 plane.compositeOpId = compositeOpId;
94 plane.opacity = opacity;
95 plane.channelFlags = channelFlags;
96 writeIt = m_d->planes.insert(id, plane);
97 } else if (writeIt->compositeOpId != compositeOpId ||
98 *writeIt->device->colorSpace() != *prototype->colorSpace()) {
99
100 writeIt->device->prepareClone(prototype);
101 writeIt->compositeOpId = compositeOpId;
102 writeIt->opacity = opacity;
103 writeIt->channelFlags = channelFlags;
104 }
105
106 return writeIt->device;
107 }
108 }
109
110 return constIt->device;
111}
const KoColorSpace * colorSpace() const
void prepareClone(KisPaintDeviceSP src)

References ProjectionStruct::channelFlags, KisPaintDevice::colorSpace(), ProjectionStruct::compositeOpId, ProjectionStruct::device, m_d, ProjectionStruct::opacity, and KisPaintDevice::prepareClone().

◆ isEmpty()

bool KisMultipleProjection::isEmpty ( ) const

Definition at line 167 of file kis_multiple_projection.cpp.

168{
169 return m_d->planes.isEmpty();
170}

References m_d.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisMultipleProjection::m_d
private

Definition at line 39 of file kis_multiple_projection.h.


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