]> gitweb.factorcode.org Git - factor.git/blob - basis/x11/xinput2/ffi/ffi.factor
c2a03b62017b32af39fe8f0d82194bacdcfdf593
[factor.git] / basis / x11 / xinput2 / ffi / ffi.factor
1 ! Copyright (C) 2010 Niklas Waern.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.libraries alien.syntax
4 classes.struct locals sequences x11.syntax x11.xlib ;
5 EXCLUDE: math => float ;
6 IN: x11.xinput2.ffi
7
8 << "xinput2" "libXi.so" cdecl add-library >>
9
10 LIBRARY: xinput2
11
12
13 ! *********
14 ! * XI2.h *
15 ! *********
16 <PRIVATE
17 : mask-index   ( event -- n ) -3 shift ;
18 : bitmask ( event -- n ) 7 bitand 2^ ;
19 PRIVATE>
20
21 :: XISetMask ( mask event -- )
22     event mask-index :> index
23     event bitmask index mask nth bitor
24     index mask set-nth ; inline
25
26 :: XIClearMask ( mask event -- )
27     event mask-index :> index
28     event bitmask bitnot index mask nth bitand
29     index mask set-nth ; inline
30
31 :: XIMaskIsSet ( mask event -- n )
32     event mask-index :> index
33     event bitmask index mask nth bitand ;
34
35 : XIMaskLen ( event -- n ) 7 + -3 shift ;
36
37
38 ! *************
39 ! * XInput2.h *
40 ! *************
41 STRUCT: XIAddMasterInfo
42     { type      int }
43     { name      c-string }
44     { send_core Bool }
45     { enable    Bool } ;
46
47 STRUCT: XIRemoveMasterInfo
48     { type            int }
49     { deviceid        int }
50     { return_mode     int }
51     { return_pointer  int }
52     { return_keyboard int } ;
53
54 STRUCT: XIAttachSlaveInfo
55     { type       int }
56     { deviceid   int }
57     { new_master int } ;
58
59 STRUCT: XIDetachSlaveInfo
60     { type     int }
61     { deviceid int } ;
62
63 UNION-STRUCT: XIAnyHierarchyChangeInfo
64     { type   int }
65     { add    XIAddMasterInfo }
66     { remove XIRemoveMasterInfo }
67     { attach XIAttachSlaveInfo }
68     { detach XIDetachSlaveInfo } ;
69
70 STRUCT: XIModifierState
71     { base      int }
72     { latched   int }
73     { locked    int }
74     { effective int } ;
75
76 TYPEDEF: XIModifierState XIGroupState
77
78 STRUCT: XIButtonState
79     { mask_len int }
80     { mask     uchar* } ;
81
82 STRUCT: XIValuatorState
83     { mask_len int }
84     { mask     uchar* }
85     { values   double* } ;
86
87 STRUCT: XIEventMask
88     { deviceid int }
89     { mask_len int }
90     { mask     uchar* } ;
91
92 STRUCT: XIAnyClassInfo
93     { type     int }
94     { sourceid int } ;
95
96 STRUCT: XIButtonClassInfo
97     { type        int }
98     { sourceid    int }
99     { num_buttons int }
100     { labels      Atom* }
101     { state       XIButtonState } ;
102
103 STRUCT: XIKeyClassInfo
104     { type         int }
105     { sourceid     int }
106     { num_keycodes int }
107     { keycodes     int* } ;
108
109 STRUCT: XIValuatorClassInfo
110     { type       int }
111     { sourceid   int }
112     { number     int }
113     { label      Atom }
114     { min        double }
115     { max        double }
116     { value      double }
117     { resolution int }
118     { mode       int } ;
119
120 STRUCT: XIDeviceInfo
121     { deviceid    int }
122     { name        c-string }
123     { use         int }
124     { attachment  int }
125     { enabled     Bool }
126     { num_classes int }
127     { classes     XIAnyClassInfo** } ;
128
129 STRUCT: XIGrabModifiers
130     { modifiers int }
131     { status    int } ;
132
133
134 ! Generic XI2 event. All XI2 events have the same header.
135 STRUCT: XIEvent
136     { type       int }
137     { serial     ulong }
138     { send_event Bool }
139     { display    Display* }
140     { extension  int }
141     { evtype     int }
142     { time       Time } ;
143
144 STRUCT: XIHierarchyInfo
145     { deviceid   int }
146     { attachment int }
147     { use        int }
148     { enabled    Bool }
149     { flags      int } ;
150
151 ! Notifies the client that the device hierarcy has been changed
152 ! The client is expected to re-query the server for the device
153 ! hierarchy.
154 STRUCT: XIHierarchyEvent
155     { type       int }
156     { serial     ulong }
157     { send_event Bool }
158     { display    Display }
159     { extension  int }
160     { evtype     int }
161     { time       Time }
162     { flags      int }
163     { num_info   int }
164     { info       XIHierarchyInfo* } ;
165
166 ! Notifies the client that the classes have been changed.
167 ! This happens when the slave device that sends through the
168 ! master changes.
169 STRUCT: XIDeviceChangedEvent
170     { type        int }
171     { serial      ulong }
172     { send_event  Bool }
173     { display     Display* }
174     { extension   int }
175     { evtype      int }
176     { time        Time }
177     { deviceid    int }
178     { sourceid    int }
179     { reason      int }
180     { num_classes int }
181     { classes     XIAnyClassInfo** } ;
182
183 STRUCT: XIDeviceEvent
184     { type       int }
185     { serial     ulong }
186     { send_event Bool }
187     { display    Display* }
188     { extension  int }
189     { evtype     int }
190     { time       Time }
191     { deviceid   int }
192     { sourceid   int }
193     { detail     int }
194     { root       Window }
195     { event      Window }
196     { child      Window }
197     { root_x     double }
198     { root_y     double }
199     { event_x    double }
200     { event_y    double }
201     { flags      int }
202     { buttons    XIButtonState }
203     { valuators  XIValuatorState }
204     { mods       XIModifierState }
205     { group      XIGroupState } ;
206
207 STRUCT: XIRawEvent
208     { type       int }
209     { serial     ulong }
210     { send_event Bool }
211     { display    Display* }
212     { extension  int }
213     { evtype     int }
214     { time       Time }
215     { deviceid   int }
216     { sourceid   int }
217     { detail     int }
218     { flags      int }
219     { valuators  XIValuatorState }
220     { raw_values double* } ;
221
222 STRUCT: XIEnterEvent
223     { type        int }
224     { serial      ulong }
225     { send_event  Bool }
226     { display     Display* }
227     { extension   int }
228     { evtype      int }
229     { time        Time }
230     { deviceid    int }
231     { sourceid    int }
232     { detail      int }
233     { root        Window }
234     { event       Window }
235     { child       Window }
236     { root_x      double }
237     { root_y      double }
238     { event_x     double }
239     { event_y     double }
240     { mode        int }
241     { focus       Bool }
242     { same_screen Bool }
243     { buttons     XIButtonState }
244     { mods        XIModifierState }
245     { group       XIGroupState } ;
246
247 TYPEDEF: XIEnterEvent XILeaveEvent
248 TYPEDEF: XIEnterEvent XIFocusInEvent
249 TYPEDEF: XIEnterEvent XIFocusOutEvent
250
251 STRUCT: XIPropertyEvent
252     { type       int }
253     { serial     ulong }
254     { send_event Bool }
255     { display    Display* }
256     { extension  int }
257     { evtype     int }
258     { time       Time }
259     { deviceid   int }
260     { property   Atom }
261     { what       int } ;
262
263
264
265 X-FUNCTION: Bool XIQueryPointer (
266     Display*         display,
267     int              deviceid,
268     Window           win,
269     Window*          root,
270     Window*          child,
271     double*          root_x,
272     double*          root_y,
273     double*          win_x,
274     double*          win_y,
275     XIButtonState*   buttons,
276     XIModifierState* mods,
277     XIGroupState*    group ) ;
278
279 X-FUNCTION: Bool XIWarpPointer (
280     Display* display,
281     int      deviceid,
282     Window   src_win,
283     Window   dst_win,
284     double   src_x,
285     double   src_y,
286     uint     src_width,
287     uint     src_height,
288     double   dst_x,
289     double   dst_y ) ;
290
291 X-FUNCTION: Status XIDefineCursor (
292     Display* display,
293     int      deviceid,
294     Window   win,
295     Cursor   cursor ) ;
296
297 X-FUNCTION: Status XIUndefineCursor (
298     Display* display,
299     int      deviceid,
300     Window   win ) ;
301
302 X-FUNCTION: Status XIChangeHierarchy (
303     Display*                  display,
304     XIAnyHierarchyChangeInfo* changes,
305     int                       num_changes ) ;
306
307 X-FUNCTION: Status XISetClientPointer (
308     Display* dpy,
309     Window   win,
310     int      deviceid ) ;
311
312 X-FUNCTION: Bool XIGetClientPointer (
313     Display* dpy,
314     Window   win,
315     int*     deviceid ) ;
316
317 X-FUNCTION: int XISelectEvents (
318     Display*     dpy,
319     Window       win,
320     XIEventMask* masks,
321     int          num_masks ) ;
322
323 X-FUNCTION: XIEventMask* XIGetSelectedEvents (
324     Display* dpy,
325     Window   win,
326     int*     num_masks_return ) ;
327
328 X-FUNCTION: Status XIQueryVersion (
329     Display* display,
330     int*     major_version_inout,
331     int*     minor_version_inout ) ;
332
333 X-FUNCTION: XIDeviceInfo* XIQueryDevice (
334     Display* dpy,
335     int      deviceid,
336     int*     ndevices_return ) ;
337
338 X-FUNCTION: Status XISetFocus (
339     Display* dpy,
340     int      deviceid,
341     Window   focus,
342     Time     time ) ;
343
344 X-FUNCTION: Status XIGetFocus (
345     Display* dpy,
346     int      deviceid,
347     Window*  focus_return ) ;
348
349 X-FUNCTION: Status XIGrabDevice (
350     Display*     dpy,
351     int          deviceid,
352     Window       grab_window,
353     Time         time,
354     Cursor       cursor,
355     int          grab_mode,
356     int          paired_device_mode,
357     Bool         owner_events,
358     XIEventMask* mask ) ;
359
360 X-FUNCTION: Status XIUngrabDevice (
361     Display* dpy,
362     int      deviceid,
363     Time     time ) ;
364
365 X-FUNCTION: Status XIAllowEvents (
366     Display* display,
367     int      deviceid,
368     int      event_mode,
369     Time     time ) ;
370
371 X-FUNCTION: int XIGrabButton (
372     Display*         display,
373     int              deviceid,
374     int              button,
375     Window           grab_window,
376     Cursor           cursor,
377     int              grab_mode,
378     int              paired_device_mode,
379     int              owner_events,
380     XIEventMask*     mask,
381     int              num_modifiers,
382     XIGrabModifiers* modifiers_inout ) ;
383
384 X-FUNCTION: int XIGrabKeycode (
385     Display*         display,
386     int              deviceid,
387     int              keycode,
388     Window           grab_window,
389     int              grab_mode,
390     int              paired_device_mode,
391     int              owner_events,
392     XIEventMask*     mask,
393     int              num_modifiers,
394     XIGrabModifiers* modifiers_inout ) ;
395
396 X-FUNCTION: int XIGrabEnter (
397     Display*         display,
398     int              deviceid,
399     Window           grab_window,
400     Cursor           cursor,
401     int              grab_mode,
402     int              paired_device_mode,
403     int              owner_events,
404     XIEventMask*     mask,
405     int              num_modifiers,
406     XIGrabModifiers* modifiers_inout ) ;
407
408 X-FUNCTION: int XIGrabFocusIn (
409     Display*         display,
410     int              deviceid,
411     Window           grab_window,
412     int              grab_mode,
413     int              paired_device_mode,
414     int              owner_events,
415     XIEventMask*     mask,
416     int              num_modifiers,
417     XIGrabModifiers* modifiers_inout ) ;
418
419 X-FUNCTION: Status XIUngrabButton (
420     Display*         display,
421     int              deviceid,
422     int              button,
423     Window           grab_window,
424     int              num_modifiers,
425     XIGrabModifiers* modifiers ) ;
426
427 X-FUNCTION: Status XIUngrabKeycode (
428     Display*         display,
429     int              deviceid,
430     int              keycode,
431     Window           grab_window,
432     int              num_modifiers,
433     XIGrabModifiers* modifiers ) ;
434
435 X-FUNCTION: Status XIUngrabEnter (
436     Display*         display,
437     int              deviceid,
438     Window           grab_window,
439     int              num_modifiers,
440     XIGrabModifiers* modifiers ) ;
441
442 X-FUNCTION: Status XIUngrabFocusIn (
443     Display*         display,
444     int              deviceid,
445     Window           grab_window,
446     int              num_modifiers,
447     XIGrabModifiers* modifiers ) ;
448
449 X-FUNCTION: Atom* XIListProperties (
450     Display* display,
451     int      deviceid,
452     int*     num_props_return ) ;
453
454 X-FUNCTION: void XIChangeProperty (
455     Display* display,
456     int      deviceid,
457     Atom     property,
458     Atom     type,
459     int      format,
460     int      mode,
461     uchar*   data,
462     int      num_items ) ;
463
464 X-FUNCTION: void XIDeleteProperty (
465     Display* display,
466     int      deviceid,
467     Atom     property ) ;
468
469 X-FUNCTION: Status XIGetProperty (
470     Display* display,
471     int      deviceid,
472     Atom     property,
473     long     offset,
474     long     length,
475     Bool     delete_property,
476     Atom     type,
477     Atom*    type_return,
478     int*     format_return,
479     ulong*   num_items_return,
480     ulong*   bytes_after_return,
481     uchar**  data ) ;
482
483 X-FUNCTION: void XIFreeDeviceInfo ( XIDeviceInfo* info ) ;
484