Fabric: Proper way to specity layout constraints for root Yoga node
Summary: This diff changes how we apply layout constraints to a root node before layout. We previously used two arguments of `YGNodeCalculateLayout` but that's not expressive enough in cases we have min & max sizes. Changelog: [Internal] Fabric-specific internal change. Reviewed By: JoshuaGross, sammy-SC Differential Revision: D20268051 fbshipit-source-id: 85aaae65326432993296c3cbc9f7fb8919b07386
This commit is contained in:
Родитель
0d33cdf146
Коммит
02f2c81240
|
@ -21,6 +21,23 @@
|
|||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
static void applyLayoutConstraints(
|
||||
YGStyle &yogaStyle,
|
||||
LayoutConstraints const &layoutConstraints) {
|
||||
yogaStyle.minDimensions()[YGDimensionWidth] =
|
||||
yogaStyleValueFromFloat(layoutConstraints.minimumSize.width);
|
||||
yogaStyle.minDimensions()[YGDimensionHeight] =
|
||||
yogaStyleValueFromFloat(layoutConstraints.minimumSize.height);
|
||||
|
||||
yogaStyle.maxDimensions()[YGDimensionWidth] =
|
||||
yogaStyleValueFromFloat(layoutConstraints.maximumSize.width);
|
||||
yogaStyle.maxDimensions()[YGDimensionHeight] =
|
||||
yogaStyleValueFromFloat(layoutConstraints.maximumSize.height);
|
||||
|
||||
yogaStyle.direction() =
|
||||
yogaDirectionFromLayoutDirection(layoutConstraints.layoutDirection);
|
||||
}
|
||||
|
||||
ShadowNodeTraits YogaLayoutableShadowNode::BaseTraits() {
|
||||
auto traits = LayoutableShadowNode::BaseTraits();
|
||||
traits.set(ShadowNodeTraits::Trait::YogaLayoutableKind);
|
||||
|
@ -239,25 +256,23 @@ void YogaLayoutableShadowNode::layoutTree(
|
|||
*/
|
||||
yogaConfig_.pointScaleFactor = layoutContext.pointScaleFactor;
|
||||
|
||||
auto maximumSize = layoutConstraints.maximumSize;
|
||||
auto availableWidth = yogaFloatFromFloat(maximumSize.width);
|
||||
auto availableHeight = yogaFloatFromFloat(maximumSize.height);
|
||||
applyLayoutConstraints(yogaNode_.getStyle(), layoutConstraints);
|
||||
|
||||
{
|
||||
SystraceSection s("YogaLayoutableShadowNode::YGNodeCalculateLayout");
|
||||
|
||||
YGNodeCalculateLayout(
|
||||
&yogaNode_, availableWidth, availableHeight, YGDirectionInherit);
|
||||
&yogaNode_, YGUndefined, YGUndefined, YGDirectionInherit);
|
||||
}
|
||||
|
||||
layout(layoutContext);
|
||||
|
||||
if (getHasNewLayout()) {
|
||||
auto layoutMetrics = layoutMetricsFromYogaNode(yogaNode_);
|
||||
layoutMetrics.pointScaleFactor = layoutContext.pointScaleFactor;
|
||||
setLayoutMetrics(layoutMetrics);
|
||||
setHasNewLayout(false);
|
||||
}
|
||||
|
||||
layout(layoutContext);
|
||||
}
|
||||
|
||||
void YogaLayoutableShadowNode::layoutChildren(LayoutContext layoutContext) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче