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

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

2302 {
2303 QRect realNodeRect = Private::realNodeChangeRect(rootNode) | extraUpdateRect;
2304 if (!preparedArea.contains(realNodeRect)) {
2305
2306 QRegion dirtyRegion = realNodeRect;
2307 dirtyRegion -= preparedArea;
2308
2309 auto rc = dirtyRegion.begin();
2310 while (rc != dirtyRegion.end()) {
2311 image->refreshGraphAsync(rootNode, *rc, realNodeRect);
2312 rc++;
2313 }
2314 }
2315 }
void refreshGraphAsync(KisNodeSP root, const QVector< QRect > &rects, const QRect &cropRect, KisProjectionUpdateFlags flags=KisProjectionUpdateFlag::None) override

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