module Make(Repr: Layer.Repr.PRINTER) = struct type t = Point.t type repr = { path: (Repr.t) } let create_path : 'b -> repr = fun _ -> { path = Repr.create () } (* Start a new path. *) let start : Point.t -> repr -> repr = fun t {path} -> let path = Repr.move_to (Point.get_coord t) path in let path = Repr.line_to (Point.get_coord' t) path in { path } let line_to : Point.t -> Point.t -> repr -> repr = fun _ t {path} -> let path = Repr.move_to (Point.get_coord t) path in let path = Repr.line_to (Point.get_coord' t) path in { path } let quadratic_to : Point.t -> Gg.v2 -> Gg.v2 -> Point.t -> repr -> repr = fun _p0 _ctrl0 _ctrl1 p1 {path} -> let path = Repr.move_to (Point.get_coord p1) path in let path = Repr.line_to (Point.get_coord' p1) path in { path } let stop : repr -> repr = fun {path} -> { path } let get : repr -> Repr.t = fun {path; _} -> path end