Conversation
`Style::operator==` compares every style field except `boxSizing_`, so two styles that only differ in box sizing compare equal. `YGNodeCopyStyle` then skips the copy and leaves the destination node with the old box sizing, and callers that compare styles to decide whether a node needs relayout miss the change. Compare `boxSizing_` together with the other enum fields.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
yoga::Style::operator==compares every style field exceptboxSizing_(the field was added in #1701 but never added to the comparison). Two styles that only differ in box sizing therefore compare equal.Effects:
YGNodeCopyStyle(dst, src)only copies whendst->style() != src->style(). Ifsrconly differs in box sizing, nothing is copied anddstkeeps its old box sizing without being marked dirty.YogaLayoutableShadowNode::updateYogaPropsonly dirties the node whenstyleResult != yogaNode_.style(), so a prop update that only changesboxSizingis not detected there.The fix compares
boxSizing_together with the other enum fields.Changelog: [General][Fixed] - Fix
YGNodeCopyStyleand style equality ignoringboxSizingTest Plan
Added
copy_style_box_sizingtotests/YGStyleTest.cpp. It copies a style that only setsYGBoxSizingContentBoxonto a default node.Before the fix:
After the fix it passes, and the full C++ suite (MSVC 2022 + Ninja) passes: 855 tests. clang-format 21.1.2 (the version pinned in
scripts/clang-format) reports no changes.