! Copyright (C) 2010 Erik Charlebois, William Schlieper.
! See http://factorcode.org/license.txt for BSD license.
-USING: arrays kernel game.input namespaces
-classes bit-arrays system sequences vectors x11 x11.xlib ;
+USING: accessors alien.c-types arrays kernel game.input
+namespaces math classes bit-arrays system sequences vectors
+x11 x11.xlib assocs generalizations ;
IN: game.input.x11
SINGLETON: x11-game-input-backend
} ; inline
: x-bits>hid-bits ( bit-array -- bit-array )
- 256 iota [ 2array ] { } 2map-as [ first ] filter [ second ] map
+ 256 iota [ 2array ] { } 2map-as [ first ] filter values
x>hid-bit-order [ nth ] curry map
256 <bit-array> swap [ t swap pick set-nth ] each ;
M: x11-game-input-backend read-keyboard
dpy get 256 <bit-array> [ XQueryKeymap drop ] keep
x-bits>hid-bits keyboard-state boa ;
+
+: query-pointer ( -- x y buttons )
+ dpy get dup XDefaultRootWindow
+ { int int int int int int int }
+ [ XQueryPointer drop ] [ ] with-out-parameters
+ [ 4 ndrop ] 3dip ;
+
+SYMBOL: mouse-reset?
M: x11-game-input-backend read-mouse
- 0 0 0 0 2 <vector> mouse-state boa ;
+ mouse-reset? get [ reset-mouse ] unless
+ query-pointer
+ mouse-state new
+ swap 256 /i >>buttons
+ swap 400 - >>dy
+ swap 400 - >>dx
+ 0 >>scroll-dy 0 >>scroll-dx ;
M: x11-game-input-backend reset-mouse
- ;
+ dpy get dup XDefaultRootWindow dup
+ 0 0 0 0 400 400 XWarpPointer drop t mouse-reset? set-global ;