Remove usage of Dimension arrays and YGDimension as index (#1402)

Summary:
Pull Request resolved: https://github.com/facebook/yoga/pull/1402

X-link: https://github.com/facebook/react-native/pull/39567

This change hides away most usages of YGDimension as an index. We do this for a couple reasons:

1. Right now the style interface may return a full array of resolved edge or dimension values, as a CompactValue. As we abstract away from CompactValue, and move towards ValuePool, this will no longer be the internal interface, and cheap to return. We instead change the interface to return a single value at once, which lets us resolve values lazily.

2. As we move internal usage to scoped enums, enums are not implicitly convertible to intergers (broadly a good thing). Hiding the enum as index prevents the need for callers to cast or convert to underlying.

Instead of making a new version of `IdxRef` for this, I converted to a more traditional setter. I will be making similar changes later for other styles, when I hide CompactValue from the public interface.

To review I would recommend filtering to changes in `xplat`, or viewing this in a single one of the OSS PRs exported. Everything apart from the below 20 files is a mirror.

{F1096792573}

Changelog: [Internal]

Reviewed By: javache

Differential Revision: D49362819

fbshipit-source-id: 30d730d78e62f36597d43f477120f65694e51ea3
This commit is contained in:
Nick Gerleman
2023-09-20 16:19:59 -07:00
committed by Facebook GitHub Bot
parent 81754d8cb2
commit 83705c2942
14 changed files with 220 additions and 259 deletions

View File

@@ -127,9 +127,9 @@ void nodeToString(
if ((options & PrintOptions::Layout) == PrintOptions::Layout) {
appendFormattedString(str, "layout=\"");
appendFormattedString(
str, "width: %g; ", node->getLayout().dimensions[YGDimensionWidth]);
str, "width: %g; ", node->getLayout().dimension(YGDimensionWidth));
appendFormattedString(
str, "height: %g; ", node->getLayout().dimensions[YGDimensionHeight]);
str, "height: %g; ", node->getLayout().dimension(YGDimensionHeight));
appendFormattedString(
str, "top: %g; ", node->getLayout().position[YGEdgeTop]);
appendFormattedString(
@@ -193,16 +193,16 @@ void nodeToString(
appendNumberIfNotUndefined(str, "row-gap", style.gap()[YGGutterRow]);
}
appendNumberIfNotAuto(str, "width", style.dimensions()[YGDimensionWidth]);
appendNumberIfNotAuto(str, "height", style.dimensions()[YGDimensionHeight]);
appendNumberIfNotAuto(str, "width", style.dimension(YGDimensionWidth));
appendNumberIfNotAuto(str, "height", style.dimension(YGDimensionHeight));
appendNumberIfNotAuto(
str, "max-width", style.maxDimensions()[YGDimensionWidth]);
str, "max-width", style.maxDimension(YGDimensionWidth));
appendNumberIfNotAuto(
str, "max-height", style.maxDimensions()[YGDimensionHeight]);
str, "max-height", style.maxDimension(YGDimensionHeight));
appendNumberIfNotAuto(
str, "min-width", style.minDimensions()[YGDimensionWidth]);
str, "min-width", style.minDimension(YGDimensionWidth));
appendNumberIfNotAuto(
str, "min-height", style.minDimensions()[YGDimensionHeight]);
str, "min-height", style.minDimension(YGDimensionHeight));
if (style.positionType() != yoga::Node{}.getStyle().positionType()) {
appendFormattedString(