From 476ab7481e23070fc4db3f584e45a95eb2f9f7e1 Mon Sep 17 00:00:00 2001 From: Valentin Shergin Date: Sun, 26 Jul 2020 22:03:48 -0700 Subject: [PATCH] Fabric: Enable zIndex only for non-`static` positioned views Summary: The standard says that zIndex should only be defined for non-`static` positioned views. This diff implements it. For now, it actually enables zIndex for all views in RN because there is no way to specify `position: static` but will will give that ability by changing Flow definitions in future diffs in a couple of weeks (to ensure OTA safety). Changelog: [Internal] Fabric-specific internal change. Reviewed By: sammy-SC Differential Revision: D22098586 fbshipit-source-id: 77dacbee0fe887f667ba81640b8bd759e1df11fd --- .../fabric/components/view/ConcreteViewShadowNode.h | 9 +++++++-- ReactCommon/fabric/components/view/ViewShadowNode.cpp | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ReactCommon/fabric/components/view/ConcreteViewShadowNode.h b/ReactCommon/fabric/components/view/ConcreteViewShadowNode.h index 8454d2dd7c1..7c090491000 100644 --- a/ReactCommon/fabric/components/view/ConcreteViewShadowNode.h +++ b/ReactCommon/fabric/components/view/ConcreteViewShadowNode.h @@ -105,13 +105,18 @@ class ConcreteViewShadowNode : public ConcreteShadowNode< void initialize() noexcept { auto &props = BaseShadowNode::getConcreteProps(); - BaseShadowNode::orderIndex_ = props.zIndex.value_or(0); - if (props.yogaStyle.display() == YGDisplayNone) { BaseShadowNode::traits_.set(ShadowNodeTraits::Trait::Hidden); } else { BaseShadowNode::traits_.unset(ShadowNodeTraits::Trait::Hidden); } + + // `zIndex` is only defined for non-`static` positioned views. + if (props.yogaStyle.positionType() != YGPositionTypeStatic) { + BaseShadowNode::orderIndex_ = props.zIndex.value_or(0); + } else { + BaseShadowNode::orderIndex_ = 0; + } } }; diff --git a/ReactCommon/fabric/components/view/ViewShadowNode.cpp b/ReactCommon/fabric/components/view/ViewShadowNode.cpp index 9a0ee18d462..060de546cba 100644 --- a/ReactCommon/fabric/components/view/ViewShadowNode.cpp +++ b/ReactCommon/fabric/components/view/ViewShadowNode.cpp @@ -45,7 +45,7 @@ void ViewShadowNode::initialize() noexcept { viewProps.opacity != 1.0 || viewProps.transform != Transform{} || viewProps.elevation != 0 || (viewProps.zIndex.has_value() && - viewProps.yogaStyle.positionType() == YGPositionTypeAbsolute) || + viewProps.yogaStyle.positionType() != YGPositionTypeStatic) || viewProps.yogaStyle.display() == YGDisplayNone || viewProps.getClipsContentToBounds() || isColorMeaningful(viewProps.shadowColor) ||