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 2286 of file kis_layer_utils.cpp.

2286 {
2287 KisNodeSP node = rootNode->firstChild();
2288
2289 while(node) {
2290 currentRect |= realNodeChangeRect(node, currentRect);
2291 node = node->nextSibling();
2292 }
2293
2294 if (!rootNode->isFakeNode() && !rootNode->projectionLeaf()->isMask()) {
2295 // TODO: it would be better to count up changeRect inside
2296 // node's extent() method
2297 //
2298 // NOTE: when flattening a group layer, we should take the change rect of the
2299 // all the child layers as the source of the change. We are calculating
2300 // the change rect **before** the update itself, therefore rootNode->exactBounds()
2301 // is not yet prepared, hence its exact bounds still contail old values.
2302 currentRect |= rootNode->projectionPlane()->changeRect(rootNode->exactBounds() | currentRect);
2303 }
2304
2305 return currentRect;
2306 }
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 2310 of file kis_layer_utils.cpp.

2310 {
2311 QRect realNodeRect = Private::realNodeChangeRect(rootNode) | extraUpdateRect;
2312 if (!preparedArea.contains(realNodeRect)) {
2313
2314 QRegion dirtyRegion = realNodeRect;
2315 dirtyRegion -= preparedArea;
2316
2317 auto rc = dirtyRegion.begin();
2318 while (rc != dirtyRegion.end()) {
2319 image->refreshGraphAsync(rootNode, *rc, realNodeRect);
2320 rc++;
2321 }
2322 }
2323 }
void refreshGraphAsync(KisNodeSP root, const QVector< QRect > &rects, const QRect &cropRect, KisProjectionUpdateFlags flags=KisProjectionUpdateFlag::None) override

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