Beispiel #1
0
        protected override void performLayout()
        {
            base.performLayout();

            RenderBox    child    = this.firstChild;
            List <float> xOffsets = new List <float>();

            while (child != null)
            {
                FlexParentData childParentData = (FlexParentData)child.parentData;
                xOffsets.Add(childParentData.offset.dx);
                D.assert(child.parentData == childParentData);
                child = childParentData.nextSibling;
            }

            xOffsets.Add(this.size.width);
            this.onPerformLayout(xOffsets, this.size.width);
        }
Beispiel #2
0
        protected override void performLayout()
        {
            _hasCheckedLayoutWidth = false;

            base.performLayout();
            _hasCheckedLayoutWidth = true;

            if (size.width <= constraints.maxWidth)
            {
                base.performLayout();
            }
            else
            {
                BoxConstraints childConstraints = constraints.copyWith(minWidth: 0.0f);
                RenderBox      child            = null;
                float          currentHeight    = 0.0f;
                switch (verticalDirection)
                {
                case VerticalDirection.down:
                    child = firstChild;
                    break;

                case VerticalDirection.up:
                    child = lastChild;
                    break;
                }

                while (child != null)
                {
                    FlexParentData childParentData = child.parentData as FlexParentData;

                    child.layout(childConstraints, parentUsesSize: true);

                    switch (textDirection)
                    {
                    case TextDirection.ltr:
                        switch (mainAxisAlignment)
                        {
                        case MainAxisAlignment.center:
                            float midpoint = (constraints.maxWidth - child.size.width) / 2.0f;
                            childParentData.offset = new Offset(midpoint, currentHeight);
                            break;

                        case MainAxisAlignment.end:
                            childParentData.offset = new Offset(constraints.maxWidth - child.size.width,
                                                                currentHeight);
                            break;

                        default:
                            childParentData.offset = new Offset(0, currentHeight);
                            break;
                        }

                        break;

                    case TextDirection.rtl:
                        switch (mainAxisAlignment)
                        {
                        case MainAxisAlignment.center:
                            float midpoint = constraints.maxWidth / 2.0f - child.size.width / 2.0f;
                            childParentData.offset = new Offset(midpoint, currentHeight);
                            break;

                        case MainAxisAlignment.end:
                            childParentData.offset = new Offset(0, currentHeight);
                            break;

                        default:
                            childParentData.offset = new Offset(constraints.maxWidth - child.size.width,
                                                                currentHeight);
                            break;
                        }

                        break;
                    }

                    currentHeight += child.size.height;
                    switch (verticalDirection)
                    {
                    case VerticalDirection.down:
                        child = childParentData.nextSibling;
                        break;

                    case VerticalDirection.up:
                        child = childParentData.previousSibling;
                        break;
                    }

                    if (overflowButtonSpacing != null && child != null)
                    {
                        currentHeight += overflowButtonSpacing ?? 0;
                    }
                }

                size = constraints.constrain(new Size(constraints.maxWidth, currentHeight));
            }
        }