Yoga test failure for flexing with min stack dimension
Summary: Test fails when we have flexible child and min/max layout dimension. Yoga should flex the child to minimal size, while in reality Yoga flexes it to maximal size Reviewed By: emilsjolander Differential Revision: D4558653 fbshipit-source-id: 06b38d7ed43aee063cc881f38b84558641f043f3
This commit is contained in:
committed by
Facebook Github Bot
parent
4372aa16d3
commit
3ef2970032
@@ -57,10 +57,11 @@ typedef YG_ENUM_BEGIN(YGEdge) {
|
||||
YGEdgeAll,
|
||||
} YG_ENUM_END(YGEdge);
|
||||
|
||||
#define YGExperimentalFeatureCount 2
|
||||
#define YGExperimentalFeatureCount 3
|
||||
typedef YG_ENUM_BEGIN(YGExperimentalFeature) {
|
||||
YGExperimentalFeatureRounding,
|
||||
YGExperimentalFeatureWebFlexBasis,
|
||||
YGExperimentalFeatureMinFlexFix,
|
||||
} YG_ENUM_END(YGExperimentalFeature);
|
||||
|
||||
#define YGFlexDirectionCount 4
|
||||
|
13
yoga/Yoga.c
13
yoga/Yoga.c
@@ -1960,11 +1960,13 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
||||
// above
|
||||
float availableInnerWidth = availableWidth - marginAxisRow - paddingAndBorderAxisRow;
|
||||
if (!YGFloatIsUndefined(availableInnerWidth)) {
|
||||
// We want to make sure our available width does not violate min and max constraints
|
||||
availableInnerWidth = fmaxf(fminf(availableInnerWidth, maxInnerWidth), minInnerWidth);
|
||||
}
|
||||
|
||||
float availableInnerHeight = availableHeight - marginAxisColumn - paddingAndBorderAxisColumn;
|
||||
if (!YGFloatIsUndefined(availableInnerHeight)) {
|
||||
// We want to make sure our available height does not violate min and max constraints
|
||||
availableInnerHeight = fmaxf(fminf(availableInnerHeight, maxInnerHeight), minInnerHeight);
|
||||
}
|
||||
|
||||
@@ -2149,13 +2151,16 @@ static void YGNodelayoutImpl(const YGNodeRef node,
|
||||
// If the main dimension size isn't known, it is computed based on
|
||||
// the line length, so there's no more space left to distribute.
|
||||
|
||||
// We resolve main dimension to fit minimum and maximum values
|
||||
if (YGFloatIsUndefined(availableInnerMainDim)) {
|
||||
// If we don't measure with exact main dimension we want to ensure we don't violate min and max
|
||||
if (measureModeMainDim != YGMeasureModeExactly) {
|
||||
if (!YGFloatIsUndefined(minInnerMainDim) && sizeConsumedOnCurrentLine < minInnerMainDim) {
|
||||
availableInnerMainDim = minInnerMainDim;
|
||||
} else if (!YGFloatIsUndefined(maxInnerMainDim) &&
|
||||
sizeConsumedOnCurrentLine > maxInnerMainDim) {
|
||||
} else if (!YGFloatIsUndefined(maxInnerMainDim) && sizeConsumedOnCurrentLine > maxInnerMainDim) {
|
||||
availableInnerMainDim = maxInnerMainDim;
|
||||
} else if (YGIsExperimentalFeatureEnabled(YGExperimentalFeatureMinFlexFix)) {
|
||||
// TODO: this needs to be moved out of experimental feature, as this is legitimate fix
|
||||
// If the measurement isn't exact, we want to use as little space as possible
|
||||
availableInnerMainDim = sizeConsumedOnCurrentLine;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user