Comment on page

Painting the Canvas

Valora's painting surface.
The central component of valora is the Canvas. The canvas supports many low level drawing operations such as drawing paths and stroking or filling them. For example, we can draw a triangle like this:
canvas.set_color(LinSrgb::new(1., 0., 1.));
canvas.move_to(P2::new(430., 225.));
canvas.line_to(P2::new(83., 225.));
canvas.line_to(P2::new(256., 525.));
A stroked triangle.
Thankfully in valora we don't have to work at such a low level unless we want to. Valora defines the Paint trait, which is implemented by any type that knows how to represent itself on a canvas. We can instead draw an equilateral triangle like this:
canvas.set_color(LinSrgb::new(1., 0., 1.));
canvas.paint(Stroked {
width: 2.,
element: Ngon::triangle(, /*radius=*/200.),
You can implement Paint for your own patterns and easily compose them, as we will see in later chapters.