|
Krita Source Code Documentation
|
Namespaces | |
| namespace | Private |
Typedefs | |
| typedef QSharedPointer< ConvertToPaintLayerInfo > | ConvertToPaintLayerInfoSP |
| typedef QMap< int, QSet< KisNodeSP > > | FrameJobs |
| typedef QSharedPointer< MergeDownInfoBase > | MergeDownInfoBaseSP |
| typedef QSharedPointer< MergeDownInfo > | MergeDownInfoSP |
| typedef QSharedPointer< MergeMultipleInfo > | MergeMultipleInfoSP |
| typedef QSharedPointer< SplitAlphaToMaskInfo > | SplitAlphaToMaskInfoSP |
Enumerations | |
| enum | MergeFlag { None , SkipMergingFrames = 0x1 } |
Definition at line 365 of file kis_layer_utils.cpp.
| typedef QMap<int, QSet<KisNodeSP> > KisLayerUtils::FrameJobs |
Definition at line 94 of file kis_layer_utils.h.
Definition at line 361 of file kis_layer_utils.cpp.
Definition at line 362 of file kis_layer_utils.cpp.
Definition at line 363 of file kis_layer_utils.cpp.
Definition at line 364 of file kis_layer_utils.cpp.
| Enumerator | |
|---|---|
| None | |
| SkipMergingFrames | |
Definition at line 31 of file kis_layer_utils.h.
Definition at line 1757 of file kis_layer_utils.cpp.
References KisBaseNode::name(), and KisBaseNode::setName().
| KRITAIMAGE_EXPORT bool KisLayerUtils::canChangeImageProfileInvisibly | ( | KisImageSP | image | ) |
Definition at line 2397 of file kis_layer_utils.cpp.
References COMPOSITE_OVER, KisBaseNode::compositeOpId(), recursiveApplyNodes(), and KisNodeFacade::root.
| KRITAIMAGE_EXPORT void KisLayerUtils::changeImageDefaultProjectionColor | ( | KisImageSP | image, |
| const KoColor & | color ) |
Definition at line 1832 of file kis_layer_utils.cpp.
References KisProcessingApplicator::applyCommand(), KisStrokeJobData::BARRIER, KisCommandUtils::ChangeProjectionColorCommand, KisProcessingApplicator::end(), KisStrokeJobData::EXCLUSIVE, kundo2_i18n(), KisProcessingApplicator::RECURSIVE, and KisNodeFacade::root.
| KRITAIMAGE_EXPORT bool KisLayerUtils::checkIsChildOf | ( | KisNodeSP | node, |
| const KisNodeList & | parents ) |
Definition at line 1593 of file kis_layer_utils.cpp.
References KisNode::parent.
| KRITAIMAGE_EXPORT bool KisLayerUtils::checkIsCloneOf | ( | KisNodeSP | node, |
| const KisNodeList & | nodes ) |
Returns true if: o node is a clone of some layer in nodes o node is a clone any child layer of any layer in nodes o node is a clone of a clone of a ..., that in the end points to any layer in nodes of their children.
Definition at line 1612 of file kis_layer_utils.cpp.
References checkIsCloneOf(), KisCloneLayer::copyFrom, KisSharedPtr< T >::data(), and recursiveFindNode().
| bool KisLayerUtils::checkNodesDiffer | ( | KisNodeList | nodes, |
| std::function< T(KisNodeSP)> | checkerFunc ) |
Definition at line 220 of file kis_layer_utils.h.
| KRITAIMAGE_EXPORT std::future< KisNodeSP > KisLayerUtils::convertToPaintLayer | ( | KisImageSP | image, |
| KisNodeSP | src ) |
Definition at line 2454 of file kis_layer_utils.cpp.
References KisProcessingApplicator::applyCommand(), KisStrokeJobData::BARRIER, KisProcessingApplicator::end(), kundo2_i18n(), kismpl::make_ready_future(), KisProcessingApplicator::NONE, KisProcessingApplicator::successfullyCompletedFuture(), and kismpl::then().
| int KisLayerUtils::fetchLayerActiveRasterFrameID | ( | KisNodeSP | node | ) |
Definition at line 2490 of file kis_layer_utils.cpp.
References KisKeyframeChannel::activeKeyframeAt(), KisKeyframeChannel::activeKeyframeTime(), KisPaintDevice::keyframeChannel(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and KisBaseNode::paintDevice().
| KRITAIMAGE_EXPORT KisTimeSpan KisLayerUtils::fetchLayerActiveRasterFrameSpan | ( | KisNodeSP | node, |
| const int | time ) |
Definition at line 2520 of file kis_layer_utils.cpp.
References KisKeyframeChannel::affectedFrames(), KisTimeSpan::infinite(), KisPaintDevice::keyframeChannel(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and KisBaseNode::paintDevice().
| KRITAIMAGE_EXPORT int KisLayerUtils::fetchLayerActiveRasterFrameTime | ( | KisNodeSP | node | ) |
Definition at line 2507 of file kis_layer_utils.cpp.
References KisKeyframeChannel::activeKeyframeTime(), KisPaintDevice::keyframeChannel(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and KisBaseNode::paintDevice().
| KRITAIMAGE_EXPORT QSet< int > KisLayerUtils::fetchLayerFrames | ( | KisNodeSP | node | ) |
Definition at line 1375 of file kis_layer_utils.cpp.
References KisKeyframeChannel::allKeyframeTimes(), KisTimeSpan::end(), KisKeyframeChannel::firstKeyframeTime(), KisScalarKeyframeChannel::identicalFrames(), KisTimeSpan::isInfinite(), KisTimeSpan::isValid(), KisBaseNode::keyframeChannels, KisKeyframeChannel::lastKeyframeTime(), and KisTimeSpan::start().
| KRITAIMAGE_EXPORT QSet< int > KisLayerUtils::fetchLayerFramesRecursive | ( | KisNodeSP | rootNode | ) |
Definition at line 1411 of file kis_layer_utils.cpp.
References fetchLayerFrames(), fetchLayerFramesRecursive(), KisNode::firstChild(), KisNode::nextSibling(), and KisBaseNode::visible().
| KRITAIMAGE_EXPORT QSet< int > KisLayerUtils::fetchLayerIdenticalRasterFrameTimes | ( | KisNodeSP | node, |
| const int & | frameTime ) |
Definition at line 2532 of file kis_layer_utils.cpp.
References KisRasterKeyframeChannel::clonesOf(), KisSharedPtr< T >::data(), KisPaintDevice::keyframeChannel(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and KisBaseNode::paintDevice().
| QSet< int > KisLayerUtils::fetchLayerRasterFrameTimesMatchingID | ( | KisNodeSP | node, |
| const int | frameID ) |
Definition at line 2545 of file kis_layer_utils.cpp.
References KisBaseNode::getKeyframeChannel(), KIS_ASSERT, KisKeyframeChannel::Raster, and KisRasterKeyframeChannel::timesForFrameID().
| QSet< int > KisLayerUtils::fetchLayerRasterIDsAtTimes | ( | KisNodeSP | node, |
| const QSet< int > & | times ) |
Definition at line 2556 of file kis_layer_utils.cpp.
References KisKeyframeChannel::activeKeyframeAt(), KisPaintDevice::keyframeChannel(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and KisBaseNode::paintDevice().
| QSet< int > KisLayerUtils::fetchLayerUniqueRasterTimesMatchingIDs | ( | KisNodeSP | node, |
| QSet< int > & | frameIDs ) |
Definition at line 2587 of file kis_layer_utils.cpp.
References fetchLayerRasterFrameTimesMatchingID(), KisPaintDevice::framesInterface(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and KisBaseNode::paintDevice().
| void KisLayerUtils::fetchSelectionMasks | ( | KisNodeList | mergedNodes, |
| QVector< KisSelectionMaskSP > & | selectionMasks ) |
Definition at line 66 of file kis_layer_utils.cpp.
References KisNode::childNodes(), and KisSharedPtr< T >::data().
| KRITAIMAGE_EXPORT QSet< int > KisLayerUtils::fetchUniqueFrameTimes | ( | KisNodeSP | node, |
| QSet< int > | selectedTimes, | ||
| bool | filterActiveFrameID ) |
Definition at line 2606 of file kis_layer_utils.cpp.
References fetchLayerActiveRasterFrameID(), fetchLayerRasterIDsAtTimes(), fetchLayerUniqueRasterTimesMatchingIDs(), KisPaintDevice::framesInterface(), KoID::id(), KisBaseNode::paintDevice(), KisKeyframeChannel::Raster, and KisBaseNode::supportsKeyframeChannel().
| KisNodeList KisLayerUtils::filterInvisibleNodes | ( | const KisNodeList & | nodes, |
| KisNodeList * | invisibleNodes, | ||
| KisNodeSP * | putAfter ) |
When a layer is invisible and user-locked we should just skip it and do neither merge nor remove it.
Definition at line 1786 of file kis_layer_utils.cpp.
References KIS_ASSERT_RECOVER, KisBaseNode::userLocked(), and KisBaseNode::visible().
| KRITAIMAGE_EXPORT void KisLayerUtils::filterMergeableNodes | ( | KisNodeList & | nodes, |
| bool | allowMasks ) |
Definition at line 1641 of file kis_layer_utils.cpp.
References checkIsChildOf().
| KRITAIMAGE_EXPORT QSet< int > KisLayerUtils::filterTimesForOnlyRasterKeyedTimes | ( | KisNodeSP | node, |
| const QSet< int > & | times ) |
Definition at line 2575 of file kis_layer_utils.cpp.
References KisKeyframeChannel::allKeyframeTimes(), KisPaintDevice::keyframeChannel(), KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and KisBaseNode::paintDevice().
| KRITAIMAGE_EXPORT void KisLayerUtils::filterUnlockedNodes | ( | KisNodeList & | nodes | ) |
Definition at line 1819 of file kis_layer_utils.cpp.
| KRITAIMAGE_EXPORT KisImageSP KisLayerUtils::findImageByHierarchy | ( | KisNodeSP | node | ) |
Definition at line 2319 of file kis_layer_utils.cpp.
References KisSharedPtr< T >::data(), KisBaseNode::image, and KisNode::parent.
Definition at line 2276 of file kis_layer_utils.cpp.
References KisBaseNode::image, and KisImage::isolationRootNode().
Definition at line 2268 of file kis_layer_utils.cpp.
References KisBaseNode::name(), and recursiveFindNode().
| T * KisLayerUtils::findNodeByType | ( | KisNodeSP | root | ) |
Definition at line 275 of file kis_layer_utils.h.
References KisSharedPtr< T >::data(), and recursiveFindNode().
Recursively searches for a node with specified Uuid
Definition at line 2242 of file kis_layer_utils.cpp.
References recursiveFindNode(), and KisBaseNode::uuid().
| KRITAIMAGE_EXPORT QList< KisNodeSP > KisLayerUtils::findNodesByName | ( | KisNodeSP | root, |
| const QString & | name, | ||
| bool | recursive, | ||
| bool | partialMatch ) |
Definition at line 2250 of file kis_layer_utils.cpp.
References KisNode::childCount(), findNodesByName(), KisNode::firstChild(), KisBaseNode::name(), and KisNode::nextSibling().
| KRITAIMAGE_EXPORT KisNodeList KisLayerUtils::findNodesWithProps | ( | KisNodeSP | root, |
| const KoProperties & | props, | ||
| bool | excludeRoot ) |
Definition at line 1769 of file kis_layer_utils.cpp.
References KisBaseNode::check(), findNodesWithProps(), KisNode::firstChild(), KisNode::nextSibling(), and KisNode::parent.
Definition at line 2387 of file kis_layer_utils.cpp.
References KisNode::parent.
| KRITAIMAGE_EXPORT void KisLayerUtils::flattenImage | ( | KisImageSP | image, |
| KisNodeSP | activeNode, | ||
| MergeFlags | flags ) |
Definition at line 2192 of file kis_layer_utils.cpp.
References kundo2_i18n(), KisNode::lastChild(), mergeMultipleLayersImpl(), and KisNodeFacade::root.
| KRITAIMAGE_EXPORT void KisLayerUtils::flattenLayer | ( | KisImageSP | image, |
| KisLayerSP | layer, | ||
| MergeFlags | flags ) |
Definition at line 2178 of file kis_layer_utils.cpp.
References KisNode::childCount(), kundo2_i18n(), KisLayer::layerStyle, and mergeMultipleLayersImpl().
Definition at line 2284 of file kis_layer_utils.cpp.
References KisSharedPtr< T >::data(), KisDelayedUpdateNodeInterface::forceUpdateTimedNode(), and recursiveApplyNodes().
Definition at line 2307 of file kis_layer_utils.cpp.
References KisSharedPtr< T >::data(), KisCroppedOriginalLayerInterface::forceUpdateHiddenAreaOnOriginal(), and recursiveApplyNodes().
| KRITAIMAGE_EXPORT bool KisLayerUtils::hasDelayedNodeWithUpdates | ( | KisNodeSP | root | ) |
Definition at line 2296 of file kis_layer_utils.cpp.
References KisSharedPtr< T >::data(), KisDelayedUpdateNodeInterface::hasPendingTimedUpdates(), and recursiveFindNode().
| KRITAIMAGE_EXPORT void KisLayerUtils::mergeDown | ( | KisImageSP | image, |
| KisLayerSP | layer, | ||
| const KisMetaData::MergeStrategy * | strategy, | ||
| MergeFlags | flags ) |
Save the original time before we start switching is with asynchronous SwitchFrameCommand.
When switching frames we need to update the entire image, not only the new extent of the layer, hence we pass refresh_entire_image to the command to make sure that the entire image bounds rect is added to the update rect
If source layer is not animated, then just merge that into the current frame to avoid unintentional destruction of the animation on the layer below. To merge the source into all the frames, just make the source animated.
See https://bugs.kde.org/show_bug.cgi?id=475550
Definition at line 1468 of file kis_layer_utils.cpp.
References KisProcessingApplicator::applyCommand(), KisStrokeJobData::BARRIER, KisSharedPtr< T >::data(), KisProcessingApplicator::end(), KisStrokeJobData::EXCLUSIVE, KisBaseNode::isAnimated(), KisBaseNode::isFakeNode(), kundo2_i18n(), KisProcessingApplicator::NONE, KisNode::prevSibling(), KisLayerUtils::RefreshHiddenAreas::refresh_entire_image, KisStrokeJobData::SEQUENTIAL, and KisBaseNode::visible().
| KRITAIMAGE_EXPORT void KisLayerUtils::mergeMultipleLayers | ( | KisImageSP | image, |
| KisNodeList | mergedNodes, | ||
| KisNodeSP | putAfter, | ||
| MergeFlags | flags ) |
Definition at line 2062 of file kis_layer_utils.cpp.
References kundo2_i18n(), and mergeMultipleLayersImpl().
| void KisLayerUtils::mergeMultipleLayersImpl | ( | KisImageSP | image, |
| KisNodeList | mergedNodes, | ||
| KisNodeSP | putAfter, | ||
| bool | flattenSingleLayer, | ||
| const KUndo2MagicString & | actionName, | ||
| bool | cleanupNodes = true, | ||
| const QString | layerName = QString(), | ||
| MergeFlags | flags = None ) |
There might be two approaches for merging multiple layers:
1) Consider the selected nodes as a distinct "group" and merge them as if they were isolated from the rest of the image. The key point of this approach is that the look of the image will change, when merging "weird" layers, like adjustment layers or layers with non-normal blending mode.
2) Merge layers in a way to keep the look of the image as unchanged as possible. With this approach one uses a few heuristics:
Krita uses the second approach: after merge operation, the image should look as if nothing has happened (if it is technically possible).
We have reached the root of the layer hierarchy and didn't manage to find a node that was editable enough for putting our merged result into it. That shouldn't happen in normal circumstances, unless the user chose to make the root layer visible and lock it manually.
When switching frames we need to update the entire image, not only the new extent of the layer, hence we pass refresh_entire_image to the command to make sure that the entire image bounds rect is added to the update rect
Definition at line 1919 of file kis_layer_utils.cpp.
References KisProcessingApplicator::applyCommand(), KisStrokeJobData::BARRIER, KisProcessingApplicator::end(), KisStrokeJobData::EXCLUSIVE, filterInvisibleNodes(), filterMergeableNodes(), KisBaseNode::isEditable(), KIS_SAFE_ASSERT_RECOVER_RETURN, KisProcessingApplicator::NONE, KisNode::parent, KisLayerUtils::RefreshHiddenAreas::refresh_entire_image, KisNodeFacade::root, KisStrokeJobData::SEQUENTIAL, sortMergeableNodes(), and KisBaseNode::visible().
| KRITAIMAGE_EXPORT void KisLayerUtils::mergeMultipleNodes | ( | KisImageSP | image, |
| KisNodeList | mergedNodes, | ||
| KisNodeSP | putAfter, | ||
| MergeFlags | flags = None ) |
Same as mergeMultipleLayers() but tries to merge masks with tryMergeSelectionMasks() first.
Definition at line 2070 of file kis_layer_utils.cpp.
References mergeMultipleLayers(), and tryMergeSelectionMasks().
| KRITAIMAGE_EXPORT void KisLayerUtils::newLayerFromVisible | ( | KisImageSP | image, |
| KisNodeSP | putAfter, | ||
| MergeFlags | flags ) |
Definition at line 2077 of file kis_layer_utils.cpp.
References kundo2_i18n(), mergeMultipleLayersImpl(), and KisNodeFacade::root.
| void KisLayerUtils::recursiveApplyNodes | ( | NodePointer | node, |
| Functor | func ) |
Applies func to node and all its children recursively
Definition at line 241 of file kis_layer_utils.h.
References recursiveApplyNodes().
| KRITAIMAGE_EXPORT KisNodeSP KisLayerUtils::recursiveFindNode | ( | KisNodeSP | node, |
| std::function< bool(KisNodeSP)> | func ) |
Walks through node and all its children recursively until func returns true. When func returns true, the node is considered to be found, the search is stopped and the found node is returned to the caller.
Definition at line 2224 of file kis_layer_utils.cpp.
References KisNode::firstChild(), KisNode::nextSibling(), and recursiveFindNode().
| KRITAIMAGE_EXPORT QRect KisLayerUtils::recursiveTightNodeVisibleBounds | ( | KisNodeSP | rootNode | ) |
Definition at line 2378 of file kis_layer_utils.cpp.
References KisNode::projectionPlane(), and recursiveApplyNodes().
| KRITAIMAGE_EXPORT void KisLayerUtils::refreshHiddenAreaAsync | ( | KisImageSP | image, |
| KisNodeSP | rootNode, | ||
| const QRect & | preparedArea ) |
Definition at line 2374 of file kis_layer_utils.cpp.
References KisLayerUtils::Private::refreshHiddenAreaAsync().
| KRITAIMAGE_EXPORT KisNodeList KisLayerUtils::sortAndFilterAnyMergeableNodesSafe | ( | const KisNodeList & | nodes, |
| KisImageSP | image ) |
Definition at line 1733 of file kis_layer_utils.cpp.
References filterMergeableNodes(), KisNode::graphListener, KisNodeFacade::root, and sortMergeableNodes().
| KRITAIMAGE_EXPORT KisNodeList KisLayerUtils::sortAndFilterMergeableInternalNodes | ( | KisNodeList | nodes, |
| bool | allowMasks ) |
Definition at line 1688 of file kis_layer_utils.cpp.
References filterMergeableNodes(), KIS_SAFE_ASSERT_RECOVER, KisNode::parent, and sortMergeableNodes().
| KRITAIMAGE_EXPORT KisNodeList KisLayerUtils::sortMergeableInternalNodes | ( | KisNodeList | nodes | ) |
Definition at line 1711 of file kis_layer_utils.cpp.
References KIS_SAFE_ASSERT_RECOVER, KisNode::parent, and sortMergeableNodes().
| void KisLayerUtils::sortMergeableNodes | ( | KisNodeSP | root, |
| KisNodeList & | inputNodes, | ||
| KisNodeList & | outputNodes ) |
By the end of recursion inputNodes must be empty
Definition at line 1656 of file kis_layer_utils.cpp.
References KisNode::firstChild(), KIS_ASSERT_RECOVER_NOOP, KisNode::nextSibling(), KisNode::parent, and sortMergeableNodes().
| KRITAIMAGE_EXPORT KisNodeList KisLayerUtils::sortMergeableNodes | ( | KisNodeSP | root, |
| KisNodeList | nodes ) |
Definition at line 1681 of file kis_layer_utils.cpp.
References sortMergeableNodes().
| KRITAIMAGE_EXPORT void KisLayerUtils::sortMergeableNodes | ( | KisNodeSP | root, |
| QList< KisNodeSP > & | inputNodes, | ||
| QList< KisNodeSP > & | outputNodes ) |
| KRITAIMAGE_EXPORT void KisLayerUtils::splitAlphaToMask | ( | KisImageSP | image, |
| KisNodeSP | node, | ||
| const QString & | maskName ) |
Definition at line 2429 of file kis_layer_utils.cpp.
References KisProcessingApplicator::applyCommand(), KisStrokeJobData::BARRIER, KisProcessingApplicator::end(), KisBaseNode::image, kundo2_i18n(), and KisProcessingApplicator::NONE.
| void KisLayerUtils::splitNonRemovableNodes | ( | KisNodeList & | nodesToRemove, |
| KisNodeList & | _nodesToHide ) |
Definition at line 1142 of file kis_layer_utils.cpp.
References KisBaseNode::isEditable(), KIS_SAFE_ASSERT_RECOVER_NOOP, recursiveApplyNodes(), and KisBaseNode::visible().
| KRITAIMAGE_EXPORT bool KisLayerUtils::tryMergeSelectionMasks | ( | KisImageSP | image, |
| KisNodeList | mergedNodes, | ||
| KisNodeSP | putAfter ) |
Definition at line 2139 of file kis_layer_utils.cpp.
References KisProcessingApplicator::applyCommand(), KisProcessingApplicator::end(), KisStrokeJobData::EXCLUSIVE, KIS_ASSERT_RECOVER, kundo2_i18n(), None, KisProcessingApplicator::NONE, and KisStrokeJobData::SEQUENTIAL.
Definition at line 1425 of file kis_layer_utils.cpp.
References fetchLayerFrames(), and fetchUniqueFrameTimes().
| void KisLayerUtils::updateFrameJobsNonRecursive | ( | FrameJobs * | jobs, |
| KisNodeSP | rootNode, | ||
| bool | frameTimesRecursive = false ) |
updateFrameJobsNonRecursive updates the frame jobs non-recursively, that is, on the rootNode only.
| frameTimesRecursive | – whether to make the frame times themselves recursive, or to only use the frames on the root node. |
Definition at line 1448 of file kis_layer_utils.cpp.
References fetchLayerFramesRecursive(), and updateFrameJobs().
Definition at line 1438 of file kis_layer_utils.cpp.
References KisNode::firstChild(), KisNode::nextSibling(), updateFrameJobs(), and updateFrameJobsRecursive().