factor/basis/x11/xinput2/ffi/ffi.factor

485 lines
12 KiB
Factor

! Copyright (C) 2010 Niklas Waern.
! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.c-types alien.libraries alien.syntax
classes.struct locals sequences x11.syntax x11.xlib ;
EXCLUDE: math => float ;
IN: x11.xinput2.ffi
<< "xinput2" "libXi.so" cdecl add-library >>
LIBRARY: xinput2
! *********
! * XI2.h *
! *********
<PRIVATE
: mask-index ( event -- n ) -3 shift ;
: bitmask ( event -- n ) 7 bitand 2^ ;
PRIVATE>
:: XISetMask ( mask event -- )
event mask-index :> index
event bitmask index mask nth bitor
index mask set-nth ; inline
:: XIClearMask ( mask event -- )
event mask-index :> index
event bitmask bitnot index mask nth bitand
index mask set-nth ; inline
:: XIMaskIsSet ( mask event -- n )
event mask-index :> index
event bitmask index mask nth bitand ;
: XIMaskLen ( event -- n ) 7 + -3 shift ;
! *************
! * XInput2.h *
! *************
STRUCT: XIAddMasterInfo
{ type int }
{ name c-string }
{ send_core Bool }
{ enable Bool } ;
STRUCT: XIRemoveMasterInfo
{ type int }
{ deviceid int }
{ return_mode int }
{ return_pointer int }
{ return_keyboard int } ;
STRUCT: XIAttachSlaveInfo
{ type int }
{ deviceid int }
{ new_master int } ;
STRUCT: XIDetachSlaveInfo
{ type int }
{ deviceid int } ;
UNION-STRUCT: XIAnyHierarchyChangeInfo
{ type int }
{ add XIAddMasterInfo }
{ remove XIRemoveMasterInfo }
{ attach XIAttachSlaveInfo }
{ detach XIDetachSlaveInfo } ;
STRUCT: XIModifierState
{ base int }
{ latched int }
{ locked int }
{ effective int } ;
TYPEDEF: XIModifierState XIGroupState
STRUCT: XIButtonState
{ mask_len int }
{ mask uchar* } ;
STRUCT: XIValuatorState
{ mask_len int }
{ mask uchar* }
{ values double* } ;
STRUCT: XIEventMask
{ deviceid int }
{ mask_len int }
{ mask uchar* } ;
STRUCT: XIAnyClassInfo
{ type int }
{ sourceid int } ;
STRUCT: XIButtonClassInfo
{ type int }
{ sourceid int }
{ num_buttons int }
{ labels Atom* }
{ state XIButtonState } ;
STRUCT: XIKeyClassInfo
{ type int }
{ sourceid int }
{ num_keycodes int }
{ keycodes int* } ;
STRUCT: XIValuatorClassInfo
{ type int }
{ sourceid int }
{ number int }
{ label Atom }
{ min double }
{ max double }
{ value double }
{ resolution int }
{ mode int } ;
STRUCT: XIDeviceInfo
{ deviceid int }
{ name c-string }
{ use int }
{ attachment int }
{ enabled Bool }
{ num_classes int }
{ classes XIAnyClassInfo** } ;
STRUCT: XIGrabModifiers
{ modifiers int }
{ status int } ;
! Generic XI2 event. All XI2 events have the same header.
STRUCT: XIEvent
{ type int }
{ serial ulong }
{ send_event Bool }
{ display Display* }
{ extension int }
{ evtype int }
{ time Time } ;
STRUCT: XIHierarchyInfo
{ deviceid int }
{ attachment int }
{ use int }
{ enabled Bool }
{ flags int } ;
! Notifies the client that the device hierarcy has been changed
! The client is expected to re-query the server for the device
! hierarchy.
STRUCT: XIHierarchyEvent
{ type int }
{ serial ulong }
{ send_event Bool }
{ display Display }
{ extension int }
{ evtype int }
{ time Time }
{ flags int }
{ num_info int }
{ info XIHierarchyInfo* } ;
! Notifies the client that the classes have been changed.
! This happens when the slave device that sends through the
! master changes.
STRUCT: XIDeviceChangedEvent
{ type int }
{ serial ulong }
{ send_event Bool }
{ display Display* }
{ extension int }
{ evtype int }
{ time Time }
{ deviceid int }
{ sourceid int }
{ reason int }
{ num_classes int }
{ classes XIAnyClassInfo** } ;
STRUCT: XIDeviceEvent
{ type int }
{ serial ulong }
{ send_event Bool }
{ display Display* }
{ extension int }
{ evtype int }
{ time Time }
{ deviceid int }
{ sourceid int }
{ detail int }
{ root Window }
{ event Window }
{ child Window }
{ root_x double }
{ root_y double }
{ event_x double }
{ event_y double }
{ flags int }
{ buttons XIButtonState }
{ valuators XIValuatorState }
{ mods XIModifierState }
{ group XIGroupState } ;
STRUCT: XIRawEvent
{ type int }
{ serial ulong }
{ send_event Bool }
{ display Display* }
{ extension int }
{ evtype int }
{ time Time }
{ deviceid int }
{ sourceid int }
{ detail int }
{ flags int }
{ valuators XIValuatorState }
{ raw_values double* } ;
STRUCT: XIEnterEvent
{ type int }
{ serial ulong }
{ send_event Bool }
{ display Display* }
{ extension int }
{ evtype int }
{ time Time }
{ deviceid int }
{ sourceid int }
{ detail int }
{ root Window }
{ event Window }
{ child Window }
{ root_x double }
{ root_y double }
{ event_x double }
{ event_y double }
{ mode int }
{ focus Bool }
{ same_screen Bool }
{ buttons XIButtonState }
{ mods XIModifierState }
{ group XIGroupState } ;
TYPEDEF: XIEnterEvent XILeaveEvent
TYPEDEF: XIEnterEvent XIFocusInEvent
TYPEDEF: XIEnterEvent XIFocusOutEvent
STRUCT: XIPropertyEvent
{ type int }
{ serial ulong }
{ send_event Bool }
{ display Display* }
{ extension int }
{ evtype int }
{ time Time }
{ deviceid int }
{ property Atom }
{ what int } ;
X-FUNCTION: Bool XIQueryPointer (
Display* display,
int deviceid,
Window win,
Window* root,
Window* child,
double* root_x,
double* root_y,
double* win_x,
double* win_y,
XIButtonState* buttons,
XIModifierState* mods,
XIGroupState* group ) ;
X-FUNCTION: Bool XIWarpPointer (
Display* display,
int deviceid,
Window src_win,
Window dst_win,
double src_x,
double src_y,
uint src_width,
uint src_height,
double dst_x,
double dst_y ) ;
X-FUNCTION: Status XIDefineCursor (
Display* display,
int deviceid,
Window win,
Cursor cursor ) ;
X-FUNCTION: Status XIUndefineCursor (
Display* display,
int deviceid,
Window win ) ;
X-FUNCTION: Status XIChangeHierarchy (
Display* display,
XIAnyHierarchyChangeInfo* changes,
int num_changes ) ;
X-FUNCTION: Status XISetClientPointer (
Display* dpy,
Window win,
int deviceid ) ;
X-FUNCTION: Bool XIGetClientPointer (
Display* dpy,
Window win,
int* deviceid ) ;
X-FUNCTION: int XISelectEvents (
Display* dpy,
Window win,
XIEventMask* masks,
int num_masks ) ;
X-FUNCTION: XIEventMask* XIGetSelectedEvents (
Display* dpy,
Window win,
int* num_masks_return ) ;
X-FUNCTION: Status XIQueryVersion (
Display* display,
int* major_version_inout,
int* minor_version_inout ) ;
X-FUNCTION: XIDeviceInfo* XIQueryDevice (
Display* dpy,
int deviceid,
int* ndevices_return ) ;
X-FUNCTION: Status XISetFocus (
Display* dpy,
int deviceid,
Window focus,
Time time ) ;
X-FUNCTION: Status XIGetFocus (
Display* dpy,
int deviceid,
Window* focus_return ) ;
X-FUNCTION: Status XIGrabDevice (
Display* dpy,
int deviceid,
Window grab_window,
Time time,
Cursor cursor,
int grab_mode,
int paired_device_mode,
Bool owner_events,
XIEventMask* mask ) ;
X-FUNCTION: Status XIUngrabDevice (
Display* dpy,
int deviceid,
Time time ) ;
X-FUNCTION: Status XIAllowEvents (
Display* display,
int deviceid,
int event_mode,
Time time ) ;
X-FUNCTION: int XIGrabButton (
Display* display,
int deviceid,
int button,
Window grab_window,
Cursor cursor,
int grab_mode,
int paired_device_mode,
int owner_events,
XIEventMask* mask,
int num_modifiers,
XIGrabModifiers* modifiers_inout ) ;
X-FUNCTION: int XIGrabKeycode (
Display* display,
int deviceid,
int keycode,
Window grab_window,
int grab_mode,
int paired_device_mode,
int owner_events,
XIEventMask* mask,
int num_modifiers,
XIGrabModifiers* modifiers_inout ) ;
X-FUNCTION: int XIGrabEnter (
Display* display,
int deviceid,
Window grab_window,
Cursor cursor,
int grab_mode,
int paired_device_mode,
int owner_events,
XIEventMask* mask,
int num_modifiers,
XIGrabModifiers* modifiers_inout ) ;
X-FUNCTION: int XIGrabFocusIn (
Display* display,
int deviceid,
Window grab_window,
int grab_mode,
int paired_device_mode,
int owner_events,
XIEventMask* mask,
int num_modifiers,
XIGrabModifiers* modifiers_inout ) ;
X-FUNCTION: Status XIUngrabButton (
Display* display,
int deviceid,
int button,
Window grab_window,
int num_modifiers,
XIGrabModifiers* modifiers ) ;
X-FUNCTION: Status XIUngrabKeycode (
Display* display,
int deviceid,
int keycode,
Window grab_window,
int num_modifiers,
XIGrabModifiers* modifiers ) ;
X-FUNCTION: Status XIUngrabEnter (
Display* display,
int deviceid,
Window grab_window,
int num_modifiers,
XIGrabModifiers* modifiers ) ;
X-FUNCTION: Status XIUngrabFocusIn (
Display* display,
int deviceid,
Window grab_window,
int num_modifiers,
XIGrabModifiers* modifiers ) ;
X-FUNCTION: Atom* XIListProperties (
Display* display,
int deviceid,
int* num_props_return ) ;
X-FUNCTION: void XIChangeProperty (
Display* display,
int deviceid,
Atom property,
Atom type,
int format,
int mode,
uchar* data,
int num_items ) ;
X-FUNCTION: void XIDeleteProperty (
Display* display,
int deviceid,
Atom property ) ;
X-FUNCTION: Status XIGetProperty (
Display* display,
int deviceid,
Atom property,
long offset,
long length,
Bool delete_property,
Atom type,
Atom* type_return,
int* format_return,
ulong* num_items_return,
ulong* bytes_after_return,
uchar** data ) ;
X-FUNCTION: void XIFreeDeviceInfo ( XIDeviceInfo* info ) ;