Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 public OrientedSize(Orientation orientation)
 {
     this = new OrientedSize(orientation, 0.0, 0.0);
 }