Refactored relativePosition private method to YGFloatOptional return type

Summary: Refactored relativePosition private method to YGFloatOptional return type

Reviewed By: emilsjolander

Differential Revision: D7344939

fbshipit-source-id: 72443d38426a211d3e84be814e6a61baf4d26703
This commit is contained in:
Pritesh Nandgaonkar
2018-04-04 07:55:46 -07:00
committed by Facebook Github Bot
parent 2b714a5b5d
commit b725a4a140
2 changed files with 31 additions and 17 deletions

View File

@@ -123,7 +123,7 @@ YGFloatOptional YGNode::getTrailingPosition(
: YGResolveValue(*trailingPosition, axisSize); : YGResolveValue(*trailingPosition, axisSize);
} }
bool YGNode::isLeadingPositionDefined(const YGFlexDirection axis) const { bool YGNode::isLeadingPositionDefined(const YGFlexDirection& axis) const {
return (YGFlexDirectionIsRow(axis) && return (YGFlexDirectionIsRow(axis) &&
YGComputedEdgeValue(style_.position, YGEdgeStart, &YGValueUndefined) YGComputedEdgeValue(style_.position, YGEdgeStart, &YGValueUndefined)
->unit != YGUnitUndefined) || ->unit != YGUnitUndefined) ||
@@ -131,7 +131,7 @@ bool YGNode::isLeadingPositionDefined(const YGFlexDirection axis) const {
->unit != YGUnitUndefined; ->unit != YGUnitUndefined;
} }
bool YGNode::isTrailingPosDefined(const YGFlexDirection axis) const { bool YGNode::isTrailingPosDefined(const YGFlexDirection& axis) const {
return (YGFlexDirectionIsRow(axis) && return (YGFlexDirectionIsRow(axis) &&
YGComputedEdgeValue(style_.position, YGEdgeEnd, &YGValueUndefined) YGComputedEdgeValue(style_.position, YGEdgeEnd, &YGValueUndefined)
->unit != YGUnitUndefined) || ->unit != YGUnitUndefined) ||
@@ -340,12 +340,18 @@ void YGNode::setLayoutDimension(float dimension, int index) {
// If both left and right are defined, then use left. Otherwise return // If both left and right are defined, then use left. Otherwise return
// +left or -right depending on which is defined. // +left or -right depending on which is defined.
float YGNode::relativePosition( YGFloatOptional YGNode::relativePosition(
const YGFlexDirection axis, const YGFlexDirection& axis,
const float axisSize) { const float& axisSize) const {
return isLeadingPositionDefined(axis) if (isLeadingPositionDefined(axis)) {
? YGUnwrapFloatOptional(getLeadingPosition(axis, axisSize)) return getLeadingPosition(axis, axisSize);
: -YGUnwrapFloatOptional(getTrailingPosition(axis, axisSize)); }
YGFloatOptional trailingPosition = getTrailingPosition(axis, axisSize);
if (!trailingPosition.isUndefined()) {
trailingPosition.setValue(-1 * trailingPosition.getValue());
}
return trailingPosition;
} }
void YGNode::setPosition( void YGNode::setPosition(
@@ -362,20 +368,26 @@ void YGNode::setPosition(
const YGFlexDirection crossAxis = const YGFlexDirection crossAxis =
YGFlexDirectionCross(mainAxis, directionRespectingRoot); YGFlexDirectionCross(mainAxis, directionRespectingRoot);
const float relativePositionMain = relativePosition(mainAxis, mainSize); const YGFloatOptional relativePositionMain =
const float relativePositionCross = relativePosition(crossAxis, crossSize); relativePosition(mainAxis, mainSize);
const YGFloatOptional relativePositionCross =
relativePosition(crossAxis, crossSize);
setLayoutPosition( setLayoutPosition(
getLeadingMargin(mainAxis, ownerWidth) + relativePositionMain, getLeadingMargin(mainAxis, ownerWidth) +
YGUnwrapFloatOptional(relativePositionMain),
leading[mainAxis]); leading[mainAxis]);
setLayoutPosition( setLayoutPosition(
getTrailingMargin(mainAxis, ownerWidth) + relativePositionMain, getTrailingMargin(mainAxis, ownerWidth) +
YGUnwrapFloatOptional(relativePositionMain),
trailing[mainAxis]); trailing[mainAxis]);
setLayoutPosition( setLayoutPosition(
getLeadingMargin(crossAxis, ownerWidth) + relativePositionCross, getLeadingMargin(crossAxis, ownerWidth) +
YGUnwrapFloatOptional(relativePositionCross),
leading[crossAxis]); leading[crossAxis]);
setLayoutPosition( setLayoutPosition(
getTrailingMargin(crossAxis, ownerWidth) + relativePositionCross, getTrailingMargin(crossAxis, ownerWidth) +
YGUnwrapFloatOptional(relativePositionCross),
trailing[crossAxis]); trailing[crossAxis]);
} }

View File

@@ -30,7 +30,9 @@ struct YGNode {
bool isDirty_; bool isDirty_;
std::array<YGValue, 2> resolvedDimensions_; std::array<YGValue, 2> resolvedDimensions_;
float relativePosition(const YGFlexDirection axis, const float axisSize); YGFloatOptional relativePosition(
const YGFlexDirection& axis,
const float& axisSize) const;
public: public:
YGNode(); YGNode();
@@ -87,8 +89,8 @@ struct YGNode {
// Methods related to positions, margin, padding and border // Methods related to positions, margin, padding and border
YGFloatOptional getLeadingPosition(const YGFlexDirection& axis, YGFloatOptional getLeadingPosition(const YGFlexDirection& axis,
const float& axisSize) const; const float& axisSize) const;
bool isLeadingPositionDefined(const YGFlexDirection axis) const; bool isLeadingPositionDefined(const YGFlexDirection& axis) const;
bool isTrailingPosDefined(const YGFlexDirection axis) const; bool isTrailingPosDefined(const YGFlexDirection& axis) const;
YGFloatOptional getTrailingPosition( YGFloatOptional getTrailingPosition(
const YGFlexDirection& axis, const YGFlexDirection& axis,
const float& axisSize) const; const float& axisSize) const;