sig
  val get_type :
    [> `Any ] Cairo.pattern ->
    [ `Any | `Linear | `Radial | `Solid | `Surface ]
  val downcast_to_solid : [> `Any ] Cairo.pattern -> Cairo.solid_pattern
  val downcast_to_surface : [> `Any ] Cairo.pattern -> Cairo.surface_pattern
  val downcast_to_gradient :
    [> `Any ] Cairo.pattern -> Cairo.gradient_pattern
  external create_rgb :
    red:float -> green:float -> blue:float -> Cairo.solid_pattern
    = "ml_cairo_pattern_create_rgb"
  external create_rgba :
    red:float ->
    green:float -> blue:float -> alpha:float -> Cairo.solid_pattern
    = "ml_cairo_pattern_create_rgba"
  external create_for_surface :
    [> `Any ] Cairo.surface -> Cairo.surface_pattern
    = "ml_cairo_pattern_create_for_surface"
  external create_linear :
    x0:float -> y0:float -> x1:float -> y1:float -> Cairo.gradient_pattern
    = "ml_cairo_pattern_create_linear"
  external create_radial :
    cx0:float ->
    cy0:float ->
    radius0:float ->
    cx1:float -> cy1:float -> radius1:float -> Cairo.gradient_pattern
    = "ml_cairo_pattern_create_radial_bc" "ml_cairo_pattern_create_radial"
  external add_color_stop_rgb :
    [> `Gradient ] Cairo.pattern ->
    off:float -> red:float -> green:float -> blue:float -> unit
    = "ml_cairo_pattern_add_color_stop_rgb"
  external add_color_stop_rgba :
    [> `Gradient ] Cairo.pattern ->
    off:float ->
    red:float -> green:float -> blue:float -> alpha:float -> unit
    = "ml_cairo_pattern_add_color_stop_rgba_bc"
    "ml_cairo_pattern_add_color_stop_rgba"
  external set_matrix : [> `Any ] Cairo.pattern -> Cairo.matrix -> unit
    = "ml_cairo_pattern_set_matrix"
  external get_matrix : [> `Any ] Cairo.pattern -> Cairo.matrix
    = "ml_cairo_pattern_get_matrix"
  external set_extend : [> `Surface ] Cairo.pattern -> Cairo.extend -> unit
    = "ml_cairo_pattern_set_extend"
  external get_extend : [> `Surface ] Cairo.pattern -> Cairo.extend
    = "ml_cairo_pattern_get_extend"
  external set_filter : [> `Surface ] Cairo.pattern -> Cairo.filter -> unit
    = "ml_cairo_pattern_set_filter"
  external get_filter : [> `Surface ] Cairo.pattern -> Cairo.filter
    = "ml_cairo_pattern_get_filter"
end