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