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

#include <KisMergeLabeledLayersCommand.h>

+ Inheritance diagram for KisMergeLabeledLayersCommand:

Classes

struct  ReferenceNodeInfo
 Basic info about a node. This is used to compare and see if the node changed. More...
 

Public Types

enum  GroupSelectionPolicy { GroupSelectionPolicy_SelectAlways , GroupSelectionPolicy_SelectIfColorLabeled , GroupSelectionPolicy_NeverSelect }
 Policies to stablish how the groups should be treated. More...
 
using ReferenceNodeInfoList = QList<ReferenceNodeInfo>
 
using ReferenceNodeInfoListSP = QSharedPointer<ReferenceNodeInfoList>
 

Public Member Functions

 KisMergeLabeledLayersCommand (KisImageSP image, KisPaintDeviceSP newRefPaintDevice, QList< int > selectedLabels, GroupSelectionPolicy groupSelectionPolicy=GroupSelectionPolicy_SelectAlways)
 Construct a new KisMergeLabeledLayersCommand that does not use a cache.
 
 KisMergeLabeledLayersCommand (KisImageSP image, ReferenceNodeInfoListSP prevRefNodeInfoList, ReferenceNodeInfoListSP newRefNodeInfoList, KisPaintDeviceSP prevRefPaintDevice, KisPaintDeviceSP newRefPaintDevice, QList< int > selectedLabels, GroupSelectionPolicy groupSelectionPolicy=GroupSelectionPolicy_SelectAlways, bool forceRegeneration=false, KisNodeSP activeNode=nullptr)
 Construct a new KisMergeLabeledLayersCommand that uses a cache.
 
void redo () override
 
void undo () override
 
 ~KisMergeLabeledLayersCommand () override
 
- Public Member Functions inherited from KUndo2Command
QString actionText () const
 
virtual bool canAnnihilateWith (const KUndo2Command *other) const
 
const KUndo2Commandchild (int index) const
 
int childCount () const
 
virtual QTime endTime () const
 
KUndo2CommandExtraDataextraData () const
 
bool hasParent () const
 
virtual int id () const
 
virtual bool isMerged () const
 
 KUndo2Command (const KUndo2MagicString &text, KUndo2Command *parent=0)
 
 KUndo2Command (KUndo2Command *parent=0)
 
virtual QVector< KUndo2Command * > mergeCommandsVector () const
 
virtual bool mergeWith (const KUndo2Command *other)
 
virtual void redoMergedCommands ()
 
void setEndTime ()
 
virtual void setEndTime (const QTime &time)
 
void setExtraData (KUndo2CommandExtraData *data)
 
void setText (const KUndo2MagicString &text)
 
void setTime ()
 
virtual void setTime (const QTime &time)
 
virtual void setTimedID (int timedID)
 
KUndo2MagicString text () const
 
virtual QTime time () const
 
virtual int timedId () const
 
virtual bool timedMergeWith (KUndo2Command *other)
 
virtual void undoMergedCommands ()
 
virtual ~KUndo2Command ()
 

Static Public Member Functions

static KisPaintDeviceSP createRefPaintDevice (KisImageSP originalImage, QString name="Merge Labeled Layers Reference Paint Device")
 

Private Member Functions

QPair< KisNodeSP, QPair< bool, bool > > collectNode (KisNodeSP node) const
 
bool collectNodes (KisNodeSP node, QList< KisNodeSP > &nodeList, ReferenceNodeInfoList &nodeInfoList) const
 
bool hasToCheckForChangesInNodes () const
 
void mergeLabeledLayers ()
 

Private Attributes

KisNodeSP m_activeNode
 
KisNodeSP m_currentRoot
 
bool m_forceRegeneration
 
GroupSelectionPolicy m_groupSelectionPolicy
 
ReferenceNodeInfoListSP m_newRefNodeInfoList
 
KisPaintDeviceSP m_newRefPaintDevice
 
ReferenceNodeInfoListSP m_prevRefNodeInfoList
 
KisPaintDeviceSP m_prevRefPaintDevice
 
KisImageSP m_refImage
 
QList< int > m_selectedLabels
 

Detailed Description

Definition at line 22 of file KisMergeLabeledLayersCommand.h.

Member Typedef Documentation

◆ ReferenceNodeInfoList

◆ ReferenceNodeInfoListSP

Member Enumeration Documentation

◆ GroupSelectionPolicy

Policies to stablish how the groups should be treated.

Enumerator
GroupSelectionPolicy_SelectAlways 

Groups will be taken into account if their color label matches one of the selected color labels, even when the group has "no-color-label" as label.

GroupSelectionPolicy_SelectIfColorLabeled 

Groups will be taken into account only if they have set an explicit color label. This ignores groups that have "no-color-label" as color label and the "no-color-label" label is included in the selected labels list.

GroupSelectionPolicy_NeverSelect 

Groups will not be taken into account.

Definition at line 28 of file KisMergeLabeledLayersCommand.h.

29 {
47 };
@ GroupSelectionPolicy_SelectIfColorLabeled
Groups will be taken into account only if they have set an explicit color label. This ignores groups ...
@ GroupSelectionPolicy_NeverSelect
Groups will not be taken into account.
@ GroupSelectionPolicy_SelectAlways
Groups will be taken into account if their color label matches one of the selected color labels,...

Constructor & Destructor Documentation

◆ KisMergeLabeledLayersCommand() [1/2]

KisMergeLabeledLayersCommand::KisMergeLabeledLayersCommand ( KisImageSP image,
KisPaintDeviceSP newRefPaintDevice,
QList< int > selectedLabels,
GroupSelectionPolicy groupSelectionPolicy = GroupSelectionPolicy_SelectAlways )

Construct a new KisMergeLabeledLayersCommand that does not use a cache.

Parameters
imageThe image with the reference layers
newRefPaintDeviceThe resulting device that will contain the merged result
selectedLabelsThe color labels of the reference layers
groupSelectionPolicyHow to treat groups

Definition at line 23 of file KisMergeLabeledLayersCommand.cpp.

27 : KUndo2Command(kundo2_noi18n("MERGE_LABELED_LAYERS"))
28 , m_refImage(new KisImage(new KisSurrogateUndoStore(), image->width(), image->height(), image->colorSpace(), "Merge Labeled Layers Reference Image"))
29 , m_prevRefNodeInfoList(nullptr)
30 , m_newRefNodeInfoList(nullptr)
31 , m_prevRefPaintDevice(nullptr)
32 , m_newRefPaintDevice(newRefPaintDevice)
33 , m_currentRoot(image->root())
34 , m_selectedLabels(selectedLabels)
35 , m_groupSelectionPolicy(groupSelectionPolicy)
37 , m_activeNode(nullptr)
38{
39 KIS_ASSERT(newRefPaintDevice);
40 if (image->animationInterface()->hasAnimation()) {
43 }
44}
KUndo2Command(KUndo2Command *parent=0)
void switchCurrentTimeAsync(int frameId, SwitchTimeAsyncFlags options=STAO_NONE)
void waitForDone()
const KoColorSpace * colorSpace() const
KisImageAnimationInterface * animationInterface() const
qint32 width() const
qint32 height() const
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
KUndo2MagicString kundo2_noi18n(const QString &text)

References KisImage::animationInterface(), KisImageAnimationInterface::currentTime(), KisImageAnimationInterface::hasAnimation(), KIS_ASSERT, m_refImage, KisImageAnimationInterface::switchCurrentTimeAsync(), and KisImage::waitForDone().

◆ KisMergeLabeledLayersCommand() [2/2]

KisMergeLabeledLayersCommand::KisMergeLabeledLayersCommand ( KisImageSP image,
ReferenceNodeInfoListSP prevRefNodeInfoList,
ReferenceNodeInfoListSP newRefNodeInfoList,
KisPaintDeviceSP prevRefPaintDevice,
KisPaintDeviceSP newRefPaintDevice,
QList< int > selectedLabels,
GroupSelectionPolicy groupSelectionPolicy = GroupSelectionPolicy_SelectAlways,
bool forceRegeneration = false,
KisNodeSP activeNode = nullptr )

Construct a new KisMergeLabeledLayersCommand that uses a cache.

Parameters
imageThe image with the reference layers
prevRefNodeInfoListThe reference node info that is used to compare with the current one to see if the cache device can be used instead of generating a new one
newRefNodeInfoListThe resulting list of reference node info
prevRefPaintDeviceThe device that is used as a cache if possible
newRefPaintDeviceThe resulting device that will contain the merged result
selectedLabelsThe color labels of the reference layers
groupSelectionPolicyHow to treat groups
forceRegenerationIf true, the cache is ignored and the merged result is regenerated
activeNodeThe current node that is being edited.

Definition at line 46 of file KisMergeLabeledLayersCommand.cpp.

55 : KUndo2Command(kundo2_noi18n("MERGE_LABELED_LAYERS"))
56 , m_refImage(new KisImage(new KisSurrogateUndoStore(), image->width(), image->height(), image->colorSpace(), "Merge Labeled Layers Reference Image"))
57 , m_prevRefNodeInfoList(prevRefNodeInfoList)
58 , m_newRefNodeInfoList(newRefNodeInfoList)
59 , m_prevRefPaintDevice(prevRefPaintDevice)
60 , m_newRefPaintDevice(newRefPaintDevice)
61 , m_currentRoot(image->root())
62 , m_selectedLabels(selectedLabels)
63 , m_groupSelectionPolicy(groupSelectionPolicy)
64 , m_forceRegeneration(forceRegeneration)
65 , m_activeNode(activeNode)
66{
67 KIS_SAFE_ASSERT_RECOVER_NOOP(prevRefNodeInfoList);
68 KIS_SAFE_ASSERT_RECOVER_NOOP(newRefNodeInfoList);
69 KIS_SAFE_ASSERT_RECOVER_NOOP(prevRefPaintDevice);
70 KIS_ASSERT(newRefPaintDevice);
71 if (image->animationInterface()->hasAnimation()) {
74 }
75}
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References KisImage::animationInterface(), KisImageAnimationInterface::currentTime(), KisImageAnimationInterface::hasAnimation(), KIS_ASSERT, KIS_SAFE_ASSERT_RECOVER_NOOP, m_refImage, KisImageAnimationInterface::switchCurrentTimeAsync(), and KisImage::waitForDone().

◆ ~KisMergeLabeledLayersCommand()

KisMergeLabeledLayersCommand::~KisMergeLabeledLayersCommand ( )
override

Definition at line 77 of file KisMergeLabeledLayersCommand.cpp.

78{}

Member Function Documentation

◆ collectNode()

QPair< KisNodeSP, QPair< bool, bool > > KisMergeLabeledLayersCommand::collectNode ( KisNodeSP node) const
private

Definition at line 98 of file KisMergeLabeledLayersCommand.cpp.

99{
100 if (!node->parent()) {
101 // This is the root node. Do not use nor visit the siblings,
102 // but always visit the children
103 return {nullptr, {false, true}};
104 }
105
106 if (node->inherits("KisMask")) {
107 // This is the a mask node. Do not use, nor visit the children,
108 // but visit the siblings as they may be normal layers
109 return {nullptr, {true, false}};
110 }
111
112 if (!node->visible()) {
113 // Do not use the node and do not visit the children if the node is
114 // hidden, but do visit the next sibling
115 return {nullptr, {true, false}};
116 }
117
118 if (!m_selectedLabels.contains(node->colorLabelIndex())) {
119 // Do not use this node if it is not labeled appropriately. The children
120 // should still be visited if it is a group. The next sibling should
121 // also be visited
122 if (!(m_activeNode != nullptr && node->uuid() == m_activeNode->uuid())) {
123 // If the active node has been passed and it is being considered,
124 // it should be treated as if it is labeled to match.
125 return {nullptr, {true, node->inherits("KisGroupLayer")}};
126 }
127 }
128
129 if (node->inherits("KisCloneLayer")) {
130 // Make a copy of the clone layer as a paint layer. The source layer
131 // may not be color labeled and therefore not added to the temporary
132 // image. So this ensures that the real contents are represented
133 // in any case
134 KisCloneLayerSP cloneLayer = dynamic_cast<KisCloneLayer*>(node.data());
135 KisNodeSP transformedNode = cloneLayer->reincarnateAsPaintLayer();
136 // Use the transformed node. The next sibling is visited, but not the
137 // children, which may be some masks
138 return {transformedNode, {true, false}};
139 }
140
141 if (node->inherits("KisAdjustmentLayer")) {
142 // Similar to the clone layer case. The filter layer uses the
143 // composition of the layers below as source to apply the effect
144 // so we must use a paint layer representation of the result
145 // because the next sibling nodes may not be color labeled and
146 // therefore not added to the temporary image
147 KisPaintDeviceSP proj = new KisPaintDevice(*(node->projection()));
148 KisPaintLayerSP transformedNode = new KisPaintLayer(node->image(), node->name(), node->opacity(), proj);
149 transformedNode->setX(transformedNode->x() + node->x());
150 transformedNode->setY(transformedNode->y() + node->y());
151 transformedNode->mergeNodeProperties(node->nodeProperties());
152 // Use the transformed node. This new node already has the contents of
153 // the next layers on the same level baked, so the next sibling nodes
154 // are not visited. Do not visit the children, which may be some masks
155 return {transformedNode, {false, false}};
156 }
157
158 if (node->inherits("KisGroupLayer")) {
161 // If this group node should not be used (that is, the projection of
162 // it's contents), it's children are always visited as well as
163 // the next sibling
164 return {nullptr, {true, true}};
165 } else {
166 // If this group node should be used (that is, the projection of
167 // it's contents), just add the node, which adds
168 // also all the children. This group node already has all the
169 // children, so the child nodes are not visited.
170 // The next sibling is visited
171 return {node, {true, false}};
172 }
173 }
174
175 // By default, visit the next sibling, but not the children
176 return {node, {true, false}};
177}
QUuid uuid() const
virtual KisPaintDeviceSP projection() const =0
virtual qint32 y() const
void mergeNodeProperties(const KoProperties &properties)
const KoProperties & nodeProperties() const
KisImageWSP image
virtual qint32 x() const
int colorLabelIndex() const
QString name() const
quint8 opacity() const
virtual bool visible(bool recursive=false) const
qint32 y() const override
Definition kis_layer.cc:978
qint32 x() const override
Definition kis_layer.cc:973
void setX(qint32 x) override
Definition kis_layer.cc:983
void setY(qint32 y) override
Definition kis_layer.cc:989
KisNodeWSP parent
Definition kis_node.cpp:86

References KisBaseNode::colorLabelIndex(), KisSharedPtr< T >::data(), GroupSelectionPolicy_NeverSelect, GroupSelectionPolicy_SelectIfColorLabeled, KisBaseNode::image, m_activeNode, m_groupSelectionPolicy, m_selectedLabels, KisBaseNode::mergeNodeProperties(), KisBaseNode::name(), KisBaseNode::nodeProperties(), KisBaseNode::opacity(), KisNode::parent, KisBaseNode::projection(), KisLayer::setX(), KisLayer::setY(), KisBaseNode::uuid(), KisBaseNode::visible(), KisBaseNode::x(), KisLayer::x(), KisBaseNode::y(), and KisLayer::y().

◆ collectNodes()

bool KisMergeLabeledLayersCommand::collectNodes ( KisNodeSP node,
QList< KisNodeSP > & nodeList,
ReferenceNodeInfoList & nodeInfoList ) const
private

Definition at line 179 of file KisMergeLabeledLayersCommand.cpp.

180{
181 QPair<KisNodeSP, QPair<bool, bool>> result = collectNode(node);
182 KisNodeSP collectedNode = result.first;
183 const bool visitNextSibling = result.second.first;
184 const bool visitChildren = result.second.second;
185
186 if (collectedNode) {
187 // If the node should be selected, it is added to the list
188 nodeList << collectedNode;
189 // Store additional info to check if the new list of reference nodes
190 // is different. Use the original node to extract the info
192 const QUuid uuid = node->uuid();
193 const int sequenceNumber = node->projection()->sequenceNumber();
194 const int opacity = node->opacity();
195 nodeInfoList.append({uuid, sequenceNumber, opacity});
196 }
197 }
198
199 if (visitChildren) {
200 node = node->lastChild();
201 while (node) {
202 const bool mustVisitNextSibling = collectNodes(node, nodeList, nodeInfoList);
203 if (!mustVisitNextSibling) {
204 break;
205 }
206 node = node->prevSibling();
207 }
208 }
209
210 return visitNextSibling;
211}
bool collectNodes(KisNodeSP node, QList< KisNodeSP > &nodeList, ReferenceNodeInfoList &nodeInfoList) const
QPair< KisNodeSP, QPair< bool, bool > > collectNode(KisNodeSP node) const
int sequenceNumber() const
KisNodeSP prevSibling() const
Definition kis_node.cpp:402
KisNodeSP lastChild() const
Definition kis_node.cpp:367

References collectNode(), collectNodes(), hasToCheckForChangesInNodes(), KisNode::lastChild(), KisBaseNode::opacity(), KisNode::prevSibling(), KisBaseNode::projection(), KisPaintDevice::sequenceNumber(), and KisBaseNode::uuid().

◆ createRefPaintDevice()

KisPaintDeviceSP KisMergeLabeledLayersCommand::createRefPaintDevice ( KisImageSP originalImage,
QString name = "Merge Labeled Layers Reference Paint Device" )
static

Definition at line 93 of file KisMergeLabeledLayersCommand.cpp.

94{
95 return KisPaintDeviceSP(new KisPaintDevice(originalImage->colorSpace(), name));
96}
KisSharedPtr< KisPaintDevice > KisPaintDeviceSP
Definition kis_types.h:73

References KisImage::colorSpace().

◆ hasToCheckForChangesInNodes()

bool KisMergeLabeledLayersCommand::hasToCheckForChangesInNodes ( ) const
private

◆ mergeLabeledLayers()

void KisMergeLabeledLayersCommand::mergeLabeledLayers ( )
private

Definition at line 213 of file KisMergeLabeledLayersCommand.cpp.

214{
215 QList<KisNodeSP> currentNodesList;
216 ReferenceNodeInfoList currentNodeInfoList;
217
218 collectNodes(m_currentRoot, currentNodesList, currentNodeInfoList);
219
221 *m_newRefNodeInfoList = currentNodeInfoList;
222 }
223
224 if (hasToCheckForChangesInNodes() && !m_forceRegeneration && (currentNodeInfoList == *m_prevRefNodeInfoList)) {
227 } else {
228 QList<KisNodeSP> currentNodesListCopy;
229 for (KisNodeSP node : currentNodesList) {
230 KisNodeSP copy = node->clone();
231
232 if (copy.isNull()) {
233 continue;
234 }
235
236 if (copy->inherits("KisLayer")) {
237 KisLayer* layerCopy = dynamic_cast<KisLayer*>(copy.data());
238 KIS_ASSERT(layerCopy);
239 layerCopy->setChannelFlags(QBitArray());
240 }
241
242 copy->setCompositeOpId(COMPOSITE_OVER);
243
244 bool success = m_refImage->addNode(copy, m_refImage->root(), 0);
245
246 if (!success) {
247 continue;
248 }
249
250 currentNodesListCopy << copy;
251 }
252
253 currentNodesListCopy = KisLayerUtils::sortAndFilterAnyMergeableNodesSafe(currentNodesListCopy, m_refImage);
254
258
259 if (m_refImage->root()->childCount() == 0) {
260 return;
261 }
262
266
268 }
269
270 // release resources: they are still owned by the caller
271 // (or by some other object the caller passed them to)
275 m_prevRefNodeInfoList.clear();
276 m_newRefNodeInfoList.clear();
277
278 // KisImage should be deleted only in the GUI thread (it has timers)
281}
KisDeleteLaterWrapper< T > * makeKisDeleteLaterWrapper(T value)
const QString COMPOSITE_OVER
KisPaintDeviceSP projection() const
void initialRefreshGraph()
QRect bounds() const override
QList< ReferenceNodeInfo > ReferenceNodeInfoList
void makeCloneFromRough(KisPaintDeviceSP src, const QRect &minimalRect)
QRect exactBounds() const
QRect extent() const
void prepareClone(KisPaintDeviceSP src)
static void copyAreaOptimized(const QPoint &dstPt, KisPaintDeviceSP src, KisPaintDeviceSP dst, const QRect &originalSrcRect)
KisNodeList sortAndFilterAnyMergeableNodesSafe(const KisNodeList &nodes, KisImageSP image)
void refreshHiddenAreaAsync(KisImageSP image, KisNodeSP rootNode, const QRect &preparedArea)
void mergeMultipleNodes(KisImageSP image, KisNodeList mergedNodes, KisNodeSP putAfter, MergeFlags flags)
virtual void setChannelFlags(const QBitArray &channelFlags)
Definition kis_layer.cc:342
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
virtual KisNodeSP clone() const =0
quint32 childCount() const
Definition kis_node.cpp:414

References KisNodeFacade::addNode(), KisImage::bounds(), KisNode::childCount(), KisSharedPtr< T >::clear(), KisNode::clone(), collectNodes(), COMPOSITE_OVER, KisPainter::copyAreaOptimized(), KisPaintDevice::exactBounds(), KisPaintDevice::extent(), hasToCheckForChangesInNodes(), KisImage::initialRefreshGraph(), KIS_ASSERT, m_currentRoot, m_forceRegeneration, m_newRefNodeInfoList, m_newRefPaintDevice, m_prevRefNodeInfoList, m_prevRefPaintDevice, m_refImage, KisPaintDevice::makeCloneFromRough(), makeKisDeleteLaterWrapper(), KisLayerUtils::mergeMultipleNodes(), KisPaintDevice::prepareClone(), KisImage::projection(), KisLayerUtils::refreshHiddenAreaAsync(), KisNodeFacade::root, KisLayer::setChannelFlags(), KisLayerUtils::SkipMergingFrames, KisLayerUtils::sortAndFilterAnyMergeableNodesSafe(), and KisImage::waitForDone().

◆ redo()

void KisMergeLabeledLayersCommand::redo ( )
overridevirtual

Applies a change to the document. This function must be implemented in the derived class. Calling KUndo2QStack::push(), KUndo2QStack::undo() or KUndo2QStack::redo() from this function leads to undefined behavior.

The default implementation calls redo() on all child commands.

See also
undo()

Reimplemented from KUndo2Command.

Definition at line 85 of file KisMergeLabeledLayersCommand.cpp.

References m_refImage, mergeLabeledLayers(), and KUndo2Command::redo().

◆ undo()

void KisMergeLabeledLayersCommand::undo ( )
overridevirtual

Reverts a change to the document. After undo() is called, the state of the document should be the same as before redo() was called. This function must be implemented in the derived class. Calling KUndo2QStack::push(), KUndo2QStack::undo() or KUndo2QStack::redo() from this function leads to undefined behavior.

The default implementation calls undo() on all child commands in reverse order.

See also
redo()

Reimplemented from KUndo2Command.

Definition at line 80 of file KisMergeLabeledLayersCommand.cpp.

81{
83}
virtual void undo()

References KUndo2Command::undo().

Member Data Documentation

◆ m_activeNode

KisNodeSP KisMergeLabeledLayersCommand::m_activeNode
private

Definition at line 132 of file KisMergeLabeledLayersCommand.h.

◆ m_currentRoot

KisNodeSP KisMergeLabeledLayersCommand::m_currentRoot
private

Definition at line 128 of file KisMergeLabeledLayersCommand.h.

◆ m_forceRegeneration

bool KisMergeLabeledLayersCommand::m_forceRegeneration
private

Definition at line 131 of file KisMergeLabeledLayersCommand.h.

◆ m_groupSelectionPolicy

GroupSelectionPolicy KisMergeLabeledLayersCommand::m_groupSelectionPolicy
private

Definition at line 130 of file KisMergeLabeledLayersCommand.h.

◆ m_newRefNodeInfoList

ReferenceNodeInfoListSP KisMergeLabeledLayersCommand::m_newRefNodeInfoList
private

Definition at line 125 of file KisMergeLabeledLayersCommand.h.

◆ m_newRefPaintDevice

KisPaintDeviceSP KisMergeLabeledLayersCommand::m_newRefPaintDevice
private

Definition at line 127 of file KisMergeLabeledLayersCommand.h.

◆ m_prevRefNodeInfoList

ReferenceNodeInfoListSP KisMergeLabeledLayersCommand::m_prevRefNodeInfoList
private

Definition at line 124 of file KisMergeLabeledLayersCommand.h.

◆ m_prevRefPaintDevice

KisPaintDeviceSP KisMergeLabeledLayersCommand::m_prevRefPaintDevice
private

Definition at line 126 of file KisMergeLabeledLayersCommand.h.

◆ m_refImage

KisImageSP KisMergeLabeledLayersCommand::m_refImage
private

Definition at line 123 of file KisMergeLabeledLayersCommand.h.

◆ m_selectedLabels

QList<int> KisMergeLabeledLayersCommand::m_selectedLabels
private

Definition at line 129 of file KisMergeLabeledLayersCommand.h.


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