Fix SingleFlex Child condition
Summary: Fixes the improper `singleFlexChild` optimization. In the case when all the childs have `flex-grow:0 flex-grow:0` except one child with `flex-grow:1 flex-shrink:1`, then one can simply measure all the non-flexing children and then give the flexing child all the remaining space. Also added a test case which reproduced the bug Reviewed By: IanChilds Differential Revision: D8782684 fbshipit-source-id: ffd4d35b6122f82111b987540efb23bd2a8da5a2
This commit is contained in:
parent
578b0b2a51
commit
90a408ea6f
|
@ -1788,16 +1788,17 @@ static void YGNodeComputeFlexBasisForChildren(
|
|||
// child to exactly match the remaining space
|
||||
if (measureModeMainDim == YGMeasureModeExactly) {
|
||||
for (auto child : children) {
|
||||
if (singleFlexChild != nullptr) {
|
||||
if (child->isNodeFlexible()) {
|
||||
// There is already a flexible child, abort
|
||||
if (child->isNodeFlexible()) {
|
||||
if (singleFlexChild != nullptr ||
|
||||
YGFloatsEqual(child->resolveFlexGrow(), 0.0f) ||
|
||||
YGFloatsEqual(child->resolveFlexShrink(), 0.0f)) {
|
||||
// There is already a flexible child, or this flexible child doesn't
|
||||
// have flexGrow and flexShrink, abort
|
||||
singleFlexChild = nullptr;
|
||||
break;
|
||||
} else {
|
||||
singleFlexChild = child;
|
||||
}
|
||||
} else if (
|
||||
child->resolveFlexGrow() > 0.0f &&
|
||||
child->resolveFlexShrink() > 0.0f) {
|
||||
singleFlexChild = child;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue