diff --git a/java/tests/com/facebook/yoga/YogaNodeTest.java b/java/tests/com/facebook/yoga/YogaNodeTest.java index 8f894f3c..785330a8 100644 --- a/java/tests/com/facebook/yoga/YogaNodeTest.java +++ b/java/tests/com/facebook/yoga/YogaNodeTest.java @@ -254,7 +254,7 @@ public class YogaNodeTest { root_child0_child0_child0.setFlexShrink(1); root_child0_child0.addChildAt(root_child0_child0_child0, 0); root.calculateLayout(YogaConstants.UNDEFINED, YogaConstants.UNDEFINED); - assertFalse(((YogaNodeJNIBase) root).getDoesLegacyStretchFlagAffectsLayout()); + assertTrue(((YogaNodeJNIBase) root).getDoesLegacyStretchFlagAffectsLayout()); } @Test diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 172da871..81a4216e 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -539,13 +539,6 @@ bool YGNode::didUseLegacyFlag() { return didUseLegacyFlag; } -void YGNode::setAndPropogateUseLegacyFlag(bool useLegacyFlag) { - config_->useLegacyStretchBehaviour = useLegacyFlag; - for_each(children_.begin(), children_.end(), [=](YGNodeRef childNode) { - childNode->getConfig()->useLegacyStretchBehaviour = useLegacyFlag; - }); -} - void YGNode::setLayoutDoesLegacyFlagAffectsLayout( bool doesLegacyFlagAffectsLayout) { layout_.doesLegacyStretchFlagAffectsLayout = doesLegacyFlagAffectsLayout; diff --git a/yoga/YGNode.h b/yoga/YGNode.h index d368bde0..e5f1da3c 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -292,7 +292,6 @@ public: const float mainSize, const float crossSize, const float ownerWidth); - void setAndPropogateUseLegacyFlag(bool useLegacyFlag); void setLayoutDoesLegacyFlagAffectsLayout(bool doesLegacyFlagAffectsLayout); void setLayoutDidUseLegacyFlag(bool didUseLegacyFlag); void markDirtyAndPropogateDownwards(); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bcca9795..c4544ed9 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -3992,6 +3992,13 @@ static void YGRoundToPixelGrid( } } +static void unsetUseLegacyFlagRecursively(YGNodeRef node) { + node->getConfig()->useLegacyStretchBehaviour = false; + for (auto child : node->getChildren()) { + unsetUseLegacyFlagRecursively(child); + } +} + void YGNodeCalculateLayoutWithContext( const YGNodeRef node, const float ownerWidth, @@ -4096,16 +4103,16 @@ void YGNodeCalculateLayoutWithContext( // run experiments. if (node->getConfig()->shouldDiffLayoutWithoutLegacyStretchBehaviour && node->didUseLegacyFlag()) { - const YGNodeRef originalNode = YGNodeDeepClone(node); - originalNode->resolveDimension(); + const YGNodeRef nodeWithoutLegacyFlag = YGNodeDeepClone(node); + nodeWithoutLegacyFlag->resolveDimension(); // Recursively mark nodes as dirty - originalNode->markDirtyAndPropogateDownwards(); + nodeWithoutLegacyFlag->markDirtyAndPropogateDownwards(); gCurrentGenerationCount++; // Rerun the layout, and calculate the diff - originalNode->setAndPropogateUseLegacyFlag(false); + unsetUseLegacyFlagRecursively(nodeWithoutLegacyFlag); YGMarkerLayoutData layoutMarkerData; if (YGLayoutNodeInternal( - originalNode, + nodeWithoutLegacyFlag, width, height, ownerDirection, @@ -4115,37 +4122,37 @@ void YGNodeCalculateLayoutWithContext( ownerHeight, true, "initial", - originalNode->getConfig(), + nodeWithoutLegacyFlag->getConfig(), layoutMarkerData, layoutContext)) { - originalNode->setPosition( - originalNode->getLayout().direction, + nodeWithoutLegacyFlag->setPosition( + nodeWithoutLegacyFlag->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); YGRoundToPixelGrid( - originalNode, - originalNode->getConfig()->pointScaleFactor, + nodeWithoutLegacyFlag, + nodeWithoutLegacyFlag->getConfig()->pointScaleFactor, 0.0f, 0.0f); // Set whether the two layouts are different or not. auto neededLegacyStretchBehaviour = - !originalNode->isLayoutTreeEqualToNode(*node); + !nodeWithoutLegacyFlag->isLayoutTreeEqualToNode(*node); node->setLayoutDoesLegacyFlagAffectsLayout(neededLegacyStretchBehaviour); #ifdef DEBUG - if (originalNode->getConfig()->printTree) { + if (nodeWithoutLegacyFlag->getConfig()->printTree) { YGNodePrint( - originalNode, + nodeWithoutLegacyFlag, (YGPrintOptions)( YGPrintOptionsLayout | YGPrintOptionsChildren | YGPrintOptionsStyle)); } #endif } - YGConfigFreeRecursive(originalNode); - YGNodeFreeRecursive(originalNode); + YGConfigFreeRecursive(nodeWithoutLegacyFlag); + YGNodeFreeRecursive(nodeWithoutLegacyFlag); } }