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)) ); }
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))); }