sig
  type t
  exception Fatal_error of (Bogue.Layout.t * string)
  type room_content =
      Rooms of Bogue.Layout.t list
    | Resident of Bogue.Widget.t
  type adjust = Fit | Width | Height | Nothing
  type background
  val color_bg : Bogue.Draw.color -> Bogue.Layout.background
  val opaque_bg : Bogue.Draw.rgb -> Bogue.Layout.background
  val style_bg : Bogue.Style.t -> Bogue.Layout.background
  val theme_bg : Bogue.Layout.background
  val set_background :
    Bogue.Layout.t -> Bogue.Layout.background option -> unit
  val unload_background : Bogue.Layout.t -> unit
  module Resize : sig type strategy = Keep | Disable | Linear | Default end
  val empty :
    ?name:string ->
    ?background:Bogue.Layout.background ->
    w:int -> h:int -> unit -> Bogue.Layout.t
  val resident :
    ?name:string ->
    ?x:int ->
    ?y:int ->
    ?w:int ->
    ?h:int ->
    ?background:Bogue.Layout.background ->
    ?draggable:bool ->
    ?canvas:Bogue.Draw.canvas ->
    ?keyboard_focus:bool -> Bogue.Widget.t -> Bogue.Layout.t
  val flat_of_w :
    ?name:string ->
    ?sep:int ->
    ?h:int ->
    ?align:Bogue.Draw.align ->
    ?background:Bogue.Layout.background ->
    ?widget_bg:Bogue.Layout.background ->
    ?canvas:Bogue.Draw.canvas ->
    ?resize:Bogue.Layout.Resize.strategy ->
    ?clip:bool -> Bogue.Widget.t list -> Bogue.Layout.t
  val tower_of_w :
    ?name:string ->
    ?sep:int ->
    ?w:int ->
    ?align:Bogue.Draw.align ->
    ?background:Bogue.Layout.background ->
    ?widget_bg:Bogue.Layout.background ->
    ?canvas:Bogue.Draw.canvas ->
    ?resize:Bogue.Layout.Resize.strategy ->
    ?clip:bool -> Bogue.Widget.t list -> Bogue.Layout.t
  val flat :
    ?name:string ->
    ?sep:int ->
    ?adjust:Bogue.Layout.adjust ->
    ?hmargin:int ->
    ?vmargin:int ->
    ?margins:int ->
    ?align:Bogue.Draw.align ->
    ?background:Bogue.Layout.background ->
    ?shadow:Bogue.Style.shadow ->
    ?canvas:Bogue.Draw.canvas ->
    ?resize:Bogue.Layout.Resize.strategy ->
    ?clip:bool -> Bogue.Layout.t list -> Bogue.Layout.t
  val tower :
    ?name:string ->
    ?sep:int ->
    ?margins:int ->
    ?hmargin:int ->
    ?vmargin:int ->
    ?align:Bogue.Draw.align ->
    ?adjust:Bogue.Layout.adjust ->
    ?background:Bogue.Layout.background ->
    ?shadow:Bogue.Style.shadow ->
    ?canvas:Bogue.Draw.canvas ->
    ?resize:Bogue.Layout.Resize.strategy ->
    ?clip:bool -> Bogue.Layout.t list -> Bogue.Layout.t
  val superpose :
    ?w:int ->
    ?h:int ->
    ?name:string ->
    ?background:Bogue.Layout.background ->
    ?canvas:Bogue.Draw.canvas ->
    ?center:bool ->
    ?scale_content:bool -> Bogue.Layout.t list -> Bogue.Layout.t
  val make_clip :
    ?w:int ->
    ?scrollbar:bool ->
    ?scrollbar_inside:bool ->
    ?scrollbar_width:int ->
    ?on_scroll:(int -> unit) -> h:int -> Bogue.Layout.t -> Bogue.Layout.t
  val xpos : Bogue.Layout.t -> int
  val ypos : Bogue.Layout.t -> int
  val width : Bogue.Layout.t -> int
  val height : Bogue.Layout.t -> int
  val get_size : Bogue.Layout.t -> int * int
  val get_physical_size : Bogue.Layout.t -> int * int
  val getx : Bogue.Layout.t -> int
  val get_oldx : Bogue.Layout.t -> int
  val gety : Bogue.Layout.t -> int
  val get_oldy : Bogue.Layout.t -> int
  val is_shown : Bogue.Layout.t -> bool
  val widget : Bogue.Layout.t -> Bogue.Widget.t
  val top_house : Bogue.Layout.t -> Bogue.Layout.t
  val get_content : Bogue.Layout.t -> Bogue.Layout.room_content
  val get_rooms : Bogue.Layout.t -> Bogue.Layout.t list
  val has_resident : Bogue.Layout.t -> bool
  val auto_scale : Bogue.Layout.t -> unit
  val disable_resize : Bogue.Layout.t -> unit
  val on_resize : Bogue.Layout.t -> (unit -> unit) -> unit
  val set_width :
    ?keep_resize:bool ->
    ?check_window:bool -> ?update_bg:bool -> Bogue.Layout.t -> int -> unit
  val set_height :
    ?keep_resize:bool ->
    ?check_window:bool -> ?update_bg:bool -> Bogue.Layout.t -> int -> unit
  val set_size :
    ?keep_resize:bool ->
    ?check_window:bool ->
    ?update_bg:bool -> Bogue.Layout.t -> int * int -> unit
  val setx : ?keep_resize:bool -> Bogue.Layout.t -> int -> unit
  val sety : ?keep_resize:bool -> Bogue.Layout.t -> int -> unit
  val set_show : Bogue.Layout.t -> bool -> unit
  val set_shadow : Bogue.Layout.t -> Bogue.Style.shadow option -> unit
  val fix_content : Bogue.Layout.t -> unit
  val fit_content : ?sep:int -> Bogue.Layout.t -> unit
  val set_rooms : Bogue.Layout.t -> ?sync:bool -> Bogue.Layout.t list -> unit
  val replace_room : by:Bogue.Layout.t -> Bogue.Layout.t -> bool
  val set_enabled : Bogue.Layout.t -> bool -> unit
  val iter_unload_textures : Bogue.Layout.t -> unit
  val lock : Bogue.Layout.t -> unit
  val unlock : Bogue.Layout.t -> unit
  val animate_x : Bogue.Layout.t -> int Bogue.Avar.t -> unit
  val animate_y : Bogue.Layout.t -> int Bogue.Avar.t -> unit
  val stop_pos : Bogue.Layout.t -> unit
  val animate_w : Bogue.Layout.t -> int Bogue.Avar.t -> unit
  val animate_h : Bogue.Layout.t -> int Bogue.Avar.t -> unit
  val animate_alpha : Bogue.Layout.t -> float Bogue.Avar.t -> unit
  val animate_angle : Bogue.Layout.t -> float Bogue.Avar.t -> unit
  val hide :
    ?duration:int -> ?towards:Bogue.Avar.direction -> Bogue.Layout.t -> unit
  val show :
    ?duration:int -> ?from:Bogue.Avar.direction -> Bogue.Layout.t -> unit
  val fade_in :
    ?duration:int ->
    ?from_alpha:float -> ?to_alpha:float -> Bogue.Layout.t -> unit
  val fade_out :
    ?duration:int ->
    ?from_alpha:float ->
    ?to_alpha:float -> ?hide:bool -> Bogue.Layout.t -> unit
  val rotate :
    ?duration:int ->
    ?from_angle:float -> angle:float -> Bogue.Layout.t -> unit
  val slide_in :
    ?duration:int ->
    ?from:Bogue.Avar.direction ->
    ?dst:Bogue.Layout.t -> Bogue.Layout.t -> unit
  val slide_to : ?duration:int -> Bogue.Layout.t -> int * int -> unit
  val follow_mouse :
    ?dx:int ->
    ?dy:int ->
    ?modifierx:(int -> int) ->
    ?modifiery:(int -> int) -> Bogue.Layout.t -> unit
  val oscillate :
    ?duration:int -> ?frequency:float -> int -> Bogue.Layout.t -> unit
  val zoom :
    ?duration:int ->
    from_factor:float -> to_factor:float -> Bogue.Layout.t -> unit
  val reflat :
    ?align:Bogue.Draw.align ->
    ?hmargin:int ->
    ?vmargin:int -> ?margins:int -> ?duration:int -> Bogue.Layout.t -> unit
  val retower :
    ?align:Bogue.Draw.align ->
    ?hmargin:int ->
    ?vmargin:int -> ?margins:int -> ?duration:int -> Bogue.Layout.t -> unit
  val window_opt : Bogue.Layout.t -> Tsdl.Sdl.window option
  val show_window : Bogue.Layout.t -> unit
  val hide_window : Bogue.Layout.t -> unit
  val set_window_pos : Bogue.Layout.t -> int * int -> unit
  val get_window_pos : Bogue.Layout.t -> int option * int option
  val push_close : Bogue.Layout.t -> unit
  val destroy_window : Bogue.Layout.t -> unit
  val inside : Bogue.Layout.t -> int * int -> bool
  val claim_keyboard_focus : Bogue.Layout.t -> unit
  val set_cursor : Bogue.Layout.t option -> unit
  val containing_widget : Bogue.Widget.t -> Bogue.Layout.t option
end