7#ifndef __KIS_LAYER_UTILS_H
8#define __KIS_LAYER_UTILS_H
14#include "kritaimage_export.h"
125 void partA()
override;
126 void partB()
override;
147 void partB()
override;
162 void redo()
override;
179 bool doRedoUpdates =
true;
180 bool doUndoUpdates =
true;
182 bool relinkClones =
false;
187 std::optional<ReplacementNode> replacementNode);
197 void populateChildCommands()
override;
213 void partB()
override;
219 template <
typename T>
222 bool valueDiffers =
false;
223 bool initialized =
false;
224 T currentValue = T();
227 currentValue = checkerFunc(node);
229 }
else if (currentValue != checkerFunc(node)) {
240 template <
typename NodePo
inter,
typename Functor>
245 node = node->firstChild();
248 node = node->nextSibling();
277 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)
KisNodeSP findIsolationRoot(KisNodeSP node)
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 updateFrameJobsNonRecursive(FrameJobs *jobs, KisNodeSP rootNode, bool frameTimesRecursive)
updateFrameJobsNonRecursive updates the frame jobs non-recursively, that is, on the rootNode only.
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