| name | rendering-mewui-elements |
| description | Renders custom graphics in MewUI controls using IGraphicsContext. Use when implementing OnRender, drawing shapes, text, images, or understanding the Measure/Arrange/Render pipeline. |
Rendering Pipeline
MewUI uses a three-pass layout system:
Measure (calculate DesiredSize) → Arrange (set Bounds) → Render (draw via IGraphicsContext)
Key overrides in custom controls:
MeasureContent(Size availableSize) → return desired size
ArrangeContent(Rect bounds) → position children
OnRender(IGraphicsContext context) → draw visuals
IGraphicsContext Essentials
protected override void OnRender(IGraphicsContext context)
{
var bounds = new Rect(0, 0, Bounds.Width, Bounds.Height);
context.Save();
context.Translate(10, 10);
context.SetClip(clipRect);
context.Restore();
context.FillRectangle(bounds, Colors.Blue);
context.DrawRectangle(bounds, Colors.Black, thickness: 1);
context.FillRoundedRectangle(bounds, radiusX: 4, radiusY: 4, Colors.White);
context.DrawLine(start, end, Colors.Gray, thickness: 1);
context.FillEllipse(bounds, Colors.Red);
context.DrawText("Hello", bounds, font, Colors.Black,
TextAlignment.Center, TextAlignment.Center, TextWrapping.NoWrap);
context.DrawImage(image, destRect);
}
Text Measurement
protected override Size MeasureContent(Size availableSize)
{
var factory = GetGraphicsFactory();
using var ctx = factory.CreateMeasurementContext(GetDpi());
return ctx.MeasureText(Text, GetFont(), availableSize.Width);
}
Graphics Backends
Application.DefaultGraphicsBackend = GraphicsBackend.Direct2D;
Application.DefaultGraphicsBackend = GraphicsBackend.Gdi;
Application.DefaultGraphicsBackend = GraphicsBackend.OpenGL;
Invalidation
InvalidateMeasure();
InvalidateArrange();
InvalidateVisual();
Detailed API: See graphics-api.md
Pipeline details: See pipeline.md