Example #1
0
        public static IControl Create(Axis2D axis, Brush brush)
        {
            var four   = Observable.Return <Points>(3);
            var two    = Observable.Return <Points>(1);
            var gentle = Observable.Return(new CornerRadius(1));

            return(Layout
                   .Stack(
                       axis == Axis2D.Horizontal ? Direction2D.LeftToRight : Direction2D.TopToBottom,
                       Shapes.Rectangle(fill: brush, cornerRadius: gentle).WithDimension(axis, four),
                       Control.Empty.WithDimension(axis, two),
                       Shapes.Rectangle(fill: brush, cornerRadius: gentle).WithDimension(axis, four),
                       Control.Empty.WithDimension(axis, two),
                       Shapes.Rectangle(fill: brush, cornerRadius: gentle).WithDimension(axis, four))
                   .WithDimension(axis.Opposite(), Observable.Return <Points>(12))
                   .Center()
                   .WithSize(new Size <Points>(12, 16))
                   );
        }
Example #2
0
        public static IControl Subdivide(Axis2D axis, IImmutableList <Subdivision> divisions)
        {
            if (axis == Axis2D.Vertical && Platform.OperatingSystem == OS.Mac)
            {
                divisions = divisions.Reverse().ToImmutableList();
            }

            var u = axis;
            var v = axis.Opposite();

            var sizesV = divisions.Select(d => d.Control.DesiredSize[v]);

            return(Layer((isRooted, availableSize, parentFrame) =>
            {
                var frame = ObservableMath.RectangleWithSize(parentFrame.Size);

                var columns = divisions.Select(d => d.Span).ToArray();
                var intervals = frame[axis].Subdivide(columns);
                var columnCount = columns.Sum();

                var tmp = new IControl[intervals.Length];
                for (int i = 0; i < intervals.Length; i++)
                {
                    var span = divisions[i].Span;
                    var ratio = span / columnCount;
                    var node = divisions[i].Control;
                    tmp[i] = node.WithFrame(
                        frame.WithAxis(axis, intervals[i]),
                        availableSize.WithAxis(axis, ov => ov.Mul(ratio)));
                }

                return tmp;
            })
                   .WithSize(desiredSize: Size.Create(
                                 Observable.Return <Points>(0),
                                 sizesV.Aggregate(Observable.Return <Points>(0), (a, b) => a.Max(b)),
                                 firstAxis: u)));
        }