diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h index 58a898fb102..24b75a79942 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h @@ -98,6 +98,18 @@ inline std::optional optionalFloatFromYogaValue( } } +static inline PositionType positionTypeFromYogaPositionType( + yoga::PositionType positionType) { + switch (positionType) { + case yoga::PositionType::Static: + return PositionType::Static; + case yoga::PositionType::Relative: + return PositionType::Relative; + case yoga::PositionType::Absolute: + return PositionType::Absolute; + } +} + inline LayoutMetrics layoutMetricsFromYogaNode(yoga::Node& yogaNode) { auto layoutMetrics = LayoutMetrics{}; @@ -129,6 +141,9 @@ inline LayoutMetrics layoutMetricsFromYogaNode(yoga::Node& yogaNode) { yogaNode.getStyle().display() == yoga::Display::None ? DisplayType::None : DisplayType::Flex; + layoutMetrics.positionType = + positionTypeFromYogaPositionType(yogaNode.getStyle().positionType()); + layoutMetrics.layoutDirection = YGNodeLayoutGetDirection(&yogaNode) == YGDirectionRTL ? LayoutDirection::RightToLeft diff --git a/packages/react-native/ReactCommon/react/renderer/core/LayoutMetrics.h b/packages/react-native/ReactCommon/react/renderer/core/LayoutMetrics.h index 4c1362f6355..1541e270d07 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/LayoutMetrics.h +++ b/packages/react-native/ReactCommon/react/renderer/core/LayoutMetrics.h @@ -29,6 +29,8 @@ struct LayoutMetrics { EdgeInsets borderWidth{0}; // See `DisplayType` for all possible options. DisplayType displayType{DisplayType::Flex}; + // See `PositionType` for all possible options. + PositionType positionType{PositionType::Static}; // See `LayoutDirection` for all possible options. LayoutDirection layoutDirection{LayoutDirection::Undefined}; // Whether React Native treated cardinal directions as flow-relative diff --git a/packages/react-native/ReactCommon/react/renderer/core/LayoutPrimitives.h b/packages/react-native/ReactCommon/react/renderer/core/LayoutPrimitives.h index f38c74feb8a..45ab223faba 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/LayoutPrimitives.h +++ b/packages/react-native/ReactCommon/react/renderer/core/LayoutPrimitives.h @@ -22,6 +22,12 @@ enum class DisplayType { Inline = 2, }; +enum class PositionType { + Static = 0, + Relative = 1, + Absolute = 2, +}; + /* * User interface layout direction. */