public override void OnLayout(Rect region) { Point currentWidgetPosition = region.TopLeft; int columnHeight = region.Size.Height; for (int i = 0; i < Children.Count; i++) { BaseWidget widget = Children[i]; Point widgetPosition = new Point(); if (i == 0) { currentWidgetPosition.X += Layout.Padding.Left; currentWidgetPosition.Y += Layout.Padding.Up; } int paddingOffset = -Layout.Padding.Down; int midY = widgetPosition.Y + (int)Math.Ceiling((float)columnHeight / 2); // Reposition widget int widgetMidY = (int)Math.Ceiling((float)widget.BoundingBox.Size.Height / 2); widgetPosition.Y = midY - widgetMidY; // Apply offset widgetPosition.Y += paddingOffset; widgetPosition = widgetPosition + currentWidgetPosition; currentWidgetPosition.X += widget.BoundingBox.Size.Width + Layout.Spacing; // Update position widget.SetPosition(widgetPosition); widget.BoundingBox.ClipTo(region); widget.OnLayout(widget.BoundingBox); } }