sig
  type event_type =
      NONE
    | PUSH
    | RELEASE
    | DOUBLECLICK
    | DRAG
    | MOVE
    | KEYDOWN
    | KEYUP
    | FRAME
    | RESIZE
    | SCROLL
    | PEN_PRESSURE
    | PEN_PROXIMITY_ENTER
    | PEN_PROXIMITY_LEAVE
    | CLOSE_WINDOW
    | QUIT_APPLICATION
    | USER
  type key_symbol =
      KEY_Custom of int
    | KEY_Space
    | KEY_BackSpace
    | KEY_Tab
    | KEY_Linefeed
    | KEY_Clear
    | KEY_Return
    | KEY_Pause
    | KEY_Scroll_Lock
    | KEY_Sys_Req
    | KEY_Escape
    | KEY_Delete
    | KEY_Home
    | KEY_Left
    | KEY_Up
    | KEY_Right
    | KEY_Down
    | KEY_Prior
    | KEY_Page_Up
    | KEY_Next
    | KEY_Page_Down
    | KEY_End
    | KEY_Begin
    | KEY_Select
    | KEY_Print
    | KEY_Execute
    | KEY_Insert
    | KEY_Undo
    | KEY_Redo
    | KEY_Menu
    | KEY_Find
    | KEY_Cancel
    | KEY_Help
    | KEY_Break
    | KEY_Mode_switch
    | KEY_Script_switch
    | KEY_Num_Lock
    | KEY_KP_Space
    | KEY_KP_Tab
    | KEY_KP_Enter
    | KEY_KP_F1
    | KEY_KP_F2
    | KEY_KP_F3
    | KEY_KP_F4
    | KEY_KP_Home
    | KEY_KP_Left
    | KEY_KP_Up
    | KEY_KP_Right
    | KEY_KP_Down
    | KEY_KP_Prior
    | KEY_KP_Page_Up
    | KEY_KP_Next
    | KEY_KP_Page_Down
    | KEY_KP_End
    | KEY_KP_Begin
    | KEY_KP_Insert
    | KEY_KP_Delete
    | KEY_KP_Equal
    | KEY_KP_Multiply
    | KEY_KP_Add
    | KEY_KP_Separator
    | KEY_KP_Subtract
    | KEY_KP_Decimal
    | KEY_KP_Divide
    | KEY_KP_0
    | KEY_KP_1
    | KEY_KP_2
    | KEY_KP_3
    | KEY_KP_4
    | KEY_KP_5
    | KEY_KP_6
    | KEY_KP_7
    | KEY_KP_8
    | KEY_KP_9
    | KEY_F1
    | KEY_F2
    | KEY_F3
    | KEY_F4
    | KEY_F5
    | KEY_F6
    | KEY_F7
    | KEY_F8
    | KEY_F9
    | KEY_F10
    | KEY_F11
    | KEY_F12
    | KEY_F13
    | KEY_F14
    | KEY_F15
    | KEY_F16
    | KEY_F17
    | KEY_F18
    | KEY_F19
    | KEY_F20
    | KEY_F21
    | KEY_F22
    | KEY_F23
    | KEY_F24
    | KEY_F25
    | KEY_F26
    | KEY_F27
    | KEY_F28
    | KEY_F29
    | KEY_F30
    | KEY_F31
    | KEY_F32
    | KEY_F33
    | KEY_F34
    | KEY_F35
    | KEY_Shift_L
    | KEY_Shift_R
    | KEY_Control_L
    | KEY_Control_R
    | KEY_Caps_Lock
    | KEY_Shift_Lock
    | KEY_Meta_L
    | KEY_Meta_R
    | KEY_Alt_L
    | KEY_Alt_R
    | KEY_Super_L
    | KEY_Super_R
    | KEY_Hyper_L
    | KEY_Hyper_R
  type mouse_button =
      LEFT_MOUSE_BUTTON
    | MIDDLE_MOUSE_BUTTON
    | RIGHT_MOUSE_BUTTON
  type t
  external get_event_type :
    OsgGA.Gui_event_adapter.t -> OsgGA.Gui_event_adapter.event_type
    = "gui_event_adapter_get_event_type"
  external get_x : OsgGA.Gui_event_adapter.t -> float
    = "gui_event_adapter_get_x"
  external get_y : OsgGA.Gui_event_adapter.t -> float
    = "gui_event_adapter_get_y"
  external get_key :
    OsgGA.Gui_event_adapter.t -> OsgGA.Gui_event_adapter.key_symbol option
    = "gui_event_adapter_get_key"
  external get_button_mask : OsgGA.Gui_event_adapter.t -> int
    = "gui_event_adapter_get_button_mask"
  val get_mouse_buttons :
    OsgGA.Gui_event_adapter.t -> OsgGA.Gui_event_adapter.mouse_button list
  external get_window :
    OsgGA.Gui_event_adapter.t -> float * float * float * float
    = "gui_event_adapter_get_window"
  external get_mouse :
    OsgGA.Gui_event_adapter.t -> float * float * float * float
    = "gui_event_adapter_get_mouse"
end