MCPcopy Create free account
hub / github.com/Snapchat/Valdi / refreshPreserveAnchor

Function refreshPreserveAnchor

valdi/src/valdi/runtime/Context/ViewNode.cpp:985–994  ·  view source on GitHub ↗

Re-pick the anchor (the node at the viewport center) and remember its id + screen position (absolute top relative to the viewport top) so a later content reflow can pin it back. Called from both layout (updateScrollState) and scroll (handleOnScroll) so the anchor never goes stale between layout passes.

Source from the content-addressed store, hash-verified

983
984// Re-pick the anchor (the node at the viewport center) and remember its id + screen position
985// (absolute top relative to the viewport top) so a later content reflow can pin it back. Called
986// from both layout (updateScrollState) and scroll (handleOnScroll) so the anchor never goes stale
987// between layout passes.
988void refreshPreserveAnchor(ViewNode* scrollNode, ViewNodeScrollState& scrollState, float offsetY, float viewportH) {
989 float probeY = offsetY + viewportH * 0.5f;
990 // Only anchor on a node with a real, trackable rawId. id 0 (unset/default) can't be re-found
991 // across passes, so don't record it -- clear instead and re-pick next pass.
992 if (auto* anchor = preserveDescendantAtY(scrollNode, probeY); anchor != nullptr && anchor->getRawId() != 0) {
993 scrollState.setPreserveAnchor(anchor->getRawId(), preserveAnchorAbsoluteTop(scrollNode, anchor) - offsetY);
994 } else {
995 scrollState.clearPreserveAnchor();
996 }
997}

Callers 3

handleOnScrollMethod · 0.85
updateScrollStateMethod · 0.85

Calls 5

preserveDescendantAtYFunction · 0.85
getRawIdMethod · 0.80
setPreserveAnchorMethod · 0.80
clearPreserveAnchorMethod · 0.80

Tested by

no test coverage detected