sig
  type 'a t
    constraint 'a = [< `Gradient | `Linear | `Radial | `Solid | `Surface ]
  type any =
      [ `Gradient | `Linear | `Radial | `Solid | `Surface ] Cairo.Pattern.t
  val add_color_stop_rgb :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface > `Gradient ]
    Cairo.Pattern.t -> ?ofs:float -> float -> float -> float -> unit
  val add_color_stop_rgba :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface > `Gradient ]
    Cairo.Pattern.t -> ?ofs:float -> float -> float -> float -> float -> unit
  external get_color_stop_count :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface > `Gradient ]
    Cairo.Pattern.t -> int = "caml_cairo_pattern_get_color_stop_count"
  val get_color_stop_rgba :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface > `Gradient ]
    Cairo.Pattern.t -> idx:int -> float * float * float * float * float
  external create_rgb :
    r:float -> g:float -> b:float -> [ `Solid ] Cairo.Pattern.t
    = "caml_cairo_pattern_create_rgb"
  external create_rgba :
    r:float -> g:float -> b:float -> a:float -> [ `Solid ] Cairo.Pattern.t
    = "caml_cairo_pattern_create_rgba"
  external get_rgba :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface > `Solid ]
    Cairo.Pattern.t -> float * float * float * float
    = "caml_cairo_pattern_get_rgba"
  external create_for_surface :
    Cairo.Surface.t -> [ `Surface ] Cairo.Pattern.t
    = "caml_cairo_pattern_create_for_surface"
  external get_surface : [ `Surface ] Cairo.Pattern.t -> Cairo.Surface.t
    = "caml_cairo_pattern_get_surface"
  external create_linear :
    x0:float ->
    y0:float ->
    x1:float -> y1:float -> [ `Gradient | `Linear ] Cairo.Pattern.t
    = "caml_cairo_pattern_create_linear"
  external get_linear_points :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface
     > `Gradient `Linear ]
    Cairo.Pattern.t -> float * float * float * float
    = "caml_cairo_pattern_get_linear_points"
  external create_radial :
    x0:float ->
    y0:float ->
    r0:float ->
    x1:float ->
    y1:float -> r1:float -> [ `Gradient | `Radial ] Cairo.Pattern.t
    = "caml_cairo_pattern_create_radial_bc"
    "caml_cairo_pattern_create_radial"
  external get_radial_circles :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface
     > `Gradient `Radial ]
    Cairo.Pattern.t -> float * float * float * float * float * float
    = "caml_cairo_pattern_get_radial_circles"
  type extend = NONE | REPEAT | REFLECT | PAD
  external set_extend :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface ] Cairo.Pattern.t ->
    Cairo.Pattern.extend -> unit = "caml_cairo_pattern_set_extend" "noalloc"
  external get_extend :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface ] Cairo.Pattern.t ->
    Cairo.Pattern.extend = "caml_cairo_pattern_get_extend"
  type filter = FAST | GOOD | BEST | NEAREST | BILINEAR
  external set_filter :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface ] Cairo.Pattern.t ->
    Cairo.Pattern.filter -> unit = "caml_cairo_pattern_set_filter" "noalloc"
  external get_filter :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface ] Cairo.Pattern.t ->
    Cairo.Pattern.filter = "caml_cairo_pattern_get_filter"
  external set_matrix :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface ] Cairo.Pattern.t ->
    Cairo.Matrix.t -> unit = "caml_cairo_pattern_set_matrix" "noalloc"
  external get_matrix :
    [< `Gradient | `Linear | `Radial | `Solid | `Surface ] Cairo.Pattern.t ->
    Cairo.Matrix.t = "caml_cairo_pattern_get_matrix"
end