From 8aadae8ce44dc852a5887df60c3b8a3769209039 Mon Sep 17 00:00:00 2001 From: Pritesh Nandgaonkar Date: Wed, 14 Mar 2018 04:17:11 -0700 Subject: [PATCH] Change the type of flexGrow to YGFloatOptional Summary: Change the type of flexGrow to YGFloatOptional Reviewed By: emilsjolander Differential Revision: D7215355 fbshipit-source-id: 1298ee332551d44e4d070169a1e4103d005c4f43 --- yoga/YGNode.cpp | 4 ++-- yoga/YGNodePrint.cpp | 2 +- yoga/YGStyle.cpp | 8 +++++--- yoga/YGStyle.h | 2 +- yoga/Yoga.cpp | 20 +++++++++++++++++--- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index e7b1472a..e3e44e72 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -592,8 +592,8 @@ float YGNode::resolveFlexGrow() { if (parent_ == nullptr) { return 0.0; } - if (!YGFloatIsUndefined(style_.flexGrow)) { - return style_.flexGrow; + if (!style_.flexGrow.isUndefined) { + return style_.flexGrow.value; } if (!style_.flex.isUndefined && style_.flex.value > 0.0f) { return style_.flex.value; diff --git a/yoga/YGNodePrint.cpp b/yoga/YGNodePrint.cpp index 2a7a11df..fd515b51 100644 --- a/yoga/YGNodePrint.cpp +++ b/yoga/YGNodePrint.cpp @@ -161,7 +161,7 @@ void YGNodeToString( appendFormatedString( str, "align-self: %s; ", YGAlignToString(node->getStyle().alignSelf)); } - appendFloatIfNotUndefined(str, "flex-grow", node->getStyle().flexGrow); + appendFloatOptionalIfDefined(str, "flex-grow", node->getStyle().flexGrow); appendFloatIfNotUndefined(str, "flex-shrink", node->getStyle().flexShrink); appendNumberIfNotAuto(str, "flex-basis", node->getStyle().flexBasis); appendFloatOptionalIfDefined(str, "flex", node->getStyle().flex); diff --git a/yoga/YGStyle.cpp b/yoga/YGStyle.cpp index 2ac3da93..d3c18e0e 100644 --- a/yoga/YGStyle.cpp +++ b/yoga/YGStyle.cpp @@ -43,7 +43,7 @@ YGStyle::YGStyle() overflow(YGOverflowVisible), display(YGDisplayFlex), flex(YGFloatOptionalUndefined), - flexGrow(YGUndefined), + flexGrow(YGFloatOptionalUndefined), flexShrink(YGUndefined), flexBasis(kYGValueAuto), margin(kYGDefaultEdgeValuesUnit), @@ -79,9 +79,11 @@ bool YGStyle::operator==(const YGStyle& style) { areNonFloatValuesEqual && flex.value == style.flex.value; } - if (!(YGFloatIsUndefined(flexGrow) && YGFloatIsUndefined(style.flexGrow))) { + areNonFloatValuesEqual = areNonFloatValuesEqual && + flexGrow.isUndefined == style.flexGrow.isUndefined; + if (areNonFloatValuesEqual && !flexGrow.isUndefined) { areNonFloatValuesEqual = - areNonFloatValuesEqual && flexGrow == style.flexGrow; + areNonFloatValuesEqual && flexGrow.value == style.flexGrow.value; } if (!(YGFloatIsUndefined(flexShrink) && diff --git a/yoga/YGStyle.h b/yoga/YGStyle.h index 99e1f18c..0da5b77f 100644 --- a/yoga/YGStyle.h +++ b/yoga/YGStyle.h @@ -21,7 +21,7 @@ struct YGStyle { YGOverflow overflow; YGDisplay display; YGFloatOptional flex; - float flexGrow; + YGFloatOptional flexGrow; float flexShrink; YGValue flexBasis; std::array margin; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bc80a636..fd3a88a2 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -511,9 +511,9 @@ void YGNodeCopyStyle(const YGNodeRef dstNode, const YGNodeRef srcNode) { } float YGNodeStyleGetFlexGrow(const YGNodeRef node) { - return YGFloatIsUndefined(node->getStyle().flexGrow) + return node->getStyle().flexGrow.isUndefined ? kDefaultFlexGrow - : node->getStyle().flexGrow; + : node->getStyle().flexGrow.value; } float YGNodeStyleGetFlexShrink(const YGNodeRef node) { @@ -772,7 +772,21 @@ float YGNodeStyleGetFlex(const YGNodeRef node) { : node->getStyle().flex.value; } -YG_NODE_STYLE_PROPERTY_SETTER_IMPL(float, FlexGrow, flexGrow, flexGrow); +// TODO(T26792433): Change the API to accept YGFloatOptional. +void YGNodeStyleSetFlexGrow(const YGNodeRef node, const float flexGrow) { + if (!YGFloatOptionalFloatEquals(node->getStyle().flexGrow, flexGrow)) { + YGStyle style = node->getStyle(); + if (YGFloatIsUndefined(flexGrow)) { + style.flexGrow = {true, 0}; + } else { + style.flexGrow = {false, flexGrow}; + } + node->setStyle(style); + node->markDirtyAndPropogate(); + } +} + +// YG_NODE_STYLE_PROPERTY_SETTER_IMPL(float, FlexGrow, flexGrow, flexGrow); YG_NODE_STYLE_PROPERTY_SETTER_IMPL(float, FlexShrink, flexShrink, flexShrink); YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL(YGValue, FlexBasis, flexBasis, flexBasis);