sig
  type gdkFunction = [ `COPY | `INVERT | `XOR ]
  type gdkFill = [ `OPAQUE_STIPPLED | `SOLID | `STIPPLED | `TILED ]
  type gdkSubwindowMode = [ `CLIP_BY_CHILDREN | `INCLUDE_INFERIORS ]
  type gdkLineStyle = [ `DOUBLE_DASH | `ON_OFF_DASH | `SOLID ]
  type gdkCapStyle = [ `BUTT | `NOT_LAST | `PROJECTING | `ROUND ]
  type gdkJoinStyle = [ `BEVEL | `MITER | `ROUND ]
  val create : [> `drawable ] Gobject.obj -> Gdk.gc
  val set_foreground : Gdk.gc -> Gdk.color -> unit
  val set_background : Gdk.gc -> Gdk.color -> unit
  val set_font : Gdk.gc -> Gdk.font -> unit
  val set_function : Gdk.gc -> Gdk.GC.gdkFunction -> unit
  val set_fill : Gdk.gc -> Gdk.GC.gdkFill -> unit
  val set_tile : Gdk.gc -> Gdk.pixmap -> unit
  val set_stipple : Gdk.gc -> Gdk.pixmap -> unit
  val set_ts_origin : Gdk.gc -> x:int -> y:int -> unit
  val set_clip_origin : Gdk.gc -> x:int -> y:int -> unit
  val set_clip_mask : Gdk.gc -> Gdk.bitmap -> unit
  val set_clip_rectangle : Gdk.gc -> Gdk.Rectangle.t -> unit
  val set_clip_region : Gdk.gc -> Gdk.region -> unit
  val set_subwindow : Gdk.gc -> Gdk.GC.gdkSubwindowMode -> unit
  val set_exposures : Gdk.gc -> bool -> unit
  val set_line_attributes :
    Gdk.gc ->
    width:int ->
    style:Gdk.GC.gdkLineStyle ->
    cap:Gdk.GC.gdkCapStyle -> join:Gdk.GC.gdkJoinStyle -> unit
  val set_dashes : Gdk.gc -> offset:int -> int list -> unit
  val copy : dst:Gdk.gc -> Gdk.gc -> unit
  type values = {
    foreground : Gdk.color;
    background : Gdk.color;
    font : Gdk.font option;
    fonction : Gdk.GC.gdkFunction;
    fill : Gdk.GC.gdkFill;
    tile : Gdk.pixmap option;
    stipple : Gdk.pixmap option;
    clip_mask : Gdk.bitmap option;
    subwindow_mode : Gdk.GC.gdkSubwindowMode;
    ts_x_origin : int;
    ts_y_origin : int;
    clip_x_origin : int;
    clip_y_origin : int;
    graphics_exposures : bool;
    line_width : int;
    line_style : Gdk.GC.gdkLineStyle;
    cap_style : Gdk.GC.gdkCapStyle;
    join_style : Gdk.GC.gdkJoinStyle;
  }
  val get_values : Gdk.gc -> Gdk.GC.values
end