# mizchi/canvas

Pure-MoonBit headless 2D canvas rasterizer. Mirrors a subset of the HTML
`CanvasRenderingContext2D` API and emits PNG via `mizchi/image`.

## Package

- `mizchi/canvas`

## Getting Started

```mbt check
///|
test {
  let canvas = @canvas.Canvas::new(200, 100)
  let ctx = canvas.context()
  ctx.set_fill_style(@canvas.Color::rgb(255, 0, 0))
  ctx.fill_rect(10.0, 10.0, 50.0, 50.0)
  // Convert to PNG bytes.
  let _png : Bytes = canvas.to_png()
  ignore(_png)
  inspect(canvas.width, content="200")
  inspect(canvas.height, content="100")
}
```

## Features

- `Color` with hex / `rgb()` / `rgba()` / named parsing
- `Canvas` framebuffer with optional 4x4 supersampling antialiasing
- `Context` with rect, path, transform, text, and image drawing APIs
- `Path2D` with lines, quadratic / cubic Bezier curves, arcs, and rectangles
- Source-over blending, save/restore state stack, affine `Matrix2D` transforms
- Text rendering via `mizchi/font` TTF glyph outlines
- PNG encoding via `mizchi/image`
