Moved margin axis function as a method in YGNode

Summary: Moved margin axis function as a method in YGNode

Reviewed By: emilsjolander

Differential Revision: D6900003

fbshipit-source-id: a42da3bcd3126bf8c432c6740987b5ec0b572172
This commit is contained in:
Pritesh Nandgaonkar
2018-02-06 08:39:53 -08:00
committed by Facebook Github Bot
parent 64f6ea37bd
commit 61afbd43c9
3 changed files with 62 additions and 52 deletions

View File

@@ -167,6 +167,12 @@ float YGNode::getTrailingMargin(
widthSize); widthSize);
} }
float YGNode::getMarginForAxis(
const YGFlexDirection axis,
const float widthSize) {
return getLeadingMargin(axis, widthSize) + getTrailingMargin(axis, widthSize);
}
// Setters // Setters
void YGNode::setContext(void* context) { void YGNode::setContext(void* context) {

View File

@@ -97,6 +97,7 @@ struct YGNode {
float getTrailingPaddingAndBorder( float getTrailingPaddingAndBorder(
const YGFlexDirection axis, const YGFlexDirection axis,
const float widthSize); const float widthSize);
float getMarginForAxis(const YGFlexDirection axis, const float widthSize);
// Setters // Setters
void setContext(void* context); void setContext(void* context);

View File

@@ -797,13 +797,6 @@ static const std::array<YGEdge, 4> pos = {{
static const std::array<YGDimension, 4> dim = { static const std::array<YGDimension, 4> dim = {
{YGDimensionHeight, YGDimensionHeight, YGDimensionWidth, YGDimensionWidth}}; {YGDimensionHeight, YGDimensionHeight, YGDimensionWidth, YGDimensionWidth}};
static inline float YGNodeMarginForAxis(const YGNodeRef node,
const YGFlexDirection axis,
const float widthSize) {
return node->getLeadingMargin(axis, widthSize) +
node->getTrailingMargin(axis, widthSize);
}
static inline float YGNodePaddingAndBorderForAxis(const YGNodeRef node, static inline float YGNodePaddingAndBorderForAxis(const YGNodeRef node,
const YGFlexDirection axis, const YGFlexDirection axis,
const float widthSize) { const float widthSize) {
@@ -970,7 +963,7 @@ static void YGConstrainMaxSizeForMode(const YGNodeRef node,
const float maxSize = const float maxSize =
YGResolveValue( YGResolveValue(
node->getStyle().maxDimensions[dim[axis]], parentAxisSize) + node->getStyle().maxDimensions[dim[axis]], parentAxisSize) +
YGNodeMarginForAxis(node, axis, parentWidth); node->getMarginForAxis(axis, parentWidth);
switch (*mode) { switch (*mode) {
case YGMeasureModeExactly: case YGMeasureModeExactly:
case YGMeasureModeAtMost: case YGMeasureModeAtMost:
@@ -1044,9 +1037,9 @@ static void YGNodeComputeFlexBasisForChild(const YGNodeRef node,
childHeightMeasureMode = YGMeasureModeUndefined; childHeightMeasureMode = YGMeasureModeUndefined;
const float marginRow = const float marginRow =
YGNodeMarginForAxis(child, YGFlexDirectionRow, parentWidth); node->getMarginForAxis(YGFlexDirectionRow, parentWidth);
const float marginColumn = const float marginColumn =
YGNodeMarginForAxis(child, YGFlexDirectionColumn, parentWidth); node->getMarginForAxis(YGFlexDirectionColumn, parentWidth);
if (isRowStyleDimDefined) { if (isRowStyleDimDefined) {
childWidth = childWidth =
@@ -1168,8 +1161,9 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node,
YGMeasureMode childWidthMeasureMode = YGMeasureModeUndefined; YGMeasureMode childWidthMeasureMode = YGMeasureModeUndefined;
YGMeasureMode childHeightMeasureMode = YGMeasureModeUndefined; YGMeasureMode childHeightMeasureMode = YGMeasureModeUndefined;
const float marginRow = YGNodeMarginForAxis(child, YGFlexDirectionRow, width); const float marginRow = child->getMarginForAxis(YGFlexDirectionRow, width);
const float marginColumn = YGNodeMarginForAxis(child, YGFlexDirectionColumn, width); const float marginColumn =
child->getMarginForAxis(YGFlexDirectionColumn, width);
if (YGNodeIsStyleDimDefined(child, YGFlexDirectionRow, width)) { if (YGNodeIsStyleDimDefined(child, YGFlexDirectionRow, width)) {
childWidth = childWidth =
@@ -1251,9 +1245,9 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node,
"abs-measure", "abs-measure",
config); config);
childWidth = child->getLayout().measuredDimensions[YGDimensionWidth] + childWidth = child->getLayout().measuredDimensions[YGDimensionWidth] +
YGNodeMarginForAxis(child, YGFlexDirectionRow, width); child->getMarginForAxis(YGFlexDirectionRow, width);
childHeight = child->getLayout().measuredDimensions[YGDimensionHeight] + childHeight = child->getLayout().measuredDimensions[YGDimensionHeight] +
YGNodeMarginForAxis(child, YGFlexDirectionColumn, width); child->getMarginForAxis(YGFlexDirectionColumn, width);
} }
YGLayoutNodeInternal(child, YGLayoutNodeInternal(child,
@@ -1341,19 +1335,22 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions(const YGNodeRef node,
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, availableWidth); YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, availableWidth);
const float paddingAndBorderAxisColumn = const float paddingAndBorderAxisColumn =
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, availableWidth); YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, availableWidth);
const float marginAxisRow = YGNodeMarginForAxis(node, YGFlexDirectionRow, availableWidth); const float marginAxisRow =
const float marginAxisColumn = YGNodeMarginForAxis(node, YGFlexDirectionColumn, availableWidth); node->getMarginForAxis(YGFlexDirectionRow, availableWidth);
const float marginAxisColumn =
node->getMarginForAxis(YGFlexDirectionColumn, availableWidth);
// We want to make sure we don't call measure with negative size // We want to make sure we don't call measure with negative size
const float innerWidth = YGFloatIsUndefined(availableWidth) const float innerWidth = YGFloatIsUndefined(availableWidth)
? availableWidth ? availableWidth
: fmaxf(0, availableWidth - marginAxisRow - paddingAndBorderAxisRow); : fmaxf(0, availableWidth - marginAxisRow - paddingAndBorderAxisRow);
const float innerHeight = const float innerHeight = YGFloatIsUndefined(availableHeight)
YGFloatIsUndefined(availableHeight)
? availableHeight ? availableHeight
: fmaxf(0, availableHeight - marginAxisColumn - paddingAndBorderAxisColumn); : fmaxf(
0, availableHeight - marginAxisColumn - paddingAndBorderAxisColumn);
if (widthMeasureMode == YGMeasureModeExactly && heightMeasureMode == YGMeasureModeExactly) { if (widthMeasureMode == YGMeasureModeExactly &&
heightMeasureMode == YGMeasureModeExactly) {
// Don't bother sizing the text if both dimensions are already defined. // Don't bother sizing the text if both dimensions are already defined.
node->setLayoutMeasuredDimension( node->setLayoutMeasuredDimension(
YGNodeBoundAxis( YGNodeBoundAxis(
@@ -1415,8 +1412,10 @@ static void YGNodeEmptyContainerSetMeasuredDimensions(const YGNodeRef node,
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, parentWidth); YGNodePaddingAndBorderForAxis(node, YGFlexDirectionRow, parentWidth);
const float paddingAndBorderAxisColumn = const float paddingAndBorderAxisColumn =
YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, parentWidth); YGNodePaddingAndBorderForAxis(node, YGFlexDirectionColumn, parentWidth);
const float marginAxisRow = YGNodeMarginForAxis(node, YGFlexDirectionRow, parentWidth); const float marginAxisRow =
const float marginAxisColumn = YGNodeMarginForAxis(node, YGFlexDirectionColumn, parentWidth); node->getMarginForAxis(YGFlexDirectionRow, parentWidth);
const float marginAxisColumn =
node->getMarginForAxis(YGFlexDirectionColumn, parentWidth);
node->setLayoutMeasuredDimension( node->setLayoutMeasuredDimension(
YGNodeBoundAxis( YGNodeBoundAxis(
@@ -1453,8 +1452,10 @@ static bool YGNodeFixedSizeSetMeasuredDimensions(const YGNodeRef node,
if ((widthMeasureMode == YGMeasureModeAtMost && availableWidth <= 0.0f) || if ((widthMeasureMode == YGMeasureModeAtMost && availableWidth <= 0.0f) ||
(heightMeasureMode == YGMeasureModeAtMost && availableHeight <= 0.0f) || (heightMeasureMode == YGMeasureModeAtMost && availableHeight <= 0.0f) ||
(widthMeasureMode == YGMeasureModeExactly && heightMeasureMode == YGMeasureModeExactly)) { (widthMeasureMode == YGMeasureModeExactly && heightMeasureMode == YGMeasureModeExactly)) {
const float marginAxisColumn = YGNodeMarginForAxis(node, YGFlexDirectionColumn, parentWidth); const float marginAxisColumn =
const float marginAxisRow = YGNodeMarginForAxis(node, YGFlexDirectionRow, parentWidth); node->getMarginForAxis(YGFlexDirectionColumn, parentWidth);
const float marginAxisRow =
node->getMarginForAxis(YGFlexDirectionRow, parentWidth);
node->setLayoutMeasuredDimension( node->setLayoutMeasuredDimension(
YGNodeBoundAxis( YGNodeBoundAxis(
@@ -1508,7 +1509,7 @@ static float YGNodeCalculateAvailableInnerDim(
YGDimension dimension = YGDimension dimension =
YGFlexDirectionIsRow(axis) ? YGDimensionWidth : YGDimensionHeight; YGFlexDirectionIsRow(axis) ? YGDimensionWidth : YGDimensionHeight;
const float margin = YGNodeMarginForAxis(node, direction, parentDim); const float margin = node->getMarginForAxis(direction, parentDim);
const float paddingAndBorder = const float paddingAndBorder =
YGNodePaddingAndBorderForAxis(node, direction, parentDim); YGNodePaddingAndBorderForAxis(node, direction, parentDim);
@@ -1607,8 +1608,7 @@ static void YGNodeComputeFlexBasisForChildren(
} }
totalOuterFlexBasis += child->getLayout().computedFlexBasis + totalOuterFlexBasis += child->getLayout().computedFlexBasis +
YGNodeMarginForAxis(child, mainAxis, availableInnerWidth); child->getMarginForAxis(mainAxis, availableInnerWidth);
;
} }
} }
@@ -1642,7 +1642,7 @@ static YGCollectFlexItemsRowValues YGCalculateCollectFlexItemsRowValues(
} }
child->setLineIndex(lineCount); child->setLineIndex(lineCount);
const float childMarginMainAxis = const float childMarginMainAxis =
YGNodeMarginForAxis(child, mainAxis, availableInnerWidth); child->getMarginForAxis(mainAxis, availableInnerWidth);
const float flexBasisWithMinAndMaxConstraints = const float flexBasisWithMinAndMaxConstraints =
YGNodeBoundAxisWithinMinAndMax( YGNodeBoundAxisWithinMinAndMax(
child, child,
@@ -1769,10 +1769,10 @@ static float YGDistributeFreeSpaceSecondPass(
deltaFreeSpace += updatedMainSize - childFlexBasis; deltaFreeSpace += updatedMainSize - childFlexBasis;
const float marginMain = YGNodeMarginForAxis( const float marginMain =
currentRelativeChild, mainAxis, availableInnerWidth); currentRelativeChild->getMarginForAxis(mainAxis, availableInnerWidth);
const float marginCross = YGNodeMarginForAxis( const float marginCross =
currentRelativeChild, crossAxis, availableInnerWidth); currentRelativeChild->getMarginForAxis(crossAxis, availableInnerWidth);
float childCrossSize; float childCrossSize;
float childMainSize = updatedMainSize + marginMain; float childMainSize = updatedMainSize + marginMain;
@@ -2171,7 +2171,7 @@ static void YGJustifyMainAxis(
// they weren't computed. This means we can't call // they weren't computed. This means we can't call
// YGNodeDimWithMargin. // YGNodeDimWithMargin.
collectedFlexItemsValues.mainDim += betweenMainDim + collectedFlexItemsValues.mainDim += betweenMainDim +
YGNodeMarginForAxis(child, mainAxis, availableInnerWidth) + child->getMarginForAxis(mainAxis, availableInnerWidth) +
childLayout.computedFlexBasis; childLayout.computedFlexBasis;
collectedFlexItemsValues.crossDim = availableInnerCrossDim; collectedFlexItemsValues.crossDim = availableInnerCrossDim;
} else { } else {
@@ -2401,8 +2401,10 @@ static void YGNodelayoutImpl(const YGNodeRef node,
const float paddingAndBorderAxisColumn = const float paddingAndBorderAxisColumn =
isMainAxisRow ? paddingAndBorderAxisCross : paddingAndBorderAxisMain; isMainAxisRow ? paddingAndBorderAxisCross : paddingAndBorderAxisMain;
const float marginAxisRow = YGNodeMarginForAxis(node, YGFlexDirectionRow, parentWidth); const float marginAxisRow =
const float marginAxisColumn = YGNodeMarginForAxis(node, YGFlexDirectionColumn, parentWidth); node->getMarginForAxis(YGFlexDirectionRow, parentWidth);
const float marginAxisColumn =
node->getMarginForAxis(YGFlexDirectionColumn, parentWidth);
const float minInnerWidth = const float minInnerWidth =
YGResolveValue( YGResolveValue(
@@ -2664,14 +2666,14 @@ static void YGNodelayoutImpl(const YGNodeRef node,
child->getLayout().measuredDimensions[dim[mainAxis]]; child->getLayout().measuredDimensions[dim[mainAxis]];
float childCrossSize = float childCrossSize =
!YGFloatIsUndefined(child->getStyle().aspectRatio) !YGFloatIsUndefined(child->getStyle().aspectRatio)
? ((YGNodeMarginForAxis( ? ((child->getMarginForAxis(crossAxis, availableInnerWidth) +
child, crossAxis, availableInnerWidth) +
(isMainAxisRow (isMainAxisRow
? childMainSize / child->getStyle().aspectRatio ? childMainSize / child->getStyle().aspectRatio
: childMainSize * child->getStyle().aspectRatio))) : childMainSize * child->getStyle().aspectRatio)))
: collectedFlexItemsValues.crossDim; : collectedFlexItemsValues.crossDim;
childMainSize += YGNodeMarginForAxis(child, mainAxis, availableInnerWidth); childMainSize +=
child->getMarginForAxis(mainAxis, availableInnerWidth);
YGMeasureMode childMainMeasureMode = YGMeasureModeExactly; YGMeasureMode childMainMeasureMode = YGMeasureModeExactly;
YGMeasureMode childCrossMeasureMode = YGMeasureModeExactly; YGMeasureMode childCrossMeasureMode = YGMeasureModeExactly;
@@ -2808,7 +2810,7 @@ static void YGNodelayoutImpl(const YGNodeRef node,
lineHeight = fmaxf( lineHeight = fmaxf(
lineHeight, lineHeight,
child->getLayout().measuredDimensions[dim[crossAxis]] + child->getLayout().measuredDimensions[dim[crossAxis]] +
YGNodeMarginForAxis(child, crossAxis, availableInnerWidth)); child->getMarginForAxis(crossAxis, availableInnerWidth));
} }
if (YGNodeAlignItem(node, child) == YGAlignBaseline) { if (YGNodeAlignItem(node, child) == YGAlignBaseline) {
const float ascent = YGBaseline(child) + const float ascent = YGBaseline(child) +
@@ -2816,8 +2818,8 @@ static void YGNodelayoutImpl(const YGNodeRef node,
YGFlexDirectionColumn, availableInnerWidth); YGFlexDirectionColumn, availableInnerWidth);
const float descent = const float descent =
child->getLayout().measuredDimensions[YGDimensionHeight] + child->getLayout().measuredDimensions[YGDimensionHeight] +
YGNodeMarginForAxis( child->getMarginForAxis(
child, YGFlexDirectionColumn, availableInnerWidth) - YGFlexDirectionColumn, availableInnerWidth) -
ascent; ascent;
maxAscentForCurrentLine = fmaxf(maxAscentForCurrentLine, ascent); maxAscentForCurrentLine = fmaxf(maxAscentForCurrentLine, ascent);
maxDescentForCurrentLine = fmaxf(maxDescentForCurrentLine, descent); maxDescentForCurrentLine = fmaxf(maxDescentForCurrentLine, descent);
@@ -2873,15 +2875,14 @@ static void YGNodelayoutImpl(const YGNodeRef node,
const float childWidth = isMainAxisRow const float childWidth = isMainAxisRow
? (child->getLayout() ? (child->getLayout()
.measuredDimensions[YGDimensionWidth] + .measuredDimensions[YGDimensionWidth] +
YGNodeMarginForAxis( child->getMarginForAxis(mainAxis, availableInnerWidth))
child, mainAxis, availableInnerWidth))
: lineHeight; : lineHeight;
const float childHeight = !isMainAxisRow const float childHeight = !isMainAxisRow
? (child->getLayout() ? (child->getLayout()
.measuredDimensions[YGDimensionHeight] + .measuredDimensions[YGDimensionHeight] +
YGNodeMarginForAxis( child->getMarginForAxis(
child, crossAxis, availableInnerWidth)) crossAxis, availableInnerWidth))
: lineHeight; : lineHeight;
if (!(YGFloatsEqual( if (!(YGFloatsEqual(
@@ -3251,8 +3252,10 @@ bool YGLayoutNodeInternal(const YGNodeRef node,
// expensive to measure, so it's worth avoiding redundant measurements if at // expensive to measure, so it's worth avoiding redundant measurements if at
// all possible. // all possible.
if (node->getMeasure() != nullptr) { if (node->getMeasure() != nullptr) {
const float marginAxisRow = YGNodeMarginForAxis(node, YGFlexDirectionRow, parentWidth); const float marginAxisRow =
const float marginAxisColumn = YGNodeMarginForAxis(node, YGFlexDirectionColumn, parentWidth); node->getMarginForAxis(YGFlexDirectionRow, parentWidth);
const float marginAxisColumn =
node->getMarginForAxis(YGFlexDirectionColumn, parentWidth);
// First, try to use the layout cache. // First, try to use the layout cache.
if (YGNodeCanUseCachedMeasurement(widthMeasureMode, if (YGNodeCanUseCachedMeasurement(widthMeasureMode,
@@ -3527,7 +3530,7 @@ void YGNodeCalculateLayout(const YGNodeRef node,
width = width =
YGResolveValue( YGResolveValue(
node->getResolvedDimension(dim[YGFlexDirectionRow]), parentWidth) + node->getResolvedDimension(dim[YGFlexDirectionRow]), parentWidth) +
YGNodeMarginForAxis(node, YGFlexDirectionRow, parentWidth); node->getMarginForAxis(YGFlexDirectionRow, parentWidth);
widthMeasureMode = YGMeasureModeExactly; widthMeasureMode = YGMeasureModeExactly;
} else if ( } else if (
YGResolveValue( YGResolveValue(
@@ -3547,7 +3550,7 @@ void YGNodeCalculateLayout(const YGNodeRef node,
height = YGResolveValue( height = YGResolveValue(
node->getResolvedDimension(dim[YGFlexDirectionColumn]), node->getResolvedDimension(dim[YGFlexDirectionColumn]),
parentHeight) + parentHeight) +
YGNodeMarginForAxis(node, YGFlexDirectionColumn, parentWidth); node->getMarginForAxis(YGFlexDirectionColumn, parentWidth);
heightMeasureMode = YGMeasureModeExactly; heightMeasureMode = YGMeasureModeExactly;
} else if ( } else if (
YGResolveValue( YGResolveValue(