sig
  type ptr
  type obj
  type t
  type smart_cb = Evas.obj -> Evas.ptr -> unit
  type modifier
  type callback_priority = [ `after | `before | `default | `other of int ]
  type gl
  type gl_context_version = [ `gles_1_x | `gles_2_x | `gles_3_x ]
  type image_orient =
      [ `flip_horizontal
      | `flip_transpose
      | `flip_transverse
      | `flip_vertical
      | `orient_180
      | `orient_270
      | `orient_90
      | `orient_none ]
  module Point : sig type t = { x : int; y : int; } end
  type point = Evas.Point.t
  module Coord_point : sig type t = { x : int; y : int; } end
  type coord_point = Evas.Coord_point.t
  module Position :
    sig type t = { output : Evas.point; canvas : Evas.coord_point; } end
  type position = Evas.Position.t
  module Button_flags :
    sig type t = { double_click : bool; triple_click : bool; } end
  type coord_rectangle = int * int * int * int
  type button_flags = Evas.Button_flags.t
  type device
  module Coord_precision_point :
    sig type t = { x : int; y : int; xsub : float; ysub : float; } end
  type coord_precision_point = Evas.Coord_precision_point.t
  module Precision_position :
    sig
      type t = { output : Evas.point; canvas : Evas.coord_precision_point; }
    end
  type precision_position = Evas.Precision_position.t
  type aspect_control =
      [ `both | `horizontal | `neither | `none | `vertical ]
  module Signal :
    sig
      type 'a t
      type 'a v = (Evas.obj -> '-> unit) Evas.Signal.t
      type 'a r = (Evas.obj -> 'a) Evas.Signal.t
      type u = (Evas.obj -> unit) Evas.Signal.t
      val create : string -> (Evas.ptr -> 'a) -> 'Evas.Signal.v
      val create_unit : string -> Evas.Signal.u
      val create_ref : string -> (Evas.ptr -> '-> unit) -> 'Evas.Signal.r
      val get_name : 'Evas.Signal.t -> string
      val get_cb : 'Evas.Signal.t -> '-> Evas.smart_cb
    end
  type load_error =
      [ `cancelled
      | `corrupt_file
      | `does_not_exist
      | `generic
      | `incompatible_file
      | `none
      | `permission_denied
      | `recursive_reference
      | `resource_allocation_failed
      | `unknown_collection
      | `unknown_format ]
  type gl_api
  type map
  type display_mode = [ `compress | `dont_change | `expand | `none ]
  type render_op =
      [ `add
      | `add_rel
      | `blend
      | `blend_rel
      | `copy
      | `copy_rel
      | `mask
      | `mul
      | `sub
      | `sub_rel
      | `tint
      | `tint_rel ]
  val hint_expand : float
  val hint_fill : float
  val string_of_ptr : Evas.ptr -> string
  val string_opt_of_ptr : Evas.ptr -> string option
  val pointer_canvas_xy_get : Evas.t -> int * int
  val smart_objects_calculate : Evas.t -> unit
  val bool_of_ptr : Evas.ptr -> bool
  val string_string_of_ptr : Evas.ptr -> string * string
  val store_ptr_bool : Evas.ptr -> bool -> unit
  val obj_of_ptr : Evas.ptr -> Evas.obj
  val float_of_ptr : Evas.ptr -> float
  type alloc_error = [ `fatal | `none | `recovered ]
  val init : unit -> int
  val shutdown : unit -> int
  val alloc_error : unit -> Evas.alloc_error
  val async_events_fd_get : unit -> int
  val async_events_process : unit -> int
  val render_method_lookup : string -> int
  val render_method_list : unit -> string list
  val output_method_set : Evas.t -> int -> unit
  val output_method_get : Evas.t -> int
  val coord_screen_x_to_world : Evas.t -> int -> int
  val coord_screen_y_to_world : Evas.t -> int -> int
  val coord_world_x_to_screen : Evas.t -> int -> int
  val coord_world_y_to_screen : Evas.t -> int -> int
  val output_size_set : Evas.t -> int -> int -> unit
  val output_size_get : Evas.t -> int * int
  val output_viewport_set : Evas.t -> int -> int -> int -> int -> unit
  val output_viewport_get : Evas.t -> int * int * int * int
  val output_framespace_set : Evas.t -> int -> int -> int -> int -> unit
  val output_framespace_get : Evas.t -> int * int * int * int
  val image_cache_flush : Evas.t -> unit
  val image_cache_reload : Evas.t -> unit
  val image_cache_set : Evas.t -> int -> unit
  val image_cache_get : Evas.t -> int
  val image_max_size_get : Evas.t -> (int * int) option
  val new_ : unit -> Evas.t
  val free : Evas.t -> unit
  val focus_in : Evas.t -> unit
  val focus_out : Evas.t -> unit
  val focus_state_get : Evas.t -> bool
  val nochange_push : Evas.t -> unit
  val nochange_pop : Evas.t -> unit
  val damage_rectangle_add : Evas.t -> int -> int -> int -> int -> unit
  val obscured_rectangle_add : Evas.t -> int -> int -> int -> int -> unit
  val obscured_clear : Evas.t -> unit
  val render_async : Evas.t -> bool
  val render_updates : Evas.t -> (int * int * int * int) list
  val render : Evas.t -> unit
  val norender : Evas.t -> unit
  val render_idle_flush : Evas.t -> unit
  val render_dump : Evas.t -> unit
  val device_add : Evas.t -> Evas.device
  val device_del : Evas.device -> unit
  val device_push : Evas.t -> Evas.device -> unit
  val device_pop : Evas.t -> unit
  val device_list : Evas.t -> Evas.device option -> Evas.device list
  val device_name_set : Evas.device -> string -> unit
  val device_name_get : Evas.device -> string option
  val device_description_set : Evas.device -> string -> unit
  val device_description_get : Evas.device -> string option
  val device_parent_set : Evas.device -> Evas.device option -> unit
  val device_parent_get : Evas.device -> Evas.device option
  val focus_get : Evas.t -> Evas.obj option
  val objects_at_xy_get :
    Evas.t -> int -> int -> bool -> bool -> Evas.obj list
  val objects_in_rectangle_get :
    Evas.t -> int -> int -> int -> int -> bool -> bool -> Evas.obj list
  type cserve_stats = {
    saved_memory : int;
    wasted_memory : int;
    saved_memory_peak : int;
    wasted_memory_peak : int;
    saved_time_image_header_load : float;
    saved_time_image_data_load : float;
  }
  type cserve_config = {
    cache_max_usage : int;
    cache_item_timeout : int;
    cache_item_timeout_check : int;
  }
  val cserve_want_get : unit -> bool
  val cserve_connected_get : unit -> bool
  val cserve_stats_get : unit -> Evas.cserve_stats option
  val cserve_config_get : unit -> Evas.cserve_config option
  val cserve_config_set : Evas.cserve_config -> bool
  val cserve_disconnected : unit -> unit
  val load_error_str : Evas.load_error -> string
  val color_hsv_to_rgb : float -> float -> float -> int * int * int
  val color_rgb_to_hsv : int -> int -> int -> float * float * float
  val color_argb_premul : int -> int -> int -> int -> int * int * int
  val color_argb_unpremul : int -> int -> int -> int -> int * int * int
  val data_argb_premul : int array -> unit
  val data_argb_unpremul : int array -> unit
  val string_char_next_get : string -> int -> int * Int32.t
  val string_char_prev_get : string -> int -> int * Int32.t
  val string_char_len_get : string -> int
end