sig
  type paint = private {
    fill : Color.color option;
    stroke : Color.color option;
    stroke_weight : float;
    stroke_cap : [ `Project | `Round | `Square ];
    stroke_join : [ `Bevel | `Miter | `Round ];
  }
  val create : Paint.paint
  type paint_update =
      Fill of Color.color option
    | Stroke of Color.color option
    | Stroke_weight of float
    | Stroke_cap of [ `Project | `Round | `Square ]
    | Stroke_join of [ `Bevel | `Miter | `Round ]
    | Stroke_weight_scale of float
  val apply_paint_update : Paint.paint_update -> Paint.paint -> Paint.paint
end