sig
  type t
  type window_style =
      [ `close | `default_style | `fullscreen | `resize | `titlebar ]
  type video_mode = { width : int; height : int; bitsPerPixel : int; }
  type context_settings = {
    depthBits : int;
    stencilBits : int;
    antialiasingLevel : int;
    majorVersion : int;
    minorVersion : int;
  }
  val mode :
    width:int -> height:int -> ?bpp:int -> unit -> SFWindow.video_mode
  val settings :
    ?depth:int ->
    ?stencil:int ->
    ?antialiasing:int ->
    ?version:int * int -> unit -> SFWindow.context_settings
  external create :
    mode:SFWindow.video_mode ->
    title:string ->
    style:SFWindow.window_style list ->
    settings:SFWindow.context_settings -> SFWindow.t = "caml_sfWindow_create"
  external createFromHandle :
    handle:nativeint -> settings:SFWindow.context_settings -> SFWindow.t
    = "caml_sfWindow_createFromHandle"
  val make :
    ?style:SFWindow.window_style list ->
    ?bpp:int ->
    ?depth:int ->
    ?stencil:int ->
    ?antialiasing:int ->
    ?version:int * int -> int * int -> string -> SFWindow.t
  external isOpen : SFWindow.t -> bool = "caml_sfWindow_isOpen"
  external close : SFWindow.t -> unit = "caml_sfWindow_close"
  external display : SFWindow.t -> unit = "caml_sfWindow_display"
  external destroy : SFWindow.t -> unit = "caml_sfWindow_destroy"
  external pollEvent : SFWindow.t -> SFEvent.t option
    = "caml_sfWindow_pollEvent"
  external waitEvent : SFWindow.t -> SFEvent.t = "caml_sfWindow_waitEvent"
  external getSize : SFWindow.t -> int * int = "caml_sfWindow_getSize"
  external getWidth : SFWindow.t -> int = "caml_sfWindow_getWidth"
  external getHeight : SFWindow.t -> int = "caml_sfWindow_getHeight"
  external setSize : SFWindow.t -> size:int * int -> unit
    = "caml_sfWindow_setSize"
  external setSize2 : SFWindow.t -> width:int -> height:int -> unit
    = "caml_sfWindow_setSize2"
  external setPosition : SFWindow.t -> pos:int * int -> unit
    = "caml_sfWindow_setPosition"
  external setPosition2 : SFWindow.t -> left:int -> top:int -> unit
    = "caml_sfWindow_setPosition2"
  external getPosition : SFWindow.t -> int * int
    = "caml_sfWindow_getPosition"
  external setTitle : SFWindow.t -> title:string -> unit
    = "caml_sfWindow_setTitle"
  external setActive : SFWindow.t -> active:bool -> bool
    = "caml_sfWindow_setActive"
  external setVisible : SFWindow.t -> visible:bool -> unit
    = "caml_sfWindow_setVisible"
  external setMouseCursorVisible : SFWindow.t -> visible:bool -> unit
    = "caml_sfWindow_setMouseCursorVisible"
  external setKeyRepeatEnabled : SFWindow.t -> enabled:bool -> unit
    = "caml_sfWindow_setKeyRepeatEnabled"
  external setJoystickThreshold : SFWindow.t -> threshold:float -> unit
    = "caml_sfWindow_setJoystickThreshold"
  external setFramerateLimit : SFWindow.t -> limit:int -> unit
    = "caml_sfWindow_setFramerateLimit"
  external setVerticalSyncEnabled : SFWindow.t -> enabled:bool -> unit
    = "caml_sfWindow_setVerticalSyncEnabled"
  external getMousePosition : relativeTo:SFWindow.t -> int * int
    = "caml_sfWindow_getMousePosition"
  external setMousePosition : relativeTo:SFWindow.t -> int * int -> unit
    = "caml_sfWindow_setMousePosition"
end