protected override Size ArrangeOverride(Size finalSize) { var orientation = this.Orientation; var orientedSize = new OrientedSize(orientation); var orientedSize2 = new OrientedSize(orientation, finalSize.Width, finalSize.Height); var itemWidth = this.ItemWidth; var itemHeight = this.ItemHeight; var flag = !itemWidth.IsNaN(); var flag2 = !itemHeight.IsNaN(); var num = 0.0; var directDelta = (orientation == Orientation.Vertical) ? (flag ? itemWidth : default(double?)) : (flag2 ? itemHeight : default(double?)); var children = this.Children; var count = children.Count; var num2 = 0; for (var i = 0; i < count; i++) { var uIElement = children[i]; var orientedSize3 = new OrientedSize( orientation, flag ? itemWidth : uIElement.DesiredSize.Width, flag2 ? itemHeight : uIElement.DesiredSize.Height); if (NumericExtensions.IsGreaterThan(orientedSize.Direct + orientedSize3.Direct, orientedSize2.Direct)) { this.ArrangeLine(num2, i, directDelta, num, orientedSize.Indirect); num += orientedSize.Indirect; orientedSize = orientedSize3; if (NumericExtensions.IsGreaterThan(orientedSize3.Direct, orientedSize2.Direct)) { this.ArrangeLine(i, ++i, directDelta, num, orientedSize3.Indirect); num += orientedSize.Indirect; orientedSize = new OrientedSize(orientation); } num2 = i; } else { orientedSize.Direct += orientedSize3.Direct; orientedSize.Indirect = Math.Max(orientedSize.Indirect, orientedSize3.Indirect); } } if (num2 < count) { this.ArrangeLine(num2, count, directDelta, num, orientedSize.Indirect); } return(finalSize); }
protected override Size MeasureOverride(Size constraint) { var orientation = this.Orientation; var orientedSize = new OrientedSize(orientation); var orientedSize2 = new OrientedSize(orientation); var orientedSize3 = new OrientedSize(orientation, constraint.Width, constraint.Height); var itemWidth = this.ItemWidth; var itemHeight = this.ItemHeight; var flag = !itemWidth.IsNaN(); var flag2 = !itemHeight.IsNaN(); var size = new Size(flag ? itemWidth : constraint.Width, flag2 ? itemHeight : constraint.Height); foreach (var child in Children.OfType <UIElement>()) { child.Measure(size); var orientedSize4 = new OrientedSize( orientation, flag ? itemWidth : child.DesiredSize.Width, flag2 ? itemHeight : child.DesiredSize.Height); if (NumericExtensions.IsGreaterThan(orientedSize.Direct + orientedSize4.Direct, orientedSize3.Direct)) { orientedSize2.Direct = Math.Max(orientedSize.Direct, orientedSize2.Direct); orientedSize2.Indirect += orientedSize.Indirect; orientedSize = orientedSize4; if (NumericExtensions.IsGreaterThan(orientedSize4.Direct, orientedSize3.Direct)) { orientedSize2.Direct = Math.Max(orientedSize4.Direct, orientedSize2.Direct); orientedSize2.Indirect += orientedSize4.Indirect; orientedSize = new OrientedSize(orientation); } } else { orientedSize.Direct += orientedSize4.Direct; orientedSize.Indirect = Math.Max(orientedSize.Indirect, orientedSize4.Indirect); } } orientedSize2.Direct = Math.Max(orientedSize.Direct, orientedSize2.Direct); orientedSize2.Indirect += orientedSize.Indirect; return(new Size(orientedSize2.Width, orientedSize2.Height)); }
public OrientedSize(Orientation orientation) { this = new OrientedSize(orientation, 0.0, 0.0); }