private Size xLayoutRow(ContainerProxy containerProxy, ElementProxy elementProxy, int startIndex, int endIndex, Rectangle rowBounds, out int breakIndex, bool measureOnly) { Point location = rowBounds.Location; Size empty = Size.Empty; int num = 0; breakIndex = startIndex; bool wrapContents = GetWrapContents(containerProxy.Container); bool flag2 = false; ArrangedElementCollection children = containerProxy.Container.Children; int num2 = startIndex; while (num2 < endIndex) { elementProxy.Element = children[num2]; if (elementProxy.ParticipatesInLayout) { Size preferredSize; if (elementProxy.AutoSize) { Size b = new Size(0x7fffffff, rowBounds.Height - elementProxy.Margin.Size.Height); if (num2 == startIndex) { b.Width = (rowBounds.Width - empty.Width) - elementProxy.Margin.Size.Width; } b = LayoutUtils.UnionSizes(new Size(1, 1), b); preferredSize = elementProxy.GetPreferredSize(b); } else { preferredSize = elementProxy.SpecifiedSize; if (elementProxy.Stretches) { preferredSize.Height = 0; } if (preferredSize.Height < elementProxy.MinimumSize.Height) { preferredSize.Height = elementProxy.MinimumSize.Height; } } Size size4 = preferredSize + elementProxy.Margin.Size; if (!measureOnly) { Rectangle rect = new Rectangle(location, new Size(size4.Width, rowBounds.Height)); rect = LayoutUtils.DeflateRect(rect, elementProxy.Margin); AnchorStyles anchorStyles = elementProxy.AnchorStyles; containerProxy.Bounds = LayoutUtils.AlignAndStretch(preferredSize, rect, anchorStyles); } location.X += size4.Width; if ((num > 0) && (location.X > rowBounds.Right)) { return(empty); } empty.Width = location.X - rowBounds.X; empty.Height = Math.Max(empty.Height, size4.Height); if (wrapContents) { if (flag2) { return(empty); } if (((num2 + 1) < endIndex) && CommonProperties.GetFlowBreak(elementProxy.Element)) { if (num == 0) { flag2 = true; } else { breakIndex++; return(empty); } } } num++; } num2++; breakIndex++; } return(empty); }
public bool GetFlowBreak(object child) { IArrangedElement element = FlowLayout.Instance.CastToArrangedElement(child); return(CommonProperties.GetFlowBreak(element)); }