7#ifndef __KIS_LAYER_UTILS_H
8#define __KIS_LAYER_UTILS_H
14#include "kritaimage_export.h"
119 void partA()
override;
120 void partB()
override;
141 void partB()
override;
156 void redo()
override;
173 bool doRedoUpdates =
true;
174 bool doUndoUpdates =
true;
176 bool relinkClones =
false;
181 std::optional<ReplacementNode> replacementNode);
191 void populateChildCommands()
override;
207 void partB()
override;
213 template <
typename T>
216 bool valueDiffers =
false;
217 bool initialized =
false;
218 T currentValue = T();
221 currentValue = checkerFunc(node);
223 }
else if (currentValue != checkerFunc(node)) {
234 template <
typename NodePo
inter,
typename Functor>
239 node = node->firstChild();
242 node = node->nextSibling();
269 return bool(
dynamic_cast<T*
>(node.
data()));
Q_DECLARE_FLAGS(KisUpdaterContextSnapshotEx, KisUpdaterContextSnapshotExTag)
KisNodeList m_selectedAfter
KisNodeList m_selectedBefore
virtual void addCommandImpl(KUndo2Command *cmd)=0
Q_DECLARE_OPERATORS_FOR_FLAGS(KisLayerUtils::MergeFlags)
void flattenImage(KisImageSP image, KisNodeSP activeNode, MergeFlags flags)
bool checkIsCloneOf(KisNodeSP node, const KisNodeList &nodes)
QSet< int > fetchLayerFrames(KisNodeSP node)
QSet< int > fetchUniqueFrameTimes(KisNodeSP node, QSet< int > selectedTimes, bool filterActiveFrameID)
bool hasDelayedNodeWithUpdates(KisNodeSP root)
void updateFrameJobs(FrameJobs *jobs, KisNodeSP node)
QSet< int > filterTimesForOnlyRasterKeyedTimes(KisNodeSP node, const QSet< int > ×)
void updateFrameJobsRecursive(FrameJobs *jobs, KisNodeSP rootNode)
KisNodeSP recursiveFindNode(KisNodeSP node, std::function< bool(KisNodeSP)> func)
void splitAlphaToMask(KisImageSP image, KisNodeSP node, const QString &maskName)
void changeImageDefaultProjectionColor(KisImageSP image, const KoColor &color)
KisTimeSpan fetchLayerActiveRasterFrameSpan(KisNodeSP node, const int time)
KisNodeList sortAndFilterMergeableInternalNodes(KisNodeList nodes, bool allowMasks)
QMap< int, QSet< KisNodeSP > > FrameJobs
bool checkNodesDiffer(KisNodeList nodes, std::function< T(KisNodeSP)> checkerFunc)
void sortMergeableNodes(KisNodeSP root, KisNodeList &inputNodes, KisNodeList &outputNodes)
QRect recursiveTightNodeVisibleBounds(KisNodeSP rootNode)
KisImageSP findImageByHierarchy(KisNodeSP node)
KisNodeSP findNodeByName(KisNodeSP root, const QString &name)
void flattenLayer(KisImageSP image, KisLayerSP layer, MergeFlags flags)
KisNodeSP findRoot(KisNodeSP node)
QList< KisNodeSP > findNodesByName(KisNodeSP root, const QString &name, bool recursive, bool partialMatch)
KisNodeList findNodesWithProps(KisNodeSP root, const KoProperties &props, bool excludeRoot)
void addCopyOfNameTag(KisNodeSP node)
KisNodeSP findNodeByUuid(KisNodeSP root, const QUuid &uuid)
T * findNodeByType(KisNodeSP root)
void newLayerFromVisible(KisImageSP image, KisNodeSP putAfter, MergeFlags flags)
void filterUnlockedNodes(KisNodeList &nodes)
bool canChangeImageProfileInvisibly(KisImageSP image)
void recursiveApplyNodes(NodePointer node, Functor func)
int fetchLayerActiveRasterFrameTime(KisNodeSP node)
KisNodeList sortAndFilterAnyMergeableNodesSafe(const KisNodeList &nodes, KisImageSP image)
void filterMergeableNodes(KisNodeList &nodes, bool allowMasks)
void forceAllHiddenOriginalsUpdate(KisNodeSP root)
QSet< int > fetchLayerIdenticalRasterFrameTimes(KisNodeSP node, const int &frameTime)
bool checkIsChildOf(KisNodeSP node, const KisNodeList &parents)
void refreshHiddenAreaAsync(KisImageSP image, KisNodeSP rootNode, const QRect &preparedArea)
void mergeMultipleLayers(KisImageSP image, KisNodeList mergedNodes, KisNodeSP putAfter, MergeFlags flags)
void mergeDown(KisImageSP image, KisLayerSP layer, const KisMetaData::MergeStrategy *strategy, MergeFlags flags)
bool tryMergeSelectionMasks(KisImageSP image, KisNodeList mergedNodes, KisNodeSP putAfter)
std::future< KisNodeSP > convertToPaintLayer(KisImageSP image, KisNodeSP src)
void forceAllDelayedNodesUpdate(KisNodeSP root)
QSet< int > fetchLayerFramesRecursive(KisNodeSP rootNode)
KisNodeList sortMergeableInternalNodes(KisNodeList nodes)
void mergeMultipleNodes(KisImageSP image, KisNodeList mergedNodes, KisNodeSP putAfter, MergeFlags flags)
The AggregateCommand struct is a command with delayed initialization. On first redo() populateChildCo...
QVector< KisSelectionMaskSP > selectionMasks
KisNodeList m_selectedNodes
The SwitchFrameCommand struct Switches to frame with undo/redo support.
QSharedPointer< SharedStorage > SharedStorageSP
SharedStorageSP m_storage