A low level 2D rasterization library
// SVG path data works directly because `String` implements `PathData`.
let svg : String = "M0,0 L3,4 Z"
let len = length(svg, None)
// Point+verb lists also implement `PathData`.
let data = (
[Point::new(1.0, 1.0), Point::new(6.0, 1.0), Point::new(3.5, 6.0)],
[Verb::MoveTo, Verb::LineTo, Verb::LineTo, Verb::Close],
)
let (buf, placement) = Mask::new(data)
.style(Style::Fill(Fill::NonZero))
.size(8U, 8U)
.render()
// `Array[Command]` is both a `PathData` and a `PathBuilder` sink.
let cmds : Array[Command] = []
add_rect(cmds, Point::new(1.0, 2.0), 3.0, 4.0)impl PathBuilder for Array[Command]type Anglepub(all) enum ArcSize {
Small
Large
}pub(all) enum ArcSweep {
Positive
Negative
}pub(all) enum Fill {
NonZero
EvenOdd
}type HitTesttype Maskpub(all) enum Origin {
TopLeft
BottomLeft
}pub(all) struct Placement {
left : Int
top : Int
width : UInt
height : UInt
}type Scratchpub struct Transform {
xx : Double
xy : Double
yx : Double
yy : Double
x : Double
y : Double
}#alias(Point)
pub struct Vector {
x : Double
y : Double
}pub(all) enum Verb {
MoveTo
LineTo
QuadTo
CurveTo
Close
}type Verticestype Walkfn add_round_rect(sink : &PathBuilder, xy : Vector, w : Double, h : Double, rx0 : Double, ry0 : Double) -> Unitfn arc_to(sink : &PathBuilder, rx : Double, ry : Double, angle : Angle, size : ArcSize, sweep : ArcSweep, to : Vector) -> Unitfn rel_arc_to(sink : &PathBuilder, rx : Double, ry : Double, angle : Angle, size : ArcSize, sweep : ArcSweep, to : Vector) -> Unitfn validate_svg(svg : String) -> Result[Unit, Int]A low level 2D rasterization library