Remove the usage of YGUndefined in the default values of Border in YGStyle

Reviewed By: emilsjolander

Differential Revision: D7195115

fbshipit-source-id: e635cf55ac94d8a90caef6cafce281579da2cbfc
This commit is contained in:
Pritesh Nandgaonkar 2018-03-14 04:17:05 -07:00 committed by Facebook Github Bot
parent 8466db0fd3
commit af4a36337d
5 changed files with 42 additions and 2 deletions

View File

@ -49,3 +49,7 @@ bool YGFloatsEqual(const float a, const float b) {
} }
return YGFloatIsUndefined(a) && YGFloatIsUndefined(b); return YGFloatIsUndefined(a) && YGFloatIsUndefined(b);
} }
float YGFloatSanitize(const float& val) {
return YGFloatIsUndefined(val) ? 0 : val;
}

View File

@ -86,6 +86,9 @@ bool YGFloatArrayEqual(
return areEqual; return areEqual;
} }
// This function returns 0 if YGFloatIsUndefined(val) is true and val otherwise
float YGFloatSanitize(const float& val);
YGFlexDirection YGFlexDirectionCross( YGFlexDirection YGFlexDirectionCross(
const YGFlexDirection flexDirection, const YGFlexDirection flexDirection,
const YGDirection direction); const YGDirection direction);

View File

@ -7,7 +7,7 @@
#include "YGStyle.h" #include "YGStyle.h"
const YGValue kYGValueUndefined = {YGUndefined, YGUnitUndefined}; const YGValue kYGValueUndefined = {0, YGUnitUndefined};
const YGValue kYGValueAuto = {YGUndefined, YGUnitAuto}; const YGValue kYGValueAuto = {YGUndefined, YGUnitAuto};

View File

@ -760,7 +760,35 @@ YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Position, position, position);
YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Margin, margin, margin); YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Margin, margin, margin);
YG_NODE_STYLE_EDGE_PROPERTY_UNIT_AUTO_IMPL(YGValue, Margin, margin); YG_NODE_STYLE_EDGE_PROPERTY_UNIT_AUTO_IMPL(YGValue, Margin, margin);
YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Padding, padding, padding); YG_NODE_STYLE_EDGE_PROPERTY_UNIT_IMPL(YGValue, Padding, padding, padding);
YG_NODE_STYLE_EDGE_PROPERTY_IMPL(float, Border, border, border);
// TODO: Change the API to accept YGFloatOptional.
void YGNodeStyleSetBorder(
const YGNodeRef node,
const YGEdge edge,
const float border) {
YGValue value = {
.value = YGFloatSanitize(border),
.unit = YGFloatIsUndefined(border) ? YGUnitUndefined : YGUnitPoint,
};
if ((node->getStyle().border[edge].value != value.value &&
value.unit != YGUnitUndefined) ||
node->getStyle().border[edge].unit != value.unit) {
YGStyle style = node->getStyle();
style.border[edge] = value;
node->setStyle(style);
node->markDirtyAndPropogate();
}
}
float YGNodeStyleGetBorder(const YGNodeRef node, const YGEdge edge) {
if (node->getStyle().border[edge].unit == YGUnitUndefined) {
// TODO: Rather than returning YGUndefined, change the api to return
// YGFloatOptional.
return YGUndefined;
}
return node->getStyle().border[edge].value;
}
YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL(YGValue, Width, width, dimensions[YGDimensionWidth]); YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL(YGValue, Width, width, dimensions[YGDimensionWidth]);
YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL(YGValue, Height, height, dimensions[YGDimensionHeight]); YG_NODE_STYLE_PROPERTY_UNIT_AUTO_IMPL(YGValue, Height, height, dimensions[YGDimensionHeight]);

View File

@ -42,6 +42,11 @@ typedef struct YGValue {
YGUnit unit; YGUnit unit;
} YGValue; } YGValue;
struct YGFloatOptional {
bool isUndefined;
float value;
};
extern const YGValue YGValueUndefined; extern const YGValue YGValueUndefined;
extern const YGValue YGValueAuto; extern const YGValue YGValueAuto;