sig
  type gctx
  type color = { r : int; g : int; b : int; }
  val black : Gctx.color
  val white : Gctx.color
  val red : Gctx.color
  val green : Gctx.color
  val blue : Gctx.color
  val yellow : Gctx.color
  val cyan : Gctx.color
  val magenta : Gctx.color
  val open_graphics : unit -> unit
  val top_level : Gctx.gctx
  val translate : Gctx.gctx -> int * int -> Gctx.gctx
  val with_color : Gctx.gctx -> Gctx.color -> Gctx.gctx
  type position = int * int
  type dimension = int * int
  val draw_line : Gctx.gctx -> Gctx.position -> Gctx.position -> unit
  val draw_string : Gctx.gctx -> Gctx.position -> string -> unit
  val draw_rect : Gctx.gctx -> Gctx.position -> Gctx.dimension -> unit
  val fill_rect : Gctx.gctx -> Gctx.position -> Gctx.dimension -> unit
  val draw_ellipse : Gctx.gctx -> Gctx.position -> int -> int -> unit
  val text_size : string -> Gctx.dimension
  type event
  type event_type =
      KeyPress of char
    | MouseDown
    | MouseUp
    | MouseMove
    | MouseDrag
  val event_type : Gctx.event -> Gctx.event_type
  val event_pos : Gctx.event -> Gctx.gctx -> Gctx.position
  val wait_for_event : unit -> Gctx.event
  val make_test_event : Gctx.event_type -> Gctx.position -> Gctx.event
end