| 801 | if (shouldReceiveVisibilityUpdates()) { |
| 802 | auto* visibilityObserver = _viewNodeTree->getViewNodesVisibilityObserver(); |
| 803 | if (visibilityObserver != nullptr) { |
| 804 | visibilityObserver->onViewNodeViewportChanged(_rawId, clipRect); |
| 805 | } |
| 806 | } |
| 807 | } |
| 808 | } |
| 809 | |
| 810 | if (childrenNeedsUpdate) { |
| 811 | auto isVisible = isVisibleInViewport(); |
| 812 | |
| 813 | if (_childrenIndexer != nullptr) { |
| 814 | // Use our childrenIndexer if we have one, which will efficiently find the elements which |
| 815 | // have become visible or invisible |
| 816 | auto result = _childrenIndexer->findChildrenVisibility(getCalculatedViewport()); |
| 817 | for (auto* childViewNode : *result.invisibleChildren) { |
| 818 | changed |= |
| 819 | childViewNode->doUpdateVisibility(getCalculatedViewport(), viewportChanged, false, visitedNodes); |
| 820 | } |
| 821 | for (auto* childViewNode : *result.visibleChildren) { |