Use containing block to adjust absolute child position (#1472)
Summary: X-link: https://github.com/facebook/react-native/pull/41490 Pull Request resolved: https://github.com/facebook/yoga/pull/1472 This change has most of the logic needed for supporting `position: static`. We do two things here that fix a lot of the broken static test: 1) We pass in the containing node to `layoutAbsoluteChild` and use it to properly position the child in the case that insets are defined. 2) We rewrite the absolute child's position to be relative to it's parent in the event that insets are defined for that child (and thus it is positioned relative to its CB). Yoga's layout position has always be relative to parent, so I feel it is easier to just adjust the coordinates of a node to adhere to that design rather than change the consumers of yoga. The "hard" part of this algorithm is determining how to iterate the offset from the containing block needed to do this translation described above. That is handled in `layoutAbsoluteDescendants`. Reviewed By: NickGerleman Differential Revision: D51224327 fbshipit-source-id: ae6dc54fe2a71bebb4090ba21a0afb0125264cbc
This commit is contained in:
committed by
Facebook GitHub Bot
parent
2222c2c475
commit
e042cb102c
@@ -231,6 +231,22 @@ class YG_EXPORT Style {
|
||||
}
|
||||
}
|
||||
|
||||
bool horizontalInsetsDefined() const {
|
||||
return position_[YGEdge::YGEdgeLeft].isDefined() ||
|
||||
position_[YGEdge::YGEdgeRight].isDefined() ||
|
||||
position_[YGEdge::YGEdgeAll].isDefined() ||
|
||||
position_[YGEdge::YGEdgeHorizontal].isDefined() ||
|
||||
position_[YGEdge::YGEdgeStart].isDefined() ||
|
||||
position_[YGEdge::YGEdgeEnd].isDefined();
|
||||
}
|
||||
|
||||
bool verticalInsetsDefined() const {
|
||||
return position_[YGEdge::YGEdgeTop].isDefined() ||
|
||||
position_[YGEdge::YGEdgeBottom].isDefined() ||
|
||||
position_[YGEdge::YGEdgeAll].isDefined() ||
|
||||
position_[YGEdge::YGEdgeVertical].isDefined();
|
||||
}
|
||||
|
||||
bool operator==(const Style& other) const {
|
||||
return direction_ == other.direction_ &&
|
||||
flexDirection_ == other.flexDirection_ &&
|
||||
|
Reference in New Issue
Block a user