UnityEngine.UI.HorizontalOrVerticalLayoutGroup.SetChildrenAlongAxis C# (CSharp) Method

SetChildrenAlongAxis() protected method

Set the positions and sizes of the child layout elements for the given axis.

protected SetChildrenAlongAxis ( int axis, bool isVertical ) : void
axis int The axis to handle. 0 is horizontal and 1 is vertical.
isVertical bool Is this group a vertical group?
return void
        protected void SetChildrenAlongAxis(int axis, bool isVertical)
        {
            float num = base.rectTransform.rect.size[axis];
            bool controlSize = (axis != 0) ? this.m_ChildControlHeight : this.m_ChildControlWidth;
            bool childForceExpand = (axis != 0) ? this.childForceExpandHeight : this.childForceExpandWidth;
            float alignmentOnAxis = base.GetAlignmentOnAxis(axis);
            if (isVertical ^ (axis == 1))
            {
                float num3 = num - ((axis != 0) ? ((float) base.padding.vertical) : ((float) base.padding.horizontal));
                for (int i = 0; i < base.rectChildren.Count; i++)
                {
                    float num5;
                    float num6;
                    float num7;
                    RectTransform child = base.rectChildren[i];
                    this.GetChildSizes(child, axis, controlSize, childForceExpand, out num5, out num6, out num7);
                    float requiredSpaceWithoutPadding = Mathf.Clamp(num3, num5, (num7 <= 0f) ? num6 : num);
                    float startOffset = base.GetStartOffset(axis, requiredSpaceWithoutPadding);
                    if (controlSize)
                    {
                        base.SetChildAlongAxis(child, axis, startOffset, requiredSpaceWithoutPadding);
                    }
                    else
                    {
                        float num10 = (requiredSpaceWithoutPadding - child.sizeDelta[axis]) * alignmentOnAxis;
                        base.SetChildAlongAxis(child, axis, startOffset + num10);
                    }
                }
            }
            else
            {
                float pos = (axis != 0) ? ((float) base.padding.top) : ((float) base.padding.left);
                if ((base.GetTotalFlexibleSize(axis) == 0f) && (base.GetTotalPreferredSize(axis) < num))
                {
                    pos = base.GetStartOffset(axis, base.GetTotalPreferredSize(axis) - ((axis != 0) ? ((float) base.padding.vertical) : ((float) base.padding.horizontal)));
                }
                float t = 0f;
                if (base.GetTotalMinSize(axis) != base.GetTotalPreferredSize(axis))
                {
                    t = Mathf.Clamp01((num - base.GetTotalMinSize(axis)) / (base.GetTotalPreferredSize(axis) - base.GetTotalMinSize(axis)));
                }
                float num13 = 0f;
                if ((num > base.GetTotalPreferredSize(axis)) && (base.GetTotalFlexibleSize(axis) > 0f))
                {
                    num13 = (num - base.GetTotalPreferredSize(axis)) / base.GetTotalFlexibleSize(axis);
                }
                for (int j = 0; j < base.rectChildren.Count; j++)
                {
                    float num15;
                    float num16;
                    float num17;
                    RectTransform transform2 = base.rectChildren[j];
                    this.GetChildSizes(transform2, axis, controlSize, childForceExpand, out num15, out num16, out num17);
                    float size = Mathf.Lerp(num15, num16, t) + (num17 * num13);
                    if (controlSize)
                    {
                        base.SetChildAlongAxis(transform2, axis, pos, size);
                    }
                    else
                    {
                        float num19 = (size - transform2.sizeDelta[axis]) * alignmentOnAxis;
                        base.SetChildAlongAxis(transform2, axis, pos + num19);
                    }
                    pos += size + this.spacing;
                }
            }
        }