diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index 112fa280..90bff5de 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -630,3 +630,18 @@ float YGNode::getTrailingBorder(const YGFlexDirection flexDirection) { ->value, 0.0f); } + +float YGNode::getLeadingPadding( + const YGFlexDirection axis, + const float widthSize) { + if (YGFlexDirectionIsRow(axis) && + style_.padding[YGEdgeStart].unit != YGUnitUndefined && + YGResolveValue(style_.padding[YGEdgeStart], widthSize) >= 0.0f) { + return YGResolveValue(style_.padding[YGEdgeStart], widthSize); + } + return fmaxf( + YGResolveValue( + *YGComputedEdgeValue(style_.padding, leading[axis], &YGValueZero), + widthSize), + 0.0f); +} diff --git a/yoga/YGNode.h b/yoga/YGNode.h index f116c343..29668941 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -79,6 +79,7 @@ struct YGNode { std::array getResolvedDimensions() const; YGValue getResolvedDimension(int index); + // Methods related to positions, margin, padding and border float getLeadingPosition(const YGFlexDirection axis, const float axisSize); bool isLeadingPositionDefined(const YGFlexDirection axis); bool isTrailingPosDefined(const YGFlexDirection axis); @@ -87,6 +88,7 @@ struct YGNode { float getTrailingMargin(const YGFlexDirection axis, const float widthSize); float getLeadingBorder(const YGFlexDirection flexDirection); float getTrailingBorder(const YGFlexDirection flexDirection); + float getLeadingPadding(const YGFlexDirection axis, const float widthSize); // Setters void setContext(void* context); diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 67db51ba..bb162561 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -762,24 +762,6 @@ static const std::array pos = {{ static const std::array dim = { {YGDimensionHeight, YGDimensionHeight, YGDimensionWidth, YGDimensionWidth}}; -static float YGNodeLeadingPadding(const YGNodeRef node, - const YGFlexDirection axis, - const float widthSize) { - if (YGFlexDirectionIsRow(axis) && - node->getStyle().padding[YGEdgeStart].unit != YGUnitUndefined && - YGResolveValue(node->getStyle().padding[YGEdgeStart], widthSize) >= - 0.0f) { - return YGResolveValue(node->getStyle().padding[YGEdgeStart], widthSize); - } - - return fmaxf( - YGResolveValue( - *YGComputedEdgeValue( - node->getStyle().padding, leading[axis], &YGValueZero), - widthSize), - 0.0f); -} - static float YGNodeTrailingPadding(const YGNodeRef node, const YGFlexDirection axis, const float widthSize) { @@ -801,7 +783,7 @@ static inline float YGNodeLeadingPaddingAndBorder( const YGNodeRef node, const YGFlexDirection axis, const float widthSize) { - return YGNodeLeadingPadding(node, axis, widthSize) + + return node->getLeadingPadding(axis, widthSize) + node->getLeadingBorder(axis); } @@ -1757,11 +1739,11 @@ static void YGNodelayoutImpl(const YGNodeRef node, node->getTrailingBorder(flexColumnDirection), YGEdgeBottom); node->setLayoutPadding( - YGNodeLeadingPadding(node, flexRowDirection, parentWidth), YGEdgeStart); + node->getLeadingPadding(flexRowDirection, parentWidth), YGEdgeStart); node->setLayoutPadding( YGNodeTrailingPadding(node, flexRowDirection, parentWidth), YGEdgeEnd); node->setLayoutPadding( - YGNodeLeadingPadding(node, flexColumnDirection, parentWidth), YGEdgeTop); + node->getLeadingPadding(flexColumnDirection, parentWidth), YGEdgeTop); node->setLayoutPadding( YGNodeTrailingPadding(node, flexColumnDirection, parentWidth), YGEdgeBottom);