]> gitweb.factorcode.org Git - factor.git/blob - basis/game/input/gtk/gtk.factor
core: Add the shuffler words but without primitives.
[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         "No default display." throw
18     ] if* ;
19
20 M: gtk-game-input-backend (open-game-input)
21     reset-mouse ;
22
23 M: gtk-game-input-backend (close-game-input)
24     ;
25
26 M: gtk-game-input-backend (reset-game-input)
27     ;
28
29 M: gtk-game-input-backend get-controllers
30     { } ;
31
32 M: gtk-game-input-backend product-string
33     drop "" ;
34
35 M: gtk-game-input-backend product-id
36     drop f ;
37
38 M: gtk-game-input-backend instance-id
39     drop f ;
40
41 M: gtk-game-input-backend read-controller
42     drop controller-state new ;
43
44 M: gtk-game-input-backend calibrate-controller
45     drop ;
46
47 M: gtk-game-input-backend vibrate-controller
48     3drop ;
49
50 HOOK: x>hid-bit-order os ( -- x )
51
52 M: linux x>hid-bit-order
53     {
54         0 0 0 0 0 0 0 0
55         0 41 30 31 32 33 34 35
56         36 37 38 39 45 46 42 43
57         20 26 8 21 23 28 24 12
58         18 19 47 48 40 224 4 22
59         7 9 10 11 13 14 15 51
60         52 53 225 49 29 27 6 25
61         5 17 16 54 55 56 229 85
62         226 44 57 58 59 60 61 62
63         63 64 65 66 67 83 71 95
64         96 97 86 92 93 94 87 91
65         90 89 98 99 0 0 0 68
66         69 0 0 0 0 0 0 0
67         88 228 84 70 0 0 74 82
68         75 80 79 77 81 78 73 76
69         127 129 128 102 103 0 72 0
70         0 0 0 227 231 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         0 0 0 0 0 0 0 0
85         0 0 0 0 0 0 0 0
86     } ; inline
87
88 : x-bits>hid-bits ( bit-array -- bit-array )
89     256 <iota> zip [ first ] filter values
90     x>hid-bit-order [ nth ] curry map
91     256 <bit-array> swap [ t swap pick set-nth ] each ;
92
93 M: gtk-game-input-backend read-keyboard
94     get-dpy 256 <bit-array> [ XQueryKeymap drop ] keep
95     x-bits>hid-bits keyboard-state boa ;
96
97 : query-pointer ( -- x y buttons )
98     get-dpy dup XDefaultRootWindow
99     { int int int int int int int }
100     [ XQueryPointer drop ] with-out-parameters
101     [ 4drop ] 3dip ;
102
103 M: gtk-game-input-backend read-mouse
104     query-pointer
105     mouse-state new
106     swap 256 /i >>buttons
107     swap 400 - >>dy
108     swap 400 - >>dx
109     0 >>scroll-dy 0 >>scroll-dx ;
110
111 M: gtk-game-input-backend reset-mouse
112     get-dpy dup XDefaultRootWindow dup
113     0 0 0 0 400 400 XWarpPointer drop ;