diff --git a/ReactCommon/yoga/yoga/Yoga.c b/ReactCommon/yoga/yoga/Yoga.c index ff944368b..9ade2a6ea 100644 --- a/ReactCommon/yoga/yoga/Yoga.c +++ b/ReactCommon/yoga/yoga/Yoga.c @@ -48,6 +48,7 @@ typedef struct YGLayout { float position[4]; float dimensions[2]; float margin[6]; + float border[6]; float padding[6]; YGDirection direction; @@ -596,6 +597,7 @@ YG_NODE_LAYOUT_PROPERTY_IMPL(float, Height, dimensions[YGDimensionHeight]); YG_NODE_LAYOUT_PROPERTY_IMPL(YGDirection, Direction, direction); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Margin, margin); +YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Border, border); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Padding, padding); uint32_t gCurrentGenerationCount = 0; @@ -1764,39 +1766,35 @@ static void YGNodelayoutImpl(const YGNodeRef node, const YGDirection direction = YGNodeResolveDirection(node, parentDirection); node->layout.direction = direction; + const YGFlexDirection flexRowDirection = YGFlexDirectionResolve(YGFlexDirectionRow, direction); + const YGFlexDirection flexColumnDirection = YGFlexDirectionResolve(YGFlexDirectionColumn, direction); + node->layout.margin[YGEdgeStart] = - YGNodeLeadingMargin(node, - YGFlexDirectionResolve(YGFlexDirectionRow, direction), - parentWidth); + YGNodeLeadingMargin(node, flexRowDirection, parentWidth); node->layout.margin[YGEdgeEnd] = - YGNodeTrailingMargin(node, - YGFlexDirectionResolve(YGFlexDirectionRow, direction), - parentWidth); + YGNodeTrailingMargin(node, flexRowDirection, parentWidth); node->layout.margin[YGEdgeTop] = - YGNodeLeadingMargin(node, - YGFlexDirectionResolve(YGFlexDirectionColumn, direction), - parentWidth); + YGNodeLeadingMargin(node, flexColumnDirection, parentWidth); node->layout.margin[YGEdgeBottom] = - YGNodeTrailingMargin(node, - YGFlexDirectionResolve(YGFlexDirectionColumn, direction), - parentWidth); + YGNodeTrailingMargin(node, flexColumnDirection, parentWidth); + + node->layout.border[YGEdgeStart] = + YGNodeLeadingBorder(node, flexRowDirection); + node->layout.border[YGEdgeEnd] = + YGNodeTrailingBorder(node, flexRowDirection); + node->layout.border[YGEdgeTop] = + YGNodeLeadingBorder(node, flexColumnDirection); + node->layout.border[YGEdgeBottom] = + YGNodeTrailingBorder(node, flexColumnDirection); node->layout.padding[YGEdgeStart] = - YGNodeLeadingPadding(node, - YGFlexDirectionResolve(YGFlexDirectionRow, direction), - parentWidth); + YGNodeLeadingPadding(node, flexRowDirection, parentWidth); node->layout.padding[YGEdgeEnd] = - YGNodeTrailingPadding(node, - YGFlexDirectionResolve(YGFlexDirectionRow, direction), - parentWidth); + YGNodeTrailingPadding(node, flexRowDirection, parentWidth); node->layout.padding[YGEdgeTop] = - YGNodeLeadingPadding(node, - YGFlexDirectionResolve(YGFlexDirectionColumn, direction), - parentWidth); + YGNodeLeadingPadding(node, flexColumnDirection, parentWidth); node->layout.padding[YGEdgeBottom] = - YGNodeTrailingPadding(node, - YGFlexDirectionResolve(YGFlexDirectionColumn, direction), - parentWidth); + YGNodeTrailingPadding(node, flexColumnDirection, parentWidth); if (node->measure) { YGNodeWithMeasureFuncSetMeasuredDimensions( diff --git a/ReactCommon/yoga/yoga/Yoga.h b/ReactCommon/yoga/yoga/Yoga.h index 141c9ddcd..e2210f297 100644 --- a/ReactCommon/yoga/yoga/Yoga.h +++ b/ReactCommon/yoga/yoga/Yoga.h @@ -139,6 +139,9 @@ WIN_EXPORT void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode #define YG_NODE_LAYOUT_PROPERTY(type, name) \ WIN_EXPORT type YGNodeLayoutGet##name(const YGNodeRef node); +#define YG_NODE_LAYOUT_EDGE_PROPERTY(type, name) \ + WIN_EXPORT type YGNodeLayoutGet##name(const YGNodeRef node, const YGEdge edge); + YG_NODE_PROPERTY(void *, Context, context); YG_NODE_PROPERTY(YGMeasureFunc, MeasureFunc, measureFunc); YG_NODE_PROPERTY(YGBaselineFunc, BaselineFunc, baselineFunc) @@ -195,12 +198,13 @@ YG_NODE_LAYOUT_PROPERTY(float, Width); YG_NODE_LAYOUT_PROPERTY(float, Height); YG_NODE_LAYOUT_PROPERTY(YGDirection, Direction); -// Get the computed padding for this node after performing layout. If padding was set using -// pixel values then the returned value will be the same as YGNodeStyleGetPadding. However if -// padding was set using a percentage value then the returned value is the computed value used +// Get the computed values for these nodes after performing layout. If they were set using +// pixel values then the returned value will be the same as YGNodeStyleGetXXX. However if +// they were set using a percentage value then the returned value is the computed value used // during layout. -WIN_EXPORT float YGNodeLayoutGetMargin(const YGNodeRef node, const YGEdge edge); -WIN_EXPORT float YGNodeLayoutGetPadding(const YGNodeRef node, const YGEdge edge); +YG_NODE_LAYOUT_EDGE_PROPERTY(float, Margin); +YG_NODE_LAYOUT_EDGE_PROPERTY(float, Border); +YG_NODE_LAYOUT_EDGE_PROPERTY(float, Padding); WIN_EXPORT void YGSetLogger(YGLogger logger); WIN_EXPORT void YGLog(YGLogLevel level, const char *message, ...);