938 {
939
940 const bool lastLayer = !replacementNode &&
scanForLastLayer(image, removedNodes);
941
943 const bool normalCompositeMode = node->compositeOpId() ==
COMPOSITE_OVER;
944
947 return !normalCompositeMode && !hasInheritAlpha;
948 };
949
950
953 RecipeSP updateRecipe(new Recipe());
954
955 if (replacementNode) {
956 updateRecipe->nodesToAdd.push_back({replacementNode->node,
957 replacementNode->doRedoUpdates,
958 replacementNode->doUndoUpdates});
959 }
960
961 Q_FOREACH (
KisNodeSP node, removedNodes) {
962 updateRecipe->nodesToRemove.push_back({node, !isNodeWeird(node), true});
963 }
964
966
967 if (replacementNode) {
969 replacementNode->node,
970 replacementNode->parent,
971 replacementNode->putAfter,
972 false, false));
973
977 }
978
979
980 if (replacementNode->relinkClones) {
982
983 Q_FOREACH (
KisNodeSP node, removedNodes) {
985 if (originalSource) {
987 }
988 }
989
991
992 if (finalSource && !clones.isEmpty()) {
994 }
995 }
996 }
997
998 while (!removedNodes.isEmpty()) {
999 KisNodeList::iterator it = removedNodes.begin();
1000
1001 while (it != removedNodes.end()) {
1004
1006 it = removedNodes.erase(it);
1007 } else {
1008 ++it;
1009 }
1010 }
1011 }
1012
1014
1015
1016 if (lastLayer) {
1021 false, false));
1022 }
1023 }
const quint8 OPACITY_OPAQUE_U8
const QString COMPOSITE_OVER
QSharedPointer< Recipe > RecipeSP
The command for adding a layer.
The command for layer moves inside the layer stack.
const KoColorSpace * colorSpace() const
QString nextLayerName(const QString &baseName="") const
virtual void addCommandImpl(KUndo2Command *cmd)=0
bool checkIsSourceForClone(KisNodeSP src, const KisNodeList &nodes)
static bool scanForLastLayer(KisImageWSP image, KisNodeList nodesToRemove)
bool alphaChannelDisabled() const
const QList< KisCloneLayerWSP > registeredClones() const