]> gitweb.factorcode.org Git - factor.git/blob - basis/game/input/gtk/gtk.factor
da11a72437a3a1cf9daf030c332b645c05d0a3c7
[factor.git] / basis / game / input / gtk / gtk.factor
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 ;
6 IN: game.input.gtk
7
8 SINGLETON: gtk-game-input-backend
9
10 gtk-game-input-backend game-input-backend set-global
11
12 LIBRARY: gdk
13 FUNCTION: Display* gdk_x11_display_get_xdisplay ( GdkDisplay* display ) ;
14
15 : get-dpy ( -- dpy )
16     gdk_display_get_default gdk_x11_display_get_xdisplay ;
17
18 M: gtk-game-input-backend (open-game-input)
19     reset-mouse ;
20
21 M: gtk-game-input-backend (close-game-input)
22     ;
23
24 M: gtk-game-input-backend (reset-game-input)
25     ;
26
27 M: gtk-game-input-backend get-controllers
28     { } ;
29
30 M: gtk-game-input-backend product-string
31     drop "" ;
32
33 M: gtk-game-input-backend product-id
34     drop f ;
35
36 M: gtk-game-input-backend instance-id
37     drop f ;
38
39 M: gtk-game-input-backend read-controller
40     drop controller-state new ;
41
42 M: gtk-game-input-backend calibrate-controller
43     drop ;
44
45 M: gtk-game-input-backend vibrate-controller
46     3drop ;
47
48 HOOK: x>hid-bit-order os ( -- x )
49
50 M: linux x>hid-bit-order
51     {
52         0 0 0 0 0 0 0 0
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
57         7 9 10 11 13 14 15 51
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
63         90 89 98 99 0 0 0 68
64         69 0 0 0 0 0 0 0
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
68         0 0 0 227 231 0 0 0
69         0 0 0 0 0 0 0 0
70         0 0 0 0 0 0 0 0
71         0 0 0 0 0 0 0 0
72         0 0 0 0 0 0 0 0
73         0 0 0 0 0 0 0 0
74         0 0 0 0 0 0 0 0
75         0 0 0 0 0 0 0 0
76         0 0 0 0 0 0 0 0
77         0 0 0 0 0 0 0 0
78         0 0 0 0 0 0 0 0
79         0 0 0 0 0 0 0 0
80         0 0 0 0 0 0 0 0
81         0 0 0 0 0 0 0 0
82         0 0 0 0 0 0 0 0
83         0 0 0 0 0 0 0 0
84     } ; inline
85
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 ;
90
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 ;
94
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
99     [ 4 ndrop ] 3dip ;
100
101 M: gtk-game-input-backend read-mouse
102     query-pointer
103     mouse-state new
104     swap 256 /i >>buttons
105     swap 400 - >>dy
106     swap 400 - >>dx
107     0 >>scroll-dy 0 >>scroll-dx ;
108
109 M: gtk-game-input-backend reset-mouse
110     get-dpy dup XDefaultRootWindow dup
111     0 0 0 0 400 400 XWarpPointer drop ;