Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLayerUtils::Private Namespace Reference

Functions

QRect realNodeChangeRect (KisNodeSP rootNode, QRect currentRect=QRect())
 
void refreshHiddenAreaAsync (KisImageSP image, KisNodeSP rootNode, const QRect &preparedArea, const QRect &extraUpdateRect)
 

Function Documentation

◆ realNodeChangeRect()

QRect KisLayerUtils::Private::realNodeChangeRect ( KisNodeSP rootNode,
QRect currentRect = QRect() )

Definition at line 2317 of file kis_layer_utils.cpp.

2317 {
2318 KisNodeSP node = rootNode->firstChild();
2319
2320 while(node) {
2321 currentRect |= realNodeChangeRect(node, currentRect);
2322 node = node->nextSibling();
2323 }
2324
2325 if (!rootNode->isFakeNode() && !rootNode->projectionLeaf()->isMask()) {
2326 // TODO: it would be better to count up changeRect inside
2327 // node's extent() method
2328 //
2329 // NOTE: when flattening a group layer, we should take the change rect of the
2330 // all the child layers as the source of the change. We are calculating
2331 // the change rect **before** the update itself, therefore rootNode->exactBounds()
2332 // is not yet prepared, hence its exact bounds still contail old values.
2333 currentRect |= rootNode->projectionPlane()->changeRect(rootNode->exactBounds() | currentRect);
2334 }
2335
2336 return currentRect;
2337 }
QRect realNodeChangeRect(KisNodeSP rootNode, QRect currentRect=QRect())
virtual QRect exactBounds() const
virtual bool isFakeNode() const
KisNodeSP firstChild() const
Definition kis_node.cpp:361
virtual KisAbstractProjectionPlaneSP projectionPlane() const
Definition kis_node.cpp:240
KisProjectionLeafSP projectionLeaf
Definition kis_node.cpp:93
KisNodeSP nextSibling() const
Definition kis_node.cpp:408

References KisBaseNode::exactBounds(), KisNode::firstChild(), KisBaseNode::isFakeNode(), KisNode::nextSibling(), KisNode::projectionLeaf, KisNode::projectionPlane(), and realNodeChangeRect().

◆ refreshHiddenAreaAsync()

void KisLayerUtils::Private::refreshHiddenAreaAsync ( KisImageSP image,
KisNodeSP rootNode,
const QRect & preparedArea,
const QRect & extraUpdateRect )

Definition at line 2341 of file kis_layer_utils.cpp.

2341 {
2342 QRect realNodeRect = Private::realNodeChangeRect(rootNode) | extraUpdateRect;
2343 if (!preparedArea.contains(realNodeRect)) {
2344
2345 QRegion dirtyRegion = realNodeRect;
2346 dirtyRegion -= preparedArea;
2347
2348 auto rc = dirtyRegion.begin();
2349 while (rc != dirtyRegion.end()) {
2350 image->refreshGraphAsync(rootNode, *rc, realNodeRect);
2351 rc++;
2352 }
2353 }
2354 }
void refreshGraphAsync(KisNodeSP root, const QVector< QRect > &rects, const QRect &cropRect, KisProjectionUpdateFlags flags=KisProjectionUpdateFlag::None) override

References realNodeChangeRect(), and KisImage::refreshGraphAsync().