]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/game/input/x11/x11.factor
Updating code to use with-out-parameters
[factor.git] / basis / game / input / x11 / x11.factor
index 4e6f61053150ce1077a53be992c371b909cd9a36..c3bf11f7a898d49e24b44a0c0171c4ac4d5310c4 100644 (file)
@@ -1,7 +1,8 @@
 ! 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
@@ -77,16 +78,31 @@ M: linux x>hid-bit-order
     } ; 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 ;