Skip to content

Commit 4b4959a

Browse files
priteshrnandgaonkarfacebook-github-bot
authored andcommittedJan 11, 2018
Moved setPosition as a method on YGNode
Reviewed By: emilsjolander Differential Revision: D6683387 fbshipit-source-id: 83f64101faa700933771c69b222056ec2a6b8d1e
1 parent 89c1457 commit 4b4959a

File tree

3 files changed

+55
-50
lines changed

3 files changed

+55
-50
lines changed
 

‎ReactCommon/yoga/yoga/YGNode.cpp

+40
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,46 @@ void YGNode::setLayoutDimension(float dimension, int index) {
326326
layout_.dimensions[index] = dimension;
327327
}
328328

329+
// If both left and right are defined, then use left. Otherwise return
330+
// +left or -right depending on which is defined.
331+
float YGNode::relativePosition(
332+
const YGFlexDirection axis,
333+
const float axisSize) {
334+
return isLeadingPositionDefined(axis) ? getLeadingPosition(axis, axisSize)
335+
: -getTrailingPosition(axis, axisSize);
336+
}
337+
338+
void YGNode::setPosition(
339+
const YGDirection direction,
340+
const float mainSize,
341+
const float crossSize,
342+
const float parentWidth) {
343+
/* Root nodes should be always layouted as LTR, so we don't return negative
344+
* values. */
345+
const YGDirection directionRespectingRoot =
346+
parent_ != nullptr ? direction : YGDirectionLTR;
347+
const YGFlexDirection mainAxis =
348+
YGResolveFlexDirection(style_.flexDirection, directionRespectingRoot);
349+
const YGFlexDirection crossAxis =
350+
YGFlexDirectionCross(mainAxis, directionRespectingRoot);
351+
352+
const float relativePositionMain = relativePosition(mainAxis, mainSize);
353+
const float relativePositionCross = relativePosition(crossAxis, crossSize);
354+
355+
setLayoutPosition(
356+
getLeadingMargin(mainAxis, parentWidth) + relativePositionMain,
357+
leading[mainAxis]);
358+
setLayoutPosition(
359+
getTrailingMargin(mainAxis, parentWidth) + relativePositionMain,
360+
trailing[mainAxis]);
361+
setLayoutPosition(
362+
getLeadingMargin(crossAxis, parentWidth) + relativePositionCross,
363+
leading[crossAxis]);
364+
setLayoutPosition(
365+
getTrailingMargin(crossAxis, parentWidth) + relativePositionCross,
366+
trailing[crossAxis]);
367+
}
368+
329369
YGNode::YGNode()
330370
: context_(nullptr),
331371
print_(nullptr),

‎ReactCommon/yoga/yoga/YGNode.h

+8
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ struct YGNode {
3131
bool isDirty_;
3232
std::array<YGValue, 2> resolvedDimensions_;
3333

34+
float relativePosition(const YGFlexDirection axis, const float axisSize);
35+
3436
public:
3537
YGNode();
3638
~YGNode();
@@ -110,6 +112,12 @@ struct YGNode {
110112
void setLayoutHadOverflow(bool hadOverflow);
111113
void setLayoutDimension(float dimension, int index);
112114

115+
void setPosition(
116+
const YGDirection direction,
117+
const float mainSize,
118+
const float crossSize,
119+
const float parentWidth);
120+
113121
// Other methods
114122
YGValue marginLeadingValue(const YGFlexDirection axis) const;
115123
YGValue marginTrailingValue(const YGFlexDirection axis) const;

‎ReactCommon/yoga/yoga/Yoga.cpp

+7-50
Original file line numberDiff line numberDiff line change
@@ -1020,16 +1020,6 @@ static void YGNodeSetChildTrailingPosition(const YGNodeRef node,
10201020
trailing[axis]);
10211021
}
10221022

1023-
// If both left and right are defined, then use left. Otherwise return
1024-
// +left or -right depending on which is defined.
1025-
static float YGNodeRelativePosition(const YGNodeRef node,
1026-
const YGFlexDirection axis,
1027-
const float axisSize) {
1028-
return node->isLeadingPositionDefined(axis)
1029-
? node->getLeadingPosition(axis, axisSize)
1030-
: -node->getTrailingPosition(axis, axisSize);
1031-
}
1032-
10331023
static void YGConstrainMaxSizeForMode(const YGNodeRef node,
10341024
const enum YGFlexDirection axis,
10351025
const float parentAxisSize,
@@ -1054,35 +1044,6 @@ static void YGConstrainMaxSizeForMode(const YGNodeRef node,
10541044
}
10551045
}
10561046

1057-
static void YGNodeSetPosition(const YGNodeRef node,
1058-
const YGDirection direction,
1059-
const float mainSize,
1060-
const float crossSize,
1061-
const float parentWidth) {
1062-
/* Root nodes should be always layouted as LTR, so we don't return negative values. */
1063-
const YGDirection directionRespectingRoot =
1064-
node->getParent() != nullptr ? direction : YGDirectionLTR;
1065-
const YGFlexDirection mainAxis = YGResolveFlexDirection(
1066-
node->getStyle().flexDirection, directionRespectingRoot);
1067-
const YGFlexDirection crossAxis = YGFlexDirectionCross(mainAxis, directionRespectingRoot);
1068-
1069-
const float relativePositionMain = YGNodeRelativePosition(node, mainAxis, mainSize);
1070-
const float relativePositionCross = YGNodeRelativePosition(node, crossAxis, crossSize);
1071-
1072-
node->setLayoutPosition(
1073-
node->getLeadingMargin(mainAxis, parentWidth) + relativePositionMain,
1074-
leading[mainAxis]);
1075-
node->setLayoutPosition(
1076-
node->getTrailingMargin(mainAxis, parentWidth) + relativePositionMain,
1077-
trailing[mainAxis]);
1078-
node->setLayoutPosition(
1079-
node->getLeadingMargin(crossAxis, parentWidth) + relativePositionCross,
1080-
leading[crossAxis]);
1081-
node->setLayoutPosition(
1082-
node->getTrailingMargin(crossAxis, parentWidth) + relativePositionCross,
1083-
trailing[crossAxis]);
1084-
}
1085-
10861047
static void YGNodeComputeFlexBasisForChild(const YGNodeRef node,
10871048
const YGNodeRef child,
10881049
const float width,
@@ -1887,11 +1848,11 @@ static void YGNodelayoutImpl(const YGNodeRef node,
18871848
if (performLayout) {
18881849
// Set the initial position (relative to the parent).
18891850
const YGDirection childDirection = YGNodeResolveDirection(child, direction);
1890-
YGNodeSetPosition(child,
1891-
childDirection,
1892-
availableInnerMainDim,
1893-
availableInnerCrossDim,
1894-
availableInnerWidth);
1851+
child->setPosition(
1852+
childDirection,
1853+
availableInnerMainDim,
1854+
availableInnerCrossDim,
1855+
availableInnerWidth);
18951856
}
18961857

18971858
// Absolute-positioned children don't participate in flex layout. Add them
@@ -3477,12 +3438,8 @@ void YGNodeCalculateLayout(const YGNodeRef node,
34773438
true,
34783439
"initial",
34793440
node->getConfig())) {
3480-
YGNodeSetPosition(
3481-
node,
3482-
node->getLayout().direction,
3483-
parentWidth,
3484-
parentHeight,
3485-
parentWidth);
3441+
node->setPosition(
3442+
node->getLayout().direction, parentWidth, parentHeight, parentWidth);
34863443
YGRoundToPixelGrid(node, node->getConfig()->pointScaleFactor, 0.0f, 0.0f);
34873444

34883445
if (gPrintTree) {

0 commit comments

Comments
 (0)
Please sign in to comment.