Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,8 @@ - (void)setUp
auto &props = *sharedProps;
props.layoutConstraints = LayoutConstraints{{0, 0}, {500, 500}};
auto &yogaStyle = props.yogaStyle;
yogaStyle.dimensions()[YGDimensionWidth] = YGValue{200, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionHeight] = YGValue{200, YGUnitPoint};
yogaStyle.setDimension(YGDimensionWidth, yoga::CompactValue::of<YGUnitPoint>(200));
yogaStyle.setDimension(YGDimensionHeight, yoga::CompactValue::of<YGUnitPoint>(200));
return sharedProps;
})
.children({
Expand All @@ -136,8 +136,8 @@ - (void)setUp
yogaStyle.positionType() = yoga::PositionType::Absolute;
yogaStyle.position()[YGEdgeLeft] = YGValue{0, YGUnitPoint};
yogaStyle.position()[YGEdgeTop] = YGValue{0, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionWidth] = YGValue{200, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionHeight] = YGValue{20, YGUnitPoint};
yogaStyle.setDimension(YGDimensionWidth, yoga::CompactValue::of<YGUnitPoint>(200));
yogaStyle.setDimension(YGDimensionHeight, yoga::CompactValue::of<YGUnitPoint>(200));
return sharedProps;
})
.children({
Expand Down Expand Up @@ -216,8 +216,8 @@ - (void)setUp
yogaStyle.positionType() = yoga::PositionType::Absolute;
yogaStyle.position()[YGEdgeLeft] = YGValue{0, YGUnitPoint};
yogaStyle.position()[YGEdgeTop] = YGValue{30, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionWidth] = YGValue{200, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionHeight] = YGValue{50, YGUnitPoint};
yogaStyle.setDimension(YGDimensionWidth, yoga::CompactValue::of<YGUnitPoint>(200));
yogaStyle.setDimension(YGDimensionHeight, yoga::CompactValue::of<YGUnitPoint>(50));
return sharedProps;
})
.children({
Expand Down Expand Up @@ -260,8 +260,8 @@ - (void)setUp
yogaStyle.positionType() = yoga::PositionType::Absolute;
yogaStyle.position()[YGEdgeLeft] = YGValue{0, YGUnitPoint};
yogaStyle.position()[YGEdgeTop] = YGValue{90, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionWidth] = YGValue{200, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionHeight] = YGValue{50, YGUnitPoint};
yogaStyle.setDimension(YGDimensionWidth, yoga::CompactValue::of<YGUnitPoint>(200));
yogaStyle.setDimension(YGDimensionHeight, yoga::CompactValue::of<YGUnitPoint>(50));
return sharedProps;
})
.children({
Expand Down Expand Up @@ -418,8 +418,8 @@ - (void)testEntireParagraphLink
auto &props = *sharedProps;
props.layoutConstraints = LayoutConstraints{{0, 0}, {500, 500}};
auto &yogaStyle = props.yogaStyle;
yogaStyle.dimensions()[YGDimensionWidth] = YGValue{200, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionHeight] = YGValue{200, YGUnitPoint};
yogaStyle.setDimension(YGDimensionWidth, yoga::CompactValue::of<YGUnitPoint>(200));
yogaStyle.setDimension(YGDimensionHeight, yoga::CompactValue::of<YGUnitPoint>(200));
return sharedProps;
})
.children({
Expand All @@ -434,8 +434,8 @@ - (void)testEntireParagraphLink
yogaStyle.positionType() = yoga::PositionType::Absolute;
yogaStyle.position()[YGEdgeLeft] = YGValue{0, YGUnitPoint};
yogaStyle.position()[YGEdgeTop] = YGValue{0, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionWidth] = YGValue{200, YGUnitPoint};
yogaStyle.dimensions()[YGDimensionHeight] = YGValue{20, YGUnitPoint};
yogaStyle.setDimension(YGDimensionWidth, yoga::CompactValue::of<YGUnitPoint>(200));
yogaStyle.setDimension(YGDimensionHeight, yoga::CompactValue::of<YGUnitPoint>(20));
return sharedProps;
})
.children({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -532,8 +532,10 @@ void YogaLayoutableShadowNode::setSize(Size size) const {
ensureUnsealed();

auto style = yogaNode_.getStyle();
style.dimensions()[YGDimensionWidth] = yogaStyleValueFromFloat(size.width);
style.dimensions()[YGDimensionHeight] = yogaStyleValueFromFloat(size.height);
style.setDimension(
YGDimensionWidth, yoga::CompactValue::ofMaybe<YGUnitPoint>(size.width));
style.setDimension(
YGDimensionHeight, yoga::CompactValue::ofMaybe<YGUnitPoint>(size.height));
yogaNode_.setStyle(style);
yogaNode_.setDirty(true);
}
Expand All @@ -543,19 +545,23 @@ void YogaLayoutableShadowNode::setPadding(RectangleEdges<Float> padding) const {

auto style = yogaNode_.getStyle();

auto leftPadding = yogaStyleValueFromFloat(padding.left);
auto topPadding = yogaStyleValueFromFloat(padding.top);
auto rightPadding = yogaStyleValueFromFloat(padding.right);
auto bottomPadding = yogaStyleValueFromFloat(padding.bottom);
auto leftPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.left);
auto topPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.top);
auto rightPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.right);
auto bottomPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.bottom);

if (leftPadding != style.padding()[YGEdgeLeft] ||
topPadding != style.padding()[YGEdgeTop] ||
rightPadding != style.padding()[YGEdgeRight] ||
bottomPadding != style.padding()[YGEdgeBottom]) {
style.padding()[YGEdgeTop] = yogaStyleValueFromFloat(padding.top);
style.padding()[YGEdgeLeft] = yogaStyleValueFromFloat(padding.left);
style.padding()[YGEdgeRight] = yogaStyleValueFromFloat(padding.right);
style.padding()[YGEdgeBottom] = yogaStyleValueFromFloat(padding.bottom);
style.padding()[YGEdgeTop] =
yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.top);
style.padding()[YGEdgeLeft] =
yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.left);
style.padding()[YGEdgeRight] =
yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.right);
style.padding()[YGEdgeBottom] =
yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.bottom);
yogaNode_.setStyle(style);
yogaNode_.setDirty(true);
}
Expand Down Expand Up @@ -624,22 +630,21 @@ void YogaLayoutableShadowNode::layoutTree(
auto ownerWidth = yogaFloatFromFloat(maximumSize.width);
auto ownerHeight = yogaFloatFromFloat(maximumSize.height);

yogaStyle.maxDimensions()[YGDimensionWidth] = std::isfinite(maximumSize.width)
? yogaStyleValueFromFloat(maximumSize.width)
: YGValueUndefined;
yogaStyle.setMaxDimension(
YGDimensionWidth,
yoga::CompactValue::ofMaybe<YGUnitPoint>(maximumSize.width));

yogaStyle.maxDimensions()[YGDimensionHeight] =
std::isfinite(maximumSize.height)
? yogaStyleValueFromFloat(maximumSize.height)
: YGValueUndefined;
yogaStyle.setMaxDimension(
YGDimensionHeight,
yoga::CompactValue::ofMaybe<YGUnitPoint>(maximumSize.height));

yogaStyle.minDimensions()[YGDimensionWidth] = minimumSize.width > 0
? yogaStyleValueFromFloat(minimumSize.width)
: YGValueUndefined;
yogaStyle.setMinDimension(
YGDimensionWidth,
yoga::CompactValue::ofMaybe<YGUnitPoint>(minimumSize.width));

yogaStyle.minDimensions()[YGDimensionHeight] = minimumSize.height > 0
? yogaStyleValueFromFloat(minimumSize.height)
: YGValueUndefined;
yogaStyle.setMinDimension(
YGDimensionHeight,
yoga::CompactValue::ofMaybe<YGUnitPoint>(minimumSize.height));

auto direction =
yogaDirectionFromLayoutDirection(layoutConstraints.layoutDirection);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,19 @@ static inline T const getFieldValue(
return; \
}

#define REBUILD_FIELD_YG_DIMENSION(field, widthStr, heightStr) \
REBUILD_YG_FIELD_SWITCH_CASE_INDEXED(field, YGDimensionWidth, widthStr); \
REBUILD_YG_FIELD_SWITCH_CASE_INDEXED(field, YGDimensionHeight, heightStr);
#define REBUILD_YG_FIELD_SWITCH_CASE_INDEXED_SETTER( \
field, setter, index, fieldName) \
case CONSTEXPR_RAW_PROPS_KEY_HASH(fieldName): { \
yogaStyle.setter( \
index, getFieldValue(context, value, ygDefaults.field(index))); \
return; \
}

#define REBUILD_FIELD_YG_DIMENSION(field, setter, widthStr, heightStr) \
REBUILD_YG_FIELD_SWITCH_CASE_INDEXED_SETTER( \
field, setter, YGDimensionWidth, widthStr); \
REBUILD_YG_FIELD_SWITCH_CASE_INDEXED_SETTER( \
field, setter, YGDimensionHeight, heightStr);

#define REBUILD_FIELD_YG_GUTTER(field, rowGapStr, columnGapStr, gapStr) \
REBUILD_YG_FIELD_SWITCH_CASE_INDEXED(field, YGGutterRow, rowGapStr); \
Expand Down Expand Up @@ -242,9 +252,11 @@ void YogaStylableProps::setProp(
REBUILD_FIELD_SWITCH_CASE2(positionType, "position");
REBUILD_FIELD_YG_GUTTER(gap, "rowGap", "columnGap", "gap");
REBUILD_FIELD_SWITCH_CASE_YSP(aspectRatio);
REBUILD_FIELD_YG_DIMENSION(dimensions, "width", "height");
REBUILD_FIELD_YG_DIMENSION(minDimensions, "minWidth", "minHeight");
REBUILD_FIELD_YG_DIMENSION(maxDimensions, "maxWidth", "maxHeight");
REBUILD_FIELD_YG_DIMENSION(dimension, setDimension, "width", "height");
REBUILD_FIELD_YG_DIMENSION(
minDimension, setMinDimension, "minWidth", "minHeight");
REBUILD_FIELD_YG_DIMENSION(
maxDimension, setMaxDimension, "maxWidth", "maxHeight");
REBUILD_FIELD_YG_EDGES_POSITION();
REBUILD_FIELD_YG_EDGES(margin, "margin", "");
REBUILD_FIELD_YG_EDGES(padding, "padding", "");
Expand Down Expand Up @@ -336,15 +348,29 @@ SharedDebugStringConvertibleList YogaStylableProps::getDebugProps() const {
debugStringConvertibleItem(
"border", yogaStyle.border(), defaultYogaStyle.border()),
debugStringConvertibleItem(
"dimensions", yogaStyle.dimensions(), defaultYogaStyle.dimensions()),
"width",
yogaStyle.dimension(YGDimensionWidth),
defaultYogaStyle.dimension(YGDimensionWidth)),
debugStringConvertibleItem(
"height",
yogaStyle.dimension(YGDimensionHeight),
defaultYogaStyle.dimension(YGDimensionHeight)),
debugStringConvertibleItem(
"minWidth",
yogaStyle.minDimension(YGDimensionWidth),
defaultYogaStyle.minDimension(YGDimensionWidth)),
debugStringConvertibleItem(
"minHeight",
yogaStyle.minDimension(YGDimensionHeight),
defaultYogaStyle.minDimension(YGDimensionHeight)),
debugStringConvertibleItem(
"minDimensions",
yogaStyle.minDimensions(),
defaultYogaStyle.minDimensions()),
"maxWidth",
yogaStyle.maxDimension(YGDimensionWidth),
defaultYogaStyle.maxDimension(YGDimensionWidth)),
debugStringConvertibleItem(
"maxDimensions",
yogaStyle.maxDimensions(),
defaultYogaStyle.maxDimensions()),
"maxHeight",
yogaStyle.maxDimension(YGDimensionHeight),
defaultYogaStyle.maxDimension(YGDimensionHeight)),
debugStringConvertibleItem(
"aspectRatio",
yogaStyle.aspectRatio(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,6 @@ inline yoga::FloatOptional yogaOptionalFloatFromFloat(Float value) {
return yoga::FloatOptional((float)value);
}

/*
* `YGValue` <-> `React Native's `Float`
*
* `YGValue` represents optional dimensionful (a real number and some unit, e.g.
* pixels).
*/
inline YGValue yogaStyleValueFromFloat(
const Float& value,
YGUnit unit = YGUnitPoint) {
if (!std::isfinite(value)) {
return YGValueUndefined;
}

return {(float)value, unit};
}

inline std::optional<Float> optionalFloatFromYogaValue(
const YGValue value,
std::optional<Float> base = {}) {
Expand Down Expand Up @@ -409,7 +393,7 @@ inline void fromRawValue(
const RawValue& value,
yoga::Style::ValueRepr& result) {
if (value.hasType<Float>()) {
result = yogaStyleValueFromFloat((Float)value);
result = yoga::CompactValue::ofMaybe<YGUnitPoint>((float)value);
return;
} else if (value.hasType<std::string>()) {
const auto stringValue = (std::string)value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,6 @@ namespace facebook::react {

// Nearly this entire file can be deleted when iterator-style Prop parsing
// ships fully for View
static inline yoga::Style::Dimensions convertRawProp(
const PropsParserContext& context,
const RawProps& rawProps,
const char* widthName,
const char* heightName,
const yoga::Style::Dimensions& sourceValue,
const yoga::Style::Dimensions& defaultValue) {
auto dimensions = defaultValue;
dimensions[YGDimensionWidth] = convertRawProp(
context,
rawProps,
widthName,
sourceValue[YGDimensionWidth],
defaultValue[YGDimensionWidth]);
dimensions[YGDimensionHeight] = convertRawProp(
context,
rawProps,
heightName,
sourceValue[YGDimensionHeight],
defaultValue[YGDimensionHeight]);
return dimensions;
}

static inline yoga::Style::Edges convertRawProp(
const PropsParserContext& context,
Expand Down Expand Up @@ -294,33 +272,65 @@ static inline yoga::Style convertRawProp(
"Width",
sourceValue.border(),
yogaStyle.border());
yogaStyle.dimensions() = convertRawProp(
context,
rawProps,
"width",
"height",
sourceValue.dimensions(),
yogaStyle.dimensions());
yogaStyle.minDimensions() = convertRawProp(
context,
rawProps,
"minWidth",
"minHeight",
sourceValue.minDimensions(),
yogaStyle.minDimensions());
yogaStyle.maxDimensions() = convertRawProp(
context,
rawProps,
"maxWidth",
"maxHeight",
sourceValue.maxDimensions(),
yogaStyle.maxDimensions());

yogaStyle.setDimension(
YGDimensionWidth,
convertRawProp(
context,
rawProps,
"width",
sourceValue.dimension(YGDimensionWidth),
{}));
yogaStyle.setDimension(
YGDimensionHeight,
convertRawProp(
context,
rawProps,
"height",
sourceValue.dimension(YGDimensionHeight),
{}));

yogaStyle.setMinDimension(
YGDimensionWidth,
convertRawProp(
context,
rawProps,
"minWidth",
sourceValue.minDimension(YGDimensionWidth),
{}));
yogaStyle.setMinDimension(
YGDimensionHeight,
convertRawProp(
context,
rawProps,
"minHeight",
sourceValue.minDimension(YGDimensionHeight),
{}));

yogaStyle.setMaxDimension(
YGDimensionWidth,
convertRawProp(
context,
rawProps,
"maxWidth",
sourceValue.maxDimension(YGDimensionWidth),
{}));
yogaStyle.setMaxDimension(
YGDimensionHeight,
convertRawProp(
context,
rawProps,
"maxHeight",
sourceValue.maxDimension(YGDimensionHeight),
{}));

yogaStyle.aspectRatio() = convertRawProp(
context,
rawProps,
"aspectRatio",
sourceValue.aspectRatio(),
yogaStyle.aspectRatio());

return yogaStyle;
}

Expand Down
Loading