Add errata supporting changes to position: static (#1434)

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

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

I will use this errata to gate my changes that actually make position: static behave like the web. We have future plans to make position: relative the default again but users could still have declared certain nodes as position: static, so I think this is needed regardless.

Reviewed By: NickGerleman

Differential Revision: D50506915

fbshipit-source-id: b0d9e6883167de6ff002352c9288053324464cb9
This commit is contained in:
Joe Vilches
2023-10-23 18:20:24 -07:00
committed by Facebook GitHub Bot
parent 6cc9e58246
commit 52ae53a7c8
6 changed files with 11 additions and 1 deletions

View File

@@ -70,6 +70,8 @@ ENUMS = {
("StretchFlexBasis", 1 << 0), ("StretchFlexBasis", 1 << 0),
# Solely uses the flex-direction to determine starting and ending edges # Solely uses the flex-direction to determine starting and ending edges
("StartingEndingEdgeFromFlexDirection", 1 << 1), ("StartingEndingEdgeFromFlexDirection", 1 << 1),
# Position: static behaves like position: relative within Yoga
("PositionStaticBehavesLikeRelative", 1 << 2),
# Enable all incorrect behavior (preserve compatibility) # Enable all incorrect behavior (preserve compatibility)
("All", 0x7FFFFFFF), ("All", 0x7FFFFFFF),
# Enable all errata except for "StretchFlexBasis" (Defaults behavior # Enable all errata except for "StretchFlexBasis" (Defaults behavior

View File

@@ -13,6 +13,7 @@ public enum YogaErrata {
NONE(0), NONE(0),
STRETCH_FLEX_BASIS(1), STRETCH_FLEX_BASIS(1),
STARTING_ENDING_EDGE_FROM_FLEX_DIRECTION(2), STARTING_ENDING_EDGE_FROM_FLEX_DIRECTION(2),
POSITION_STATIC_BEHAVES_LIKE_RELATIVE(4),
ALL(2147483647), ALL(2147483647),
CLASSIC(2147483646); CLASSIC(2147483646);
@@ -31,6 +32,7 @@ public enum YogaErrata {
case 0: return NONE; case 0: return NONE;
case 1: return STRETCH_FLEX_BASIS; case 1: return STRETCH_FLEX_BASIS;
case 2: return STARTING_ENDING_EDGE_FROM_FLEX_DIRECTION; case 2: return STARTING_ENDING_EDGE_FROM_FLEX_DIRECTION;
case 4: return POSITION_STATIC_BEHAVES_LIKE_RELATIVE;
case 2147483647: return ALL; case 2147483647: return ALL;
case 2147483646: return CLASSIC; case 2147483646: return CLASSIC;
default: throw new IllegalArgumentException("Unknown enum value: " + value); default: throw new IllegalArgumentException("Unknown enum value: " + value);

View File

@@ -51,6 +51,7 @@ export enum Errata {
None = 0, None = 0,
StretchFlexBasis = 1, StretchFlexBasis = 1,
StartingEndingEdgeFromFlexDirection = 2, StartingEndingEdgeFromFlexDirection = 2,
PositionStaticBehavesLikeRelative = 4,
All = 2147483647, All = 2147483647,
Classic = 2147483646, Classic = 2147483646,
} }
@@ -162,6 +163,7 @@ const constants = {
ERRATA_NONE: Errata.None, ERRATA_NONE: Errata.None,
ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis, ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,
ERRATA_STARTING_ENDING_EDGE_FROM_FLEX_DIRECTION: Errata.StartingEndingEdgeFromFlexDirection, ERRATA_STARTING_ENDING_EDGE_FROM_FLEX_DIRECTION: Errata.StartingEndingEdgeFromFlexDirection,
ERRATA_POSITION_STATIC_BEHAVES_LIKE_RELATIVE: Errata.PositionStaticBehavesLikeRelative,
ERRATA_ALL: Errata.All, ERRATA_ALL: Errata.All,
ERRATA_CLASSIC: Errata.Classic, ERRATA_CLASSIC: Errata.Classic,
EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis, EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,

View File

@@ -97,6 +97,8 @@ const char* YGErrataToString(const YGErrata value) {
return "stretch-flex-basis"; return "stretch-flex-basis";
case YGErrataStartingEndingEdgeFromFlexDirection: case YGErrataStartingEndingEdgeFromFlexDirection:
return "starting-ending-edge-from-flex-direction"; return "starting-ending-edge-from-flex-direction";
case YGErrataPositionStaticBehavesLikeRelative:
return "position-static-behaves-like-relative";
case YGErrataAll: case YGErrataAll:
return "all"; return "all";
case YGErrataClassic: case YGErrataClassic:

View File

@@ -57,6 +57,7 @@ YG_ENUM_DECL(
YGErrataNone = 0, YGErrataNone = 0,
YGErrataStretchFlexBasis = 1, YGErrataStretchFlexBasis = 1,
YGErrataStartingEndingEdgeFromFlexDirection = 2, YGErrataStartingEndingEdgeFromFlexDirection = 2,
YGErrataPositionStaticBehavesLikeRelative = 4,
YGErrataAll = 2147483647, YGErrataAll = 2147483647,
YGErrataClassic = 2147483646) YGErrataClassic = 2147483646)
YG_DEFINE_ENUM_FLAG_OPERATORS(YGErrata) YG_DEFINE_ENUM_FLAG_OPERATORS(YGErrata)

View File

@@ -19,6 +19,7 @@ enum class Errata : uint32_t {
None = YGErrataNone, None = YGErrataNone,
StretchFlexBasis = YGErrataStretchFlexBasis, StretchFlexBasis = YGErrataStretchFlexBasis,
StartingEndingEdgeFromFlexDirection = YGErrataStartingEndingEdgeFromFlexDirection, StartingEndingEdgeFromFlexDirection = YGErrataStartingEndingEdgeFromFlexDirection,
PositionStaticBehavesLikeRelative = YGErrataPositionStaticBehavesLikeRelative,
All = YGErrataAll, All = YGErrataAll,
Classic = YGErrataClassic, Classic = YGErrataClassic,
}; };
@@ -27,7 +28,7 @@ YG_DEFINE_ENUM_FLAG_OPERATORS(Errata)
template <> template <>
constexpr inline int32_t ordinalCount<Errata>() { constexpr inline int32_t ordinalCount<Errata>() {
return 5; return 6;
} }
template <> template <>