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 facebook {
|
||||||
namespace react {
|
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() {
|
ShadowNodeTraits YogaLayoutableShadowNode::BaseTraits() {
|
||||||
auto traits = LayoutableShadowNode::BaseTraits();
|
auto traits = LayoutableShadowNode::BaseTraits();
|
||||||
traits.set(ShadowNodeTraits::Trait::YogaLayoutableKind);
|
traits.set(ShadowNodeTraits::Trait::YogaLayoutableKind);
|
||||||
|
@ -239,25 +256,23 @@ void YogaLayoutableShadowNode::layoutTree(
|
||||||
*/
|
*/
|
||||||
yogaConfig_.pointScaleFactor = layoutContext.pointScaleFactor;
|
yogaConfig_.pointScaleFactor = layoutContext.pointScaleFactor;
|
||||||
|
|
||||||
auto maximumSize = layoutConstraints.maximumSize;
|
applyLayoutConstraints(yogaNode_.getStyle(), layoutConstraints);
|
||||||
auto availableWidth = yogaFloatFromFloat(maximumSize.width);
|
|
||||||
auto availableHeight = yogaFloatFromFloat(maximumSize.height);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
SystraceSection s("YogaLayoutableShadowNode::YGNodeCalculateLayout");
|
SystraceSection s("YogaLayoutableShadowNode::YGNodeCalculateLayout");
|
||||||
|
|
||||||
YGNodeCalculateLayout(
|
YGNodeCalculateLayout(
|
||||||
&yogaNode_, availableWidth, availableHeight, YGDirectionInherit);
|
&yogaNode_, YGUndefined, YGUndefined, YGDirectionInherit);
|
||||||
}
|
}
|
||||||
|
|
||||||
layout(layoutContext);
|
|
||||||
|
|
||||||
if (getHasNewLayout()) {
|
if (getHasNewLayout()) {
|
||||||
auto layoutMetrics = layoutMetricsFromYogaNode(yogaNode_);
|
auto layoutMetrics = layoutMetricsFromYogaNode(yogaNode_);
|
||||||
layoutMetrics.pointScaleFactor = layoutContext.pointScaleFactor;
|
layoutMetrics.pointScaleFactor = layoutContext.pointScaleFactor;
|
||||||
setLayoutMetrics(layoutMetrics);
|
setLayoutMetrics(layoutMetrics);
|
||||||
setHasNewLayout(false);
|
setHasNewLayout(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
layout(layoutContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
void YogaLayoutableShadowNode::layoutChildren(LayoutContext layoutContext) {
|
void YogaLayoutableShadowNode::layoutChildren(LayoutContext layoutContext) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче