sig
  type pixel_array_type =
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
      Bigarray.Genarray.t
  val pixel_array_kind : (int, Bigarray.int8_unsigned_elt) Bigarray.kind
  val pixel_array_layout : Bigarray.c_layout Bigarray.layout
  module KeyCode :
    sig
      type t =
          A
        | B
        | C
        | D
        | E
        | F
        | G
        | H
        | I
        | J
        | K
        | L
        | M
        | N
        | O
        | P
        | Q
        | R
        | S
        | T
        | U
        | V
        | W
        | X
        | Y
        | Z
        | Num0
        | Num1
        | Num2
        | Num3
        | Num4
        | Num5
        | Num6
        | Num7
        | Num8
        | Num9
        | Escape
        | LControl
        | LShift
        | LAlt
        | LSystem
        | RControl
        | RShift
        | RAlt
        | RSystem
        | Menu
        | LBracket
        | RBracket
        | SemiColon
        | Comma
        | Period
        | Quote
        | Slash
        | BackSlash
        | Tilde
        | Equal
        | Dash
        | Space
        | Return
        | Back
        | Tab
        | PageUp
        | PageDown
        | End
        | Home
        | Insert
        | Delete
        | Add
        | Subtract
        | Multiply
        | Divide
        | Left
        | Right
        | Up
        | Down
        | Numpad0
        | Numpad1
        | Numpad2
        | Numpad3
        | Numpad4
        | Numpad5
        | Numpad6
        | Numpad7
        | Numpad8
        | Numpad9
        | F1
        | F2
        | F3
        | F4
        | F5
        | F6
        | F7
        | F8
        | F9
        | F10
        | F11
        | F12
        | F13
        | F14
        | F15
        | Pause
        | Count
    end
  module Keyboard :
    sig val is_key_pressed : OcsfmlWindow.KeyCode.t -> bool end
  module Joystick :
    sig
      type id = private int
      val count : int
      val buttonCount : int
      val axisCount : int
      type axis = X | Y | Z | R | U | V | PovX | PovY
      val id_from_int : int -> OcsfmlWindow.Joystick.id
      val is_connected : OcsfmlWindow.Joystick.id -> bool
      val get_button_count : OcsfmlWindow.Joystick.id -> int
      val has_axis :
        OcsfmlWindow.Joystick.id -> OcsfmlWindow.Joystick.axis -> bool
      val is_button_pressed : OcsfmlWindow.Joystick.id -> int -> bool
      val get_axis_position :
        OcsfmlWindow.Joystick.id -> OcsfmlWindow.Joystick.axis -> float
      val update : unit -> unit
    end
  module Context :
    sig
      type t
      val destroy : OcsfmlWindow.Context.t -> unit
      val default : unit -> OcsfmlWindow.Context.t
      val set_active : OcsfmlWindow.Context.t -> bool -> bool
    end
  class context :
    object
      val t_context_base : OcsfmlWindow.Context.t
      method destroy : unit
      method rep__sf_Context : OcsfmlWindow.Context.t
      method set_active : bool -> bool
    end
  module Event :
    sig
      type mouseButton =
          LeftButton
        | RightButton
        | MiddleButton
        | XButton1
        | XButton2
        | MouseButtonCount
      type sizeEvent = { width : int; height : int; }
      type keyEvent = {
        code : OcsfmlWindow.KeyCode.t;
        alt : bool;
        control : bool;
        shift : bool;
        system : bool;
      }
      type textEvent = { unicode : int; }
      type mouseCoord = { x : int; y : int; }
      type mouseMoveEvent = OcsfmlWindow.Event.mouseCoord
      type mouseButtonEvent =
          OcsfmlWindow.Event.mouseButton * OcsfmlWindow.Event.mouseCoord
      type mouseWheelEvent = int * OcsfmlWindow.Event.mouseCoord
      type joystickConnectEvent = OcsfmlWindow.Joystick.id
      type joystickMoveEvent =
          OcsfmlWindow.Joystick.id * OcsfmlWindow.Joystick.axis * float
      type joystickButtonEvent = OcsfmlWindow.Joystick.id * int
      type t =
          Closed
        | LostFocus
        | GainedFocus
        | Resized of OcsfmlWindow.Event.sizeEvent
        | TextEntered of OcsfmlWindow.Event.textEvent
        | KeyPressed of OcsfmlWindow.Event.keyEvent
        | KeyReleased of OcsfmlWindow.Event.keyEvent
        | MouseWheelMoved of OcsfmlWindow.Event.mouseWheelEvent
        | MouseButtonPressed of OcsfmlWindow.Event.mouseButtonEvent
        | MouseButtonReleased of OcsfmlWindow.Event.mouseButtonEvent
        | MouseMoved of OcsfmlWindow.Event.mouseMoveEvent
        | MouseEntered
        | MouseLeft
        | JoystickButtonPressed of OcsfmlWindow.Event.joystickButtonEvent
        | JoystickButtonReleased of OcsfmlWindow.Event.joystickButtonEvent
        | JoystickMoved of OcsfmlWindow.Event.joystickMoveEvent
        | JoystickConnected of OcsfmlWindow.Event.joystickConnectEvent
        | JoystickDisconnected of OcsfmlWindow.Event.joystickConnectEvent
    end
  module VideoMode :
    sig
      type t = { width : int; height : int; bits_per_pixel : int; }
      val create :
        ?w:int -> ?h:int -> ?bpp:int -> unit -> OcsfmlWindow.VideoMode.t
      val is_valid : OcsfmlWindow.VideoMode.t -> bool
      val get_full_screen_modes : unit -> OcsfmlWindow.VideoMode.t array
      val get_desktop_mode : unit -> OcsfmlWindow.VideoMode.t
    end
  module ContextSettings :
    sig
      type t = {
        depth_bits : int;
        stencil_bits : int;
        antialising_level : int;
        major_version : int;
        minor_version : int;
      }
      val create :
        ?depth_bits:int ->
        ?stencil_bits:int ->
        ?antialising_level:int ->
        ?major_version:int ->
        ?minor_version:int -> unit -> OcsfmlWindow.ContextSettings.t
    end
  module WindowBase :
    sig
      type style = Titlebar | Resize | Close | Fullscreen
      type t
      val destroy : OcsfmlWindow.WindowBase.t -> unit
      val default : unit -> OcsfmlWindow.WindowBase.t
      val create_init :
        ?style:OcsfmlWindow.WindowBase.style list ->
        ?context:OcsfmlWindow.ContextSettings.t ->
        OcsfmlWindow.VideoMode.t -> string -> OcsfmlWindow.WindowBase.t
      val create :
        OcsfmlWindow.WindowBase.t ->
        ?style:OcsfmlWindow.WindowBase.style list ->
        ?context:OcsfmlWindow.ContextSettings.t ->
        OcsfmlWindow.VideoMode.t -> string -> unit
      val close : OcsfmlWindow.WindowBase.t -> unit
      val is_open : OcsfmlWindow.WindowBase.t -> bool
      val get_position : OcsfmlWindow.WindowBase.t -> int * int
      val get_size : OcsfmlWindow.WindowBase.t -> int * int
      val get_settings :
        OcsfmlWindow.WindowBase.t -> OcsfmlWindow.ContextSettings.t
      val poll_event :
        OcsfmlWindow.WindowBase.t -> OcsfmlWindow.Event.t option
      val wait_event :
        OcsfmlWindow.WindowBase.t -> OcsfmlWindow.Event.t option
      val set_vertical_sync_enabled :
        OcsfmlWindow.WindowBase.t -> bool -> unit
      val set_mouse_cursor_visible :
        OcsfmlWindow.WindowBase.t -> bool -> unit
      val set_position_v : OcsfmlWindow.WindowBase.t -> int * int -> unit
      val set_size_v : OcsfmlWindow.WindowBase.t -> int * int -> unit
      val set_title : OcsfmlWindow.WindowBase.t -> string -> unit
      val set_visible : OcsfmlWindow.WindowBase.t -> bool -> unit
      val set_key_repeat_enabled : OcsfmlWindow.WindowBase.t -> bool -> unit
      val set_active :
        OcsfmlWindow.WindowBase.t -> ?active:bool -> unit -> bool
      val display : OcsfmlWindow.WindowBase.t -> unit
      val set_framerate_limit : OcsfmlWindow.WindowBase.t -> int -> unit
      val set_joystick_threshold : OcsfmlWindow.WindowBase.t -> float -> unit
      val set_icon :
        OcsfmlWindow.WindowBase.t -> OcsfmlWindow.pixel_array_type -> unit
    end
  class window_base :
    OcsfmlWindow.WindowBase.t ->
    object
      val t_window_base : OcsfmlWindow.WindowBase.t
      method close : unit
      method create :
        ?style:OcsfmlWindow.WindowBase.style list ->
        ?context:OcsfmlWindow.ContextSettings.t ->
        OcsfmlWindow.VideoMode.t -> string -> unit
      method destroy : unit
      method display : unit
      method get_height : int
      method get_position : int * int
      method get_settings : OcsfmlWindow.ContextSettings.t
      method get_size : int * int
      method get_width : int
      method is_open : bool
      method poll_event : OcsfmlWindow.Event.t option
      method rep__sf_Window : OcsfmlWindow.WindowBase.t
      method set_active : ?active:bool -> unit -> bool
      method set_framerate_limit : int -> unit
      method set_icon : OcsfmlWindow.pixel_array_type -> unit
      method set_joystick_threshold : float -> unit
      method set_key_repeat_enabled : bool -> unit
      method set_mouse_cursor_visible : bool -> unit
      method set_position : int -> int -> unit
      method set_position_v : int * int -> unit
      method set_size : int -> int -> unit
      method set_size_v : int * int -> unit
      method set_title : string -> unit
      method set_vertical_sync_enabled : bool -> unit
      method set_visible : bool -> unit
      method wait_event : OcsfmlWindow.Event.t option
    end
  module Window :
    sig
      type style =
        OcsfmlWindow.WindowBase.style =
          Titlebar
        | Resize
        | Close
        | Fullscreen
      type t = OcsfmlWindow.WindowBase.t
      val destroy : OcsfmlWindow.Window.t -> unit
      val default : unit -> OcsfmlWindow.Window.t
      val create_init :
        ?style:OcsfmlWindow.Window.style list ->
        ?context:OcsfmlWindow.ContextSettings.t ->
        OcsfmlWindow.VideoMode.t -> string -> OcsfmlWindow.Window.t
      val create :
        OcsfmlWindow.Window.t ->
        ?style:OcsfmlWindow.Window.style list ->
        ?context:OcsfmlWindow.ContextSettings.t ->
        OcsfmlWindow.VideoMode.t -> string -> unit
      val close : OcsfmlWindow.Window.t -> unit
      val is_open : OcsfmlWindow.Window.t -> bool
      val get_position : OcsfmlWindow.Window.t -> int * int
      val get_size : OcsfmlWindow.Window.t -> int * int
      val get_settings :
        OcsfmlWindow.Window.t -> OcsfmlWindow.ContextSettings.t
      val poll_event : OcsfmlWindow.Window.t -> OcsfmlWindow.Event.t option
      val wait_event : OcsfmlWindow.Window.t -> OcsfmlWindow.Event.t option
      val set_vertical_sync_enabled : OcsfmlWindow.Window.t -> bool -> unit
      val set_mouse_cursor_visible : OcsfmlWindow.Window.t -> bool -> unit
      val set_position_v : OcsfmlWindow.Window.t -> int * int -> unit
      val set_size_v : OcsfmlWindow.Window.t -> int * int -> unit
      val set_title : OcsfmlWindow.Window.t -> string -> unit
      val set_visible : OcsfmlWindow.Window.t -> bool -> unit
      val set_key_repeat_enabled : OcsfmlWindow.Window.t -> bool -> unit
      val set_active : OcsfmlWindow.Window.t -> ?active:bool -> unit -> bool
      val display : OcsfmlWindow.Window.t -> unit
      val set_framerate_limit : OcsfmlWindow.Window.t -> int -> unit
      val set_joystick_threshold : OcsfmlWindow.Window.t -> float -> unit
      val set_icon :
        OcsfmlWindow.Window.t -> OcsfmlWindow.pixel_array_type -> unit
    end
  class window :
    ?style:OcsfmlWindow.Window.style list ->
    ?context:OcsfmlWindow.ContextSettings.t ->
    OcsfmlWindow.VideoMode.t ->
    string ->
    object
      val t_window_base : OcsfmlWindow.WindowBase.t
      method close : unit
      method create :
        ?style:OcsfmlWindow.Window.style list ->
        ?context:OcsfmlWindow.ContextSettings.t ->
        OcsfmlWindow.VideoMode.t -> string -> unit
      method destroy : unit
      method display : unit
      method get_height : int
      method get_position : int * int
      method get_settings : OcsfmlWindow.ContextSettings.t
      method get_size : int * int
      method get_width : int
      method is_open : bool
      method poll_event : OcsfmlWindow.Event.t option
      method rep__sf_Window : OcsfmlWindow.WindowBase.t
      method set_active : ?active:bool -> unit -> bool
      method set_framerate_limit : int -> unit
      method set_icon : OcsfmlWindow.pixel_array_type -> unit
      method set_joystick_threshold : float -> unit
      method set_key_repeat_enabled : bool -> unit
      method set_mouse_cursor_visible : bool -> unit
      method set_position : int -> int -> unit
      method set_position_v : int * int -> unit
      method set_size : int -> int -> unit
      method set_size_v : int * int -> unit
      method set_title : string -> unit
      method set_vertical_sync_enabled : bool -> unit
      method set_visible : bool -> unit
      method wait_event : OcsfmlWindow.Event.t option
    end
  module Mouse :
    sig
      type button = OcsfmlWindow.Event.mouseButton
      val is_button_pressed : OcsfmlWindow.Mouse.button -> bool
      val get_position : unit -> int * int
      val get_relative_position : #OcsfmlWindow.window -> int * int
      val set_position : int * int -> unit
      val set_relative_position : int * int -> #OcsfmlWindow.window -> unit
    end
end