| 2375 | |
| 2376 | return *_scrollState; |
| 2377 | } |
| 2378 | |
| 2379 | void ViewNode::setViewFrameNeedsUpdate() { |
| 2380 | _flags[kNeedsFrameUpdateFlag] = true; |
| 2381 | } |
| 2382 | |
| 2383 | bool 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); |
nothing calls this directly
no test coverage detected