sig
  type t = Sdlwindow.t
  type window_flags =
    Sdlwindow.window_flags =
      FullScreen
    | OpenGL
    | Shown
    | Hidden
    | Borderless
    | Resizable
    | Minimized
    | Maximized
    | Input_Grabbed
    | Input_Focus
    | Mouse_Focus
    | FullScreen_Desktop
    | Foreign
    | Allow_HighDPI
  type window_pos = [ `centered | `pos of int | `undefined ]
  external create :
    title:string ->
    pos:Sdl.Window.window_pos * Sdl.Window.window_pos ->
    dims:int * int -> flags:Sdl.Window.window_flags list -> Sdl.Window.t
    = "caml_SDL_CreateWindow"
  external create2 :
    title:string ->
    x:Sdl.Window.window_pos ->
    y:Sdl.Window.window_pos ->
    width:int ->
    height:int -> flags:Sdl.Window.window_flags list -> Sdl.Window.t
    = "caml_SDL_CreateWindow2_bc" "caml_SDL_CreateWindow2"
  external set_title : window:Sdl.Window.t -> title:string -> unit
    = "caml_SDL_SetWindowTitle"
  external show : Sdl.Window.t -> unit = "caml_SDL_ShowWindow"
  external hide : Sdl.Window.t -> unit = "caml_SDL_HideWindow"
  external raise_win : Sdl.Window.t -> unit = "caml_SDL_RaiseWindow"
  external maximize : Sdl.Window.t -> unit = "caml_SDL_MaximizeWindow"
  external minimize : Sdl.Window.t -> unit = "caml_SDL_MinimizeWindow"
  external restore : Sdl.Window.t -> unit = "caml_SDL_RestoreWindow"
  external get_surface : Sdl.Window.t -> Sdlsurface.t
    = "caml_SDL_GetWindowSurface"
  external update_surface : Sdl.Window.t -> unit
    = "caml_SDL_UpdateWindowSurface"
  external set_brightness : Sdl.Window.t -> brightness:float -> unit
    = "caml_SDL_SetWindowBrightness"
  external get_brightness : Sdl.Window.t -> float
    = "caml_SDL_GetWindowBrightness"
  external destroy : Sdl.Window.t -> unit = "caml_SDL_DestroyWindow"
  external get_size : Sdl.Window.t -> int * int = "caml_SDL_GetWindowSize"
end