1 ! Copyright (C) 2010 Erik Charlebois, William Schlieper.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien.c-types alien.data alien.syntax assocs
4 bit-arrays game.input gdk.ffi generalizations kernel math
5 namespaces sequences system x11.xlib ;
8 SINGLETON: gtk-game-input-backend
10 gtk-game-input-backend game-input-backend set-global
13 FUNCTION: Display* gdk_x11_display_get_xdisplay ( GdkDisplay* display )
16 gdk_display_get_default gdk_x11_display_get_xdisplay ;
18 M: gtk-game-input-backend (open-game-input)
21 M: gtk-game-input-backend (close-game-input)
24 M: gtk-game-input-backend (reset-game-input)
27 M: gtk-game-input-backend get-controllers
30 M: gtk-game-input-backend product-string
33 M: gtk-game-input-backend product-id
36 M: gtk-game-input-backend instance-id
39 M: gtk-game-input-backend read-controller
40 drop controller-state new ;
42 M: gtk-game-input-backend calibrate-controller
45 M: gtk-game-input-backend vibrate-controller
48 HOOK: x>hid-bit-order os ( -- x )
50 M: linux x>hid-bit-order
53 0 41 30 31 32 33 34 35
54 36 37 38 39 45 46 42 43
55 20 26 8 21 23 28 24 12
56 18 19 47 48 40 224 4 22
58 52 53 225 49 29 27 6 25
59 5 17 16 54 55 56 229 85
60 226 44 57 58 59 60 61 62
61 63 64 65 66 67 83 71 95
62 96 97 86 92 93 94 87 91
65 88 228 84 70 0 0 74 82
66 75 80 79 77 81 78 73 76
67 127 129 128 102 103 0 72 0
86 : x-bits>hid-bits ( bit-array -- bit-array )
87 256 iota zip [ first ] filter values
88 x>hid-bit-order [ nth ] curry map
89 256 <bit-array> swap [ t swap pick set-nth ] each ;
91 M: gtk-game-input-backend read-keyboard
92 get-dpy 256 <bit-array> [ XQueryKeymap drop ] keep
93 x-bits>hid-bits keyboard-state boa ;
95 : query-pointer ( -- x y buttons )
96 get-dpy dup XDefaultRootWindow
97 { int int int int int int int }
98 [ XQueryPointer drop ] with-out-parameters
101 M: gtk-game-input-backend read-mouse
104 swap 256 /i >>buttons
107 0 >>scroll-dy 0 >>scroll-dx ;
109 M: gtk-game-input-backend reset-mouse
110 get-dpy dup XDefaultRootWindow dup
111 0 0 0 0 400 400 XWarpPointer drop ;