This commit is contained in:
Lukas Woehrl
2017-01-05 13:45:01 +01:00
parent e99e7b93d5
commit 49ffda5431

View File

@@ -950,9 +950,9 @@ static inline YGDirection YGNodeResolveDirection(const YGNodeRef node,
} }
} }
static float YGBaselineOfFirstLine(const YGNodeRef node, static float YGBaselineForNode(const YGNodeRef node, const YGFlexDirection crossAxis);
const YGFlexDirection crossAxis,
const float parentWidth) { static float YGBaselineOfFirstLine(const YGNodeRef node) {
if (node->baseline != NULL) { if (node->baseline != NULL) {
return node->baseline(node); return node->baseline(node);
} }
@@ -978,23 +978,12 @@ static float YGBaselineOfFirstLine(const YGNodeRef node,
return YGUndefined; return YGUndefined;
} }
float baseline = YGBaselineOfFirstLine(baselineChild, const float baseline = YGBaselineForNode(baselineChild, node->style.flexDirection);
node->style.flexDirection,
node->layout.measuredDimensions[YGDimensionWidth]);
if (YGFloatIsUndefined(baseline)) {
baseline = YGNodeLeadingPaddingAndBorder(baselineChild,
node->style.flexDirection,
node->layout.measuredDimensions[YGDimensionWidth]) +
baselineChild->layout.measuredDimensions[dim[node->style.flexDirection]];
}
return baseline + baselineChild->layout.position[YGEdgeTop]; return baseline + baselineChild->layout.position[YGEdgeTop];
} }
static inline float YGBaselineForNode(const YGNodeRef node, static inline float YGBaselineForNode(const YGNodeRef node, const YGFlexDirection crossAxis) {
const YGFlexDirection crossAxis, float baseline = YGBaselineOfFirstLine(node);
const float parentWidth) {
float baseline = YGBaselineOfFirstLine(node, crossAxis, parentWidth);
if (YGFloatIsUndefined(baseline)) { if (YGFloatIsUndefined(baseline)) {
return node->layout.measuredDimensions[dim[crossAxis]]; return node->layout.measuredDimensions[dim[crossAxis]];
} }
@@ -2527,7 +2516,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
YGNodeMarginForAxis(child, crossAxis, availableInnerWidth)); YGNodeMarginForAxis(child, crossAxis, availableInnerWidth));
} }
if (performLayout && YGNodeAlignItem(node, child) == YGAlignBaseline) { if (performLayout && YGNodeAlignItem(node, child) == YGAlignBaseline) {
const float ascent = YGBaselineForNode(child, crossAxis, availableInnerWidth) + const float ascent = YGBaselineForNode(child, crossAxis) +
YGNodeLeadingMargin(child, crossAxis, availableInnerWidth); YGNodeLeadingMargin(child, crossAxis, availableInnerWidth);
const float descent = child->layout.measuredDimensions[dim[crossAxis]] + const float descent = child->layout.measuredDimensions[dim[crossAxis]] +
YGNodeMarginForAxis(child, crossAxis, availableInnerWidth) - YGNodeMarginForAxis(child, crossAxis, availableInnerWidth) -
@@ -2574,8 +2563,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
} }
case YGAlignBaseline: { case YGAlignBaseline: {
child->layout.position[pos[crossAxis]] = child->layout.position[pos[crossAxis]] =
currentLead + maxAscentForCurrentLine - currentLead + maxAscentForCurrentLine - YGBaselineForNode(child, crossAxis);
YGBaselineForNode(child, crossAxis, availableInnerWidth);
break; break;
} }
case YGAlignAuto: case YGAlignAuto: