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

Method updateCalculatedFrame

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

Source from the content-addressed store, hash-verified

2375
2376 return *_scrollState;
2377}
2378
2379void ViewNode::setViewFrameNeedsUpdate() {
2380 _flags[kNeedsFrameUpdateFlag] = true;
2381}
2382
2383bool ViewNode::updateCalculatedFrame(float viewOffsetX,
2384 float viewOffsetY,
2385 float rtlOffsetX,
2386 bool* calculatedFrameDidChange,
2387 bool* calculatedSizeDidChange) {
2388 auto newFrame = ygNodeGetFrame(_yogaNode, rtlOffsetX);
2389 auto newViewFrame = newFrame.withOffset(viewOffsetX, viewOffsetY);
2390
2391 auto hasNewLayout = resolveYogaNode(_yogaNode)->getHasNewLayout();
2392 auto hadLayout = _flags[kLayoutDidCompleteOnceFlag];
2393 auto layoutIsRightToLeft = isRightToLeft();
2394
2395 if (!hadLayout || _calculatedFrame != newFrame) {
2396 *calculatedSizeDidChange =
2397 _calculatedFrame.width != newFrame.width || _calculatedFrame.height != newFrame.height;
2398 *calculatedFrameDidChange = true;
2399 _calculatedFrame = newFrame;
2400
2401 setCalculatedViewportNeedsUpdate();
2402 hasNewLayout = true;
2403 }
2404
2405 if (!hadLayout || _viewFrame != newViewFrame || layoutIsRightToLeft != _flags[kLayoutIsRightToLeft]) {
2406 _previousViewFrame = _viewFrame;
2407 _viewFrame = newViewFrame;
2408 _flags[kLayoutIsRightToLeft] = layoutIsRightToLeft;
2409
2410 setViewFrameNeedsUpdate();
2411 hasNewLayout = true;
2412 }
2413
2414 if (!hasNewLayout) {
2415 return false;
2416 }
2417
2418 _flags[kLayoutDidCompleteOnceFlag] = true;
2419
2420 resolveYogaNode(_yogaNode)->setHasNewLayout(false);

Callers

nothing calls this directly

Calls 3

ygNodeGetFrameFunction · 0.85
resolveYogaNodeFunction · 0.85
withOffsetMethod · 0.80

Tested by

no test coverage detected