sig
  type t
  external create :
    mode:SFVideoMode.t ->
    title:string ->
    style:SFStyle.t list -> settings:SFContextSettings.t -> SFWindow.t
    = "caml_sfWindow_create"
  val make :
    ?style:SFStyle.t list ->
    ?bpp:int ->
    ?settings:SFContextSettings.t -> int * int -> string -> SFWindow.t
  type window_handle = nativeint
  external createFromHandle :
    handle:SFWindow.window_handle ->
    settings:SFContextSettings.t -> SFWindow.t
    = "caml_sfWindow_createFromHandle"
  external close : SFWindow.t -> unit = "caml_sfWindow_close"
  external isOpen : SFWindow.t -> bool = "caml_sfWindow_isOpen"
  external getSettings : SFWindow.t -> SFContextSettings.t
    = "caml_sfWindow_getSettings"
  external pollEvent : SFWindow.t -> SFEvent.t option
    = "caml_sfWindow_pollEvent"
  external waitEvent : SFWindow.t -> SFEvent.t = "caml_sfWindow_waitEvent"
  external getPosition : SFWindow.t -> int * int
    = "caml_sfWindow_getPosition"
  external setPosition : SFWindow.t -> pos:int * int -> unit
    = "caml_sfWindow_setPosition"
  external setPosition2 : SFWindow.t -> left:int -> top:int -> unit
    = "caml_sfWindow_setPosition2"
  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 setTitle : SFWindow.t -> title:string -> unit
    = "caml_sfWindow_setTitle"
  external setVisible : SFWindow.t -> visible:bool -> unit
    = "caml_sfWindow_setVisible"
  external setVerticalSyncEnabled : SFWindow.t -> enabled:bool -> unit
    = "caml_sfWindow_setVerticalSyncEnabled"
  external setMouseCursorVisible : SFWindow.t -> visible:bool -> unit
    = "caml_sfWindow_setMouseCursorVisible"
  external setMouseCursorGrabbed : SFWindow.t -> grabbed:bool -> unit
    = "caml_sfWindow_setMouseCursorGrabbed"
  external setMouseCursor : SFWindow.t -> cursor:SFCursor.t -> unit
    = "caml_sfWindow_setMouseCursor"
  external setKeyRepeatEnabled : SFWindow.t -> enabled:bool -> unit
    = "caml_sfWindow_setKeyRepeatEnabled"
  external setFramerateLimit : SFWindow.t -> limit:int -> unit
    = "caml_sfWindow_setFramerateLimit"
  external setJoystickThreshold : SFWindow.t -> threshold:float -> unit
    = "caml_sfWindow_setJoystickThreshold"
  external setActive : SFWindow.t -> active:bool -> bool
    = "caml_sfWindow_setActive"
  external requestFocus : SFWindow.t -> unit = "caml_sfWindow_requestFocus"
  external hasFocus : SFWindow.t -> bool = "caml_sfWindow_hasFocus"
  external display : SFWindow.t -> unit = "caml_sfWindow_display"
  external getSystemHandle : SFWindow.t -> SFWindow.window_handle
    = "caml_sfWindow_getSystemHandle"
  external getMousePosition : relativeTo:SFWindow.t -> int * int
    = "caml_sfWindow_getMousePosition"
  external setMousePosition : relativeTo:SFWindow.t -> int * int -> unit
    = "caml_sfWindow_setMousePosition"
end